025-大数据ETL工具之StreamSets安装及订阅mysql binlog
2019-06-10
这是坚持技术写作计划(含翻译)的第 25 篇,定个小目标 999,每周最少 2 篇。
本文主要介绍 CDH6.2+StreamSets3.9。
StreamSets 是一个大数据采集和数据处理工具。可以通过拖拽式的可视化操作,实现数据管道(Pipelines)的设计和调度。其特点有:
- 拖拽式的可视化界面操作,上手快。
- 对常见数据处理(数据源、数据操作、数据输出)支持较好。
- 内置监控,可以对数据流进行观测。
类似的开源产品还有 Apache NiFi , 网上有关于 NiFi 和 StreamSets 的对比 Open Source ETL: Apache NiFi vs Streamsets (网上有中文翻译版版)
国内接触较多的 ETL 工具,可能是 DataX 、 Kettle 、Sqoop。此处有个简单的对比,数据集成之 kettle、sqoop、datax、streamSets 比较
安装 StreamSets 3.9
下载 parcel 安装包
从 https://archives.streamsets.com/index.html 下载 3.9 的
并上传到 http 服务器的 www 目录下,本文以 centos7.6 为例
wget -P /var/www/html/streamsets3.9.0/ https://archives.streamsets.com/datacollector/3.9.0/parcel/manifest.json
wget -P /var/www/html/streamsets3.9.0/ https://archives.streamsets.com/datacollector/3.9.0/parcel/STREAMSETS_DATACOLLECTOR-3.9.0-el7.parcel.sha
wget -P /var/www/html/streamsets3.9.0/ https://archives.streamsets.com/datacollector/3.9.0/parcel/STREAMSETS_DATACOLLECTOR-3.9.0-el7.parcel
|
配置 csd
从 https://streamsets.com/opensource 下载
wget -P /opt/cloudera/csd/ https://archives.streamsets.com/datacollector/3.9.0/csd/STREAMSETS-3.9.0.jar
cd /opt/cloudera/csd/
sudo chown cloudera-scm:cloudera-scm STREAMSETS-3.9.0.jar && sudo chmod 644 STREAMSETS-3.9.0.jar
systemctl restart cloudera-scm-server
|
下载分发 Parcel 包
下载并激活,但是,我实际测试时,总大小,4.6G,实际下载后,5.2G,导致 sha1sum 校验失败,报
在 cm 所在主机, ls -lah /opt/cloudera/parcel-repo
把下载的 https://archives.streamsets.com/datacollector/3.9.0/parcel/STREAMSETS_DATACOLLECTOR-3.9.0-el7.parcel 复制到 /opt/cloudera/parcel-repo 下
如果已经不信邪,试过下载,并报 hash 错误后,直接替换后,这个页面还是提示 hash,此时再次点击下载,就会变成分配。
创建完毕
streamsets 简单使用
打开 streamsets,默认用户名密码 admin/admin
![image.png](https://cdn.nlark.com/yuque/0/2019/png/226273/1561003595012-472339dd-c7c0-49be-9be3-855d9fe21016.png)
官方教程,参考 Basic Tutorial
本文主要讲解订阅 mysql binlog 进行数据同步
mysql binlog
开启 binlog
修改 mysql 配置文件,my.cnf,在 mysqld 下增加(注意 5.7 的不加 server-id 无法正常启动)
server-id=1
log-bin=mysql-bin
binlog_format=ROW
|
创建并配置同步账号
GRANT ALL on slave_test.* to 'slave_test'@'%' identified by 'slave_test';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE on *.* to 'slave_test'@'%';
FLUSH PRIVILEGES;
|
安装 mysql jdbc 驱动
wget -P /opt/cloudera/parcels/STREAMSETS_DATACOLLECTOR/streamsets-libs/streamsets-datacollector-mysql-binlog-lib/lib/ https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar
|
重启 streamsets
创建 pipeline
配置 mysql binlog 解析及处理
配置目标端
运行
测试
此处使用 mysql 自带的压测工具 mysqlslap.exe
进行测试
bin/mysqlslap --user=root --password=xxxxxx --concurrency=50 --number-int-cols=5 --number-char-cols=20 --auto-generate-sql --number-of-queries=100000 --auto-generate-sql-load-type=write --host=192.168.0.123 --port=3306
--user 用户(需要有建库建表权限)
--password 密码
--concurrency 并发数
--number-int-cols 表内有5个数字列
--number-char-cols 表内有20个字符串列
--auto-generate-sql 自动生成脚本
--number-of-queries 总执行次数
--auto-generate-sql-load-type=write 只执行写入操作
--host mysql 主机
--port 端口
|
下方有监控报表
常见错误
![image.png](https://cdn.nlark.com/yuque/0/2019/png/226273/1561021775509-fa60a34d-8e71-4e30-aa65-88a23521fb26.png)
同步不一致导致的错误,手动从
设置偏移量
如果报错 Pipeline Status: RUNNING_ERROR: For input string: ""xxxx"
,把 my.cnf 改成
server-id=1
log-bin=mysql-bin
binlog_format=ROW
sync_binlog=1
binlog_gtid_simple_recovery=ON
log_slave_updates=ON
gtid_mode=ON
enforce_gtid_consistency=ON
|