业务背景
公司上大数据,要把sqlserver里的业务数据实时同步到大数据平台上。几天调研后选择StreamSet作为ETL工具。技术选型的理由主要有几点:
- sqlserver的坑太深,网上找了很多工具对sqlserver的支持力度都不是很大(微软全家桶的要哭了~)
- 自己开发ETL程序耗时太长,同时配套的ETL metrics工具也需要配备,劳民伤财。感觉有时间开发不如把精力放在业务数据研究和指标计算上。
- sqlserver支持两种实时同步机制:CDC和Change Tracking,CDC使用起来比较重 果断放弃。
streamset安装
我用的是CDH6.2版本集成化了StreamSet,方便管理。
- streamset下载地址:https://archives.streamsets.com/index.html
- 配置本地yum源
将下载的三剑客文件放在一个新建文件夹中,并移动到/var/www/html 目录中,做离线包的下载地址,用浏览器访问如下,表示成功
- 配置CSD
将STREAMSETS-3.1.4.0.jar拷贝到/opt/cloudera/csd,并更改权限,然后重启cloudera-scm-server服务,没有csd文件夹就自己新建一个。
4.下载分发激活Parcel包
传送门:https://cloud.tencent.com/developer/article/1078852
sqlserver之Change Tracking
sqlserver上开启Change Tracking,这里要做到表级别Change Tracking
- 开启库级别Change Tracking
ALTER DATABASE 数据库名 SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS,AUTO_CLEANUP = ON)
- 开启表级别Change Tracking
ALTER TABLE [dbo].[Department] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON)
Streamset之sqlserver配置
- 右上角点击All Stages找到SQLxxx
- 配置分析
StreamSet之Hive配置
配置Hive要使用HiveMeData和HiveMeStore两个插件
重要参数详解:
- Database Expression:Hive数据库选择,不写则是默认库
- Partition Configuration:设置Hive分区的参数,这里可以设置成多级分区,只要选择“+”就行,其中Partition Value Expression是获取分区号数据的表达式,可以自己生成也可以根据表字段里的数据定义分区。因为我们数据原因,我这里表达式写的很蛋疼~有关表达式的写法建议大家直接去撸下官网(PS:Streamset的官网文档还是很不错的,个人感觉比flink强多了!!)。
官网functions传送门:https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Expression_Language/Functions.html#concept_lhz_pyp_1r
StreamSet之HDFS配置
重要参数详解:
File System URI:hdfs的URI连接
Configuration Files Directory:hdfs的config文件位置,需要加载core-site.xml
Files Prefix:生成hdfs的文件前缀,建议大家改一下,不然生成的文件名巨长~
Files Suffix:生成hdfs的文件后缀,为用了txt格式,记住不用加点
Directory in Header:打钩后会直接落盘到hive的/user/hive/warehouse/中,如果不打钩,则可以自定义落盘路径
Compression Codec :选择压缩算法
Use Roll Attribute :回滚机制
StreamSet之踩坑实战
处理数据同步过程中避免不了加减字段,清洗数据等问题,业务越复杂的OLTP架构中数据迁移越是麻烦,在学习使用StreamSet中,建议大家先去撸清楚官网。我自己在学习使用中总结两个方面感觉很有必要:
- 函数表达式,这里的坑很多,要想使用数据,调用数据都要通过表达式来完成
- Field开头的插件大多是对数据做处理加工的,大家使用前一定要对Field开头的插件挨个看一遍。我自己就使用了Field Type Converter(字段值类型转换)、Expression Evaluator(表达式执行器)
专注大数据生态、Spark/Flink、Java/Scala仔
架构未满、Coding至上、一直在路上