-
Notifications
You must be signed in to change notification settings - Fork 18
deploy
- hadoop(2.7.3)
- hive(1.2.1)
- spark(1.6.3)
- mysql(5.5+)
- baifendian-datax
git clone https://github.com/baifendian/swordfish.git
cd {swordfish_source_code_home}
mvn -U clean package assembly:assembly -Dmaven.test.skip=true
注意,跑单元测试需要配置好:$HADOOP_HOME,不然会报错。
正常编译完后,会在当前目录生成 target/swordfish-all-{version}
.
查看该目录, 如下:
.
bin/
conf/
lib/
注意 mysqld 配置为:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
- 创建 db 和 账号
mysql -h {hostname} -u {admin-user} -p{password}
mysql> CREATE DATABASE {db-name} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql> GRANT ALL PRIVILEGES ON {db-name}.* TO '{db-user}'@'%' IDENTIFIED BY '{password}';
mysql> GRANT ALL PRIVILEGES ON {db-name}.* TO '{db-user}'@'localhost' IDENTIFIED BY '{password}';
mysql> flush privileges;
- 创建表
说明:sql 为
{swordfish_source_code_home}/sql/create-table.sql
mysql -h {hostname} -u {db-user} -p{password} -D {db-name} < {swordfish_source_code_home}/sql/create-table.sql
创建quartz相关表,sql为
{swordfish_source_code_home/sql/CreateQuartTables.sql
mysql -h {hostname} -u {db-user} -p{password} -D {db-name} < {swordfish_source_code_home}/sql/CreateQuartTables.sql
由于 exec-server 通过 sudo 方式来实现作业由指定用户执行,所有部署的账号需要具备 sudo 权限,且是免秘钥的方式。
vi /etc/sudoers (最好用 visudo 命令)
swordfish ALL=(ALL) NOPASSWD: NOPASSWD: ALL
# 并且需要注释掉 Default requiretty 一行
#Default requiretty
说明:配置文件位于 {swordfish_source_code_home}/target/swordfish-all-{version}/conf 下面。
- 1.配置 application.properties
# api 应用启动的端口,默认为 12345
server.port=
- 2.配置 common
common/
├── base_config.properties
├── hadoop
│ └── hadoop.properties
├── hive
│ └── hive.properties
├── mail.properties
├── search.properties
└── storm.properties
base_config.properties 中的重要配置:
注意:下面的相关目录,运行时会自动创建,用户也可以自己创建,确保采用部署用户来创建即可。
# 表示禁用用户列表,即任务不能以这些账号进行执行,一般列出具备 root 权限的用户
prohibit.user.list=
# 本地文件缓存目录
local.data.basepath=/tmp/swordfish/filecache
# 下载时使用的本地缓存目录
local.download.basepath=/tmp/swordfish/downloadcache
# 执行目录
local.exec.basepath=/tmp/swordfish/exec
# hdfs 存储数据的目录
hdfs.data.basepath=/tmp/swordfish/filecache
# 本地的 jar 包目录,udf 文件放在这里面
hdfs.udfjar.basepath=/tmp/swordfish/hiveJars
# 导入导出使用的 hdfs 临时目录,有个特别要说明的是,这个目录需要是 0777 权限,它的上级需要是 755 即可
hdfs.impexp.basepath=/tmp/swordfish/impexp
# 执行任务的环境变量文件,由于各工作流的执行用户是不一样的,这里配置全局的环境变量信息,如
# HADOOP_HOME,PATH 等。
# 另注意该文件存放路径需保证各执行用户有访问权限,且需要是绝对路径
sf.env.file=/home/swordfish/.sf_env.sh
# 编译的dataX所在的目录,非dataX源码目录。一般在编译后的源码包target/datax/datax内。
dataxHome="/opt/udp/DataX/target/datax/datax"
具体 sf.env.file 文件的示例(该文件需要具备 0755 权限,上一级目录需要是 0755,比如 chmod -R 0755 /home/swordfish/.sf_env.sh):
export HADOOP_HOME=/home/bfd_hz/hadoop
export HADOOP_CONF_DIR=/home/bfd_hz/hadoop/etc/hadoop/
export SPARK_HOME=/home/bfd_hz/spark
export PYTHON_HOME=/opt/Python-2.7
export JAVA_HOME=/opt/java
export HIVE_HOME=/home/bfd_hz/hive
export PATH=$HIVE_HOME/bin:$HADOOP_HOME/bin:$SPARK_HOME/bin:$JAVA_HOME/bin:$PYTHON_HOME/bin/:$PATH
hadoop/hadoop.properties 配置说明:需要将相关的 hadoop 访问地址改为正确的地址。
mail.properties 配置说明:邮件配置,修改相应的配置即可。
search.properties 配置说明:
# es 连接地址,注意这里是 es 的 node 连接地址,一般端口为 9300
es.address =
# es 集群的名称
es.cluster.name =
hive/hive.properties 重要配置说明:
# hive metastore 地址,使用metastore server时配置
hive.metastore.uris=
# hive thrift 地址
hive.thrift.uris=
storm.properties重要配置说明:
#storm rest 服务地址
storm.rest.url=
- 3.配置 dao
.
└── dao
└── data_source.properties
dao/data_source.properties 配置说明(注意下面的配置需要和上面数据库初始化中的 {db-name}, {db-user}, {password} 保存一致):
# mysql 的连接信息,需要修改的
spring.datasource.url=
# mysql 连接账号
spring.datasource.username=
# mysql 连接密码
spring.datasource.password=
- 4.配置 master.properties
# master 请求 worker 第一次失败后的,默认的重试次数(0 表示不重试)
masterToWorker.failRetry.count=
# master 请求 worker 的工作流队列大小的最大值
masterToWorker.executionFlow.queueSize=
# master 心跳检查间隔, 配置的要小于等于 master.heartbeat.timeout.interval
master.heartbeat.check.interval=
# master 心跳超时间隔, 注意要配置的比executor.heartbeat.interval 稍长点
master.heartbeat.timeout.interval=
# master 启动端口
master.port=12000
# 流任务的检测状态周期,单位:秒
streaming.check.interval=
# 流任务提交后,没有进入接受、运行状态的超时时间,单位:秒
streaming.timeout.threshold=
quartz.properties 重要配置说明:
# quartz jdbc 连接 url
org.quartz.dataSource.myDS.URL=
# quartz jdbc 用户
org.quartz.dataSource.myDS.user=
# quartz jdbc 连接密码
org.quartz.dataSource.myDS.password=
- 5.配置 worker.properties
# worker 端口
executor.port=12001
# worker 的心跳汇报间隔
executor.heartbeat.interval=
# 即席查询运行线程池大小
executor.adhocrunner.threads=
# 工作量运行线程池大小
executor.flowrunner.threads=
# 结点运行线程池大小
executor.noderunner.threads=
# 流任务运行运行线程大小
executor.streaming.threads=
# 编译的dataX所在的目录,非dataX源码目录。一般在编译后的源码包target/datax/datax内。
executor.datax.home=
采用 install.sh 脚本,修改其中的变量信息,替换为正确的值。然后运行 install.sh:
# 其中 -r true 表示会执行配置文件的变量替换,-r false 表示不会执行替换,-m module 表示部署具体的模块,其中 all 表示所有模块
./install.sh -r <true|false> -m <all|web-server|master-server|exec-server>
# 需要注意的是,这种方案不仅会完成配置,还会启停服务,缺点是该脚本只提供了部分的配置项替换。
- 1.启停 API
cd {swordfish_source_code_home}/target/swordfish-all-{version}/
./bin/swordfish-daemon.sh start web-server
./bin/swordfish-daemon.sh stop web-server
- 2.启停 Master
cd {swordfish_source_code_home}/target/swordfish-all-{version}/
./bin/swordfish-daemon.sh start master-server
./bin/swordfish-daemon.sh stop master-server
- 3.启停 Worker
说明:启动 Worker 的用户,必须具有 sudo 权限,且是免密码方式。
cd {swordfish_source_code_home}/target/swordfish-all-{version}/
./bin/swordfish-daemon.sh start exec-server
./bin/swordfish-daemon.sh stop exec-server
上面操作,注意启动之后查看进程是否存在,停止之后进程是否关闭。
日志收集,采用的是 ELK 框架,即 elasticsearch,logstash,kibana,另外还有 filebeat 组件。其中 filebeat 用于扫描日志文件,将日志发送到 logstash 服务,logstash 服务则完成将日志切分,发送到 elasticsearch 服务。
- filebeat(日志 -> logstash)
# 配置文件如下(swordfish-filebeat.yml):
filebeat.prospectors:
- input_type: log
multiline.timeout: 1s
paths:
- {swordfish_source_code_home}/target/swordfish-all-{version}/logs/exec-server*.log
multiline:
pattern: '^\['
negate: true
match: after
# exclude_lines: ["^\\[DEBUG\\]"]
output.logstash:
hosts: ["{logstash-ip}:{logstash-port}"]
启动方式为:
./filebeat -e -c swordfish-filebeat.yml -d publish &
- logstash(logstash -> elasticsearch)
# 配置文件如下(swordfish-pipeline.conf):
input {
beats {
port => "{logstash-port}"
}
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
# }
#
filter {
grok {
match => { "message" => ["%{LOGLEVEL:logLevel}\]\[%{NUMBER:nanoTime:integer}\](?<V1>.*)\[jobId=(?<jobId>[\w\d\-_]+)\](?<V2>.*)", "%{LOGLEVEL:logLevel}\]\[%{NUMBER:nanoTime:integer}\](?<V1>.)(?<V2>.*)"] }
add_field => { "nest_msg" => "[%{logLevel}]%{V1}%{V2}" }
remove_field => [ "message", "V1", "V2" ]
}
if ![jobId] {
drop {}
}
mutate {
convert => { "nanoTime" => "integer" }
}
}
output {
stdout {
codec => json
}
elasticsearch {
hosts => [ "{es-ip}:{es-port}", "{es-ip}:{es-port}", "{es-ip}:{es-port}" ]
codec => json
index => "swordfish-logstash-%{+YYYY.MM.dd}"
}
}
启动方式为:
bin/logstash -f swordfish-pipeline.conf &
参考使用 python client
- 服务启动失败
可能是端口重复导致,请检测一下端口是否被占用。
- master-server 启动失败
检查一下数据库中的表 master_server
,看是否具有记录,如果记录中的 ip:port 和当前启动的 master_server
不一致,则需要删除数据库中的记录,或者修改为一致的。