DATAX踩坑路

DATAX踩坑路

背景

需要离线异构数据库的同步工具,并且希望依赖尽量少的外部环境,最好能与阿里云产品相结合,经过调研发现datax比较满足需求所以决定使用datax

datax hdfs 支持parquet

datax hdfs读取和写出支持 textfile、csv、orc 而在我们的业务场景中经常使用parquet,故增加支持parquet功能

  • pom.xml
 <!-- 可不更改 注意看下边 -->
 <hive.version>2.1.1</hive.version> -
 <!-- https://mvnrepository.com/artifact/com.twitter/parquet-tools -->
 <dependency>
       <groupId>org.apache.parquet</groupId>
       <artifactId>parquet-tools</artifactId>
       <version>1.8.1</version>
</dependency>

修改hive version的原因是项目上使用的cdh版本较高,使用1.1.1解析parquet时报错如下故进行升级

Could not read footer: java.io.IOException: Could not read footer for file

  • 升级hive version后,datax支持的kerberos校验会有问题导致报错,故在json配置中增加如下固定配置
"hadoopConfig":{
     "mapreduce.framework.name":"classic",
     "mapreduce.jobtracker.kerberos.principal":"xxxxx",
     "mapreduce.jobtracker.keytab.file":"keytab path"
}

datax hbase11x 修改支持kerberos

项目上需要kerberos验证,而datax不支持,故进行修改

  • 修改后需增加配置如下
"parameter": {
    "kerberos":"true",
    "keyTabKey":"xxx.com",
    "keyTabValue":"${keytab_path}",
    "hbaseSiteXml":"hbase-site.xml path",
    "system": {
        "javax.security.auth.useSubjectCredsOnly": "false",
        "java.security.krb5.conf": "${krb5.conf_path}", 
        "HADOOP_USER_NAME": "kerberos.principal"
    },
    "hbaseConfig": {
        "hadoop.security.authentication": "Kerberos",
        "hbase.client.ipc.pool.size": "20",
        "hadoop.user.name": "xxx.com" ---xxx.com
    },
	
	.....
}

datax 与 hologres 结合

postgresql reader可以满足读取hologres的要求,但在使用postgresqlwriter写hologres时遇到了很大的瓶颈总是报错

具体实现方式请参考
holoclient for datax

datax配置hadoop HA(高可用)

defaultFS 只能配置一个namenode节点 当namenode为高可用时,挂掉配置的那个节点datax任务就会报错,文档上写不支持MA,但通过参数配置是可以支持的,故配置为HA模式。

  • json配置如下
"hadoopConfig":{
   "dfs.nameservices":"yournamespace",
   "dfs.ha.namenodes.yournamespace":"namenode1,namenode2",
   "dfs.namenode.rpc-address.yournamespace.namenode1":"xxxxx:8020",
   "dfs.namenode.rpc-address.yournamespace.namenode2":"xxxxx:8020",
   "dfs.client.failover.proxy.provider.yournamespace": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
  "dfs.ha.automatic-failover.enabled.yournamespace":"true"
},

datax的限速

根据datax所提供的模板进行配置的话发现带宽占用量太大会特别轻易把带宽写满,如下
DATAX踩坑路
需要限制datax的速度,阅读文档发现如下描述片段
DATAX踩坑路
直接添加在配置文件job中报错

com.alibaba.datax.common.exception.DataXException: Code:[Framework-03], Description:[DataX引擎配置错误,该问题通常是由于DataX安装错误引起,请联系您的运维解决 .]. - 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数
at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:26) ~[datax-common-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.job.JobContainer.adjustChannelNumber(JobContainer.java:430) ~[datax-core-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.job.JobContainer.split(JobContainer.java:387) ~[datax-core-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:117) ~[datax-core-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.Engine.start(Engine.java:92) [datax-core-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.Engine.entry(Engine.java:171) [datax-core-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.Engine.main(Engine.java:204) [datax-core-0.0.1-SNAPSHOT.jar:na]

更改为如下配置正确

    "core": {
         "transport" : {
              "channel": {
                   "speed": {
                       "byte": 2000000  //单个channel 2M
                    }
               }
         }
    },
    "job": {
        "setting": {
            "speed": {
                "channel": 5,   // 5个channel
                "byte": 15000000  //总共15M
            }
        },
 
上一篇:datax_web数据增量同步配置


下一篇:Datax执行命令后控制台出现中文乱码