背景 为什么我要开发这个工具呢?我之前安装的cdh集群版本是5.14,里面的impala支持parquet,不支持orc,但是偏偏呀,datax不支持直接写到hdfs的parquet。虽说datax和impala同时还支持txt格式,但是查询速度比较慢,问了很多,见别人有开发datax parquet reader的,就是没有writer,于是就有了我这个datax parquet hdfswriter。
1、很简单,只需要将我的文件夹替换掉你的datax里面的hdfswriter文件夹即可
2、设置"fileType":"parquet",其他的参照datax 阿里官方即可
{
"job":{
"content":[
{
"writer":{
"parameter":{
"writeMode":"append",
"column":[
{
"type":"bigint",
"name":"user_id"
},
{
"type":"string",
"name":"mobile"
}
],
"fieldDelimiter":" ",
"fileType":"parquet",
"hadoopConfig":{
"dfs.nameservices":"nameservice1",
"dfs.ha.namenodes.nameservice1":"namenode128,namenode113",
"dfs.client.failover.proxy.provider.nameservice1":"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
"dfs.namenode.rpc-address.nameservice1.namenode113":"*****:8020",
"dfs.namenode.rpc-address.nameservice1.namenode128":"*****:8020"
},
"fileName":"rw_user_login",
"path":"/user/hive/warehouse/ods_test.db/rw_user_login/20200420",
"defaultFS":"hdfs://nameservice1"
},
"name":"hdfswriter"
},
"reader":{
"parameter":{
"username":"bigdata",
"column":[
"user_id",
"mobile"
],
"connection":[
{
"table":[
"rw_user_login"
],
"jdbcUrl":[
"jdbc:mysql://********:3306/***?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8"
]
}
],
"password":"****",
"splitPk":"user_id"
},
"name":"mysqlreader"
}
}
],
"setting":{
"speed":{
"channel":8
}
}
},
"setting":{
}
}
亲测速度对比,仅仅比text格式 慢10%,但是后续的查询速度快的很多
Linux 服务器上
任务启动时刻 : 2020-04-21 18:29:14
任务结束时刻 : 2020-04-21 18:29:56
任务总计耗时 : 42s
任务平均流量 : 14.44MB/s
记录写入速度 : 175059rec/s
读出记录总数 : 7002364
读写失败总数 : 0
以下是Mac本机测试
parquet
任务启动时刻 : 2020-04-21 16:18:09
任务结束时刻 : 2020-04-21 16:30:17
任务总计耗时 : 727s
任务平均流量 : 821.24KB/s
记录写入速度 : 9725rec/s
读出记录总数 : 7002364
读写失败总数 : 0
text
任务启动时刻 : 2020-04-21 16:54:42
任务结束时刻 : 2020-04-21 17:05:28
任务总计耗时 : 645s
任务平均流量 : 923.90KB/s
记录写入速度 : 10941rec/s
读出记录总数 : 7002364
读写失败总数 : 0