一、DataX很好用
https://github.com/alibaba/DataX
看到本篇之前,基本都从其他blog了解过datax(此处轻吹千字...)
二、DataX不支持Kerberos
由于阿里内部讨论过hdfs使用kerberos认证弊大于利,故不提供Kerberos认证能力。
三、着手改造DataX
由于我等厂商使用的是CDH组件,所以Hadoop都开启了Kerberos安全认证。所以移植认证代码到DataX中。
我的需求是从Reader:HBASE,Writer:Txt。更改DataX中Hbase11xHelper.java的getHbaseConnection方法:
public static org.apache.hadoop.hbase.client.Connection getHbaseConnection(String hbaseConfig) {
.....
try {
Map<String, String> hbaseConfigMap = JSON.parseObject(hbaseConfig, new TypeReference<Map<String, String>>() {});
// 用户配置的 key-value 对 来表示 hbaseConfig
Validate.isTrue(hbaseConfigMap != null && hbaseConfigMap.size() !=0, "hbaseConfig不能为空Map结构!");
for (Map.Entry<String, String> entry : hbaseConfigMap.entrySet()) {
hConfiguration.set(entry.getKey(), entry.getValue());
}
//此处新增认证代码
//DataX会将配置文件读入到hConfiguration的Map中,通过以下方式读取配置
if(hConfiguration.get("hadoop.security.authentication") != null) {
LOG.info("begin to auth kerberos!");
String keytabFile = hConfiguration.get("hbase.regionserver.keytab.file");
String krbFile = hConfiguration.get("java.security.krb5.conf");
String keytabPrincipal = hConfiguration.get("hbase.kerberos.user");
System.setProperty("java.security.krb5.conf", krbFile);
String hbaseKrbUser = hConfiguration.get("hbase.kerberos.user");
LOG.info("keytabFile:{},krbFile:{},keytabPrincipal:{}",keytabFile,krbFile,keytabPrincipal);
UserGroupInformation.setConfiguration(hConfiguration);
UserGroupInformation.loginUserFromKeytab(hbaseKrbUser,keytabFile);
LOG.info("end auth kerberos!");
//END新增代码
}
}
......
}
然后,修改模板文件,传入配置文件
...
"reader": {
"name": "hbase11xreader",
"parameter": {
"hbaseConfig": {
"hbase.zookeeper.quorum": "xx1.com,xx2.com,xx3.com",
"hadoop.security.authentication":"Kerberos",
"hbase.security.authentication" :"Kerberos",
"hbase.zookeeper.client.keytab.file": "/xx/xx.keytab",
"hbase.master.kerberos.principal": "xx",
"hbase.master.keytab.file": "/xx/xx.keytab",
"hbase.regionserver.kerberos.principal": "xx",
"hbase.regionserver.keytab.file": "/xx/xx.keytab" ,
"java.security.krb5.conf":"/xx/xx/krb5.conf",
"hbase.kerberos.user":"xx"
},
...
在hbaseConfig中传入kerberos需要的配置参数。(从其他项目拷贝即可)
四、开始run
python datax.py ~/dataxjob/hbase2file.json
五、总结
得益于DataX的开源事业,以及简单易懂的代码逻辑,我们能很轻松方便的定制自己想要的功能。
DataX本身是数据同步工具,相比于Flume,logstash等工具,还欠缺很多功能,然而其代码逻辑简单易懂,稍许改动就可适应更多,更复杂的场景。不得不令人敬佩其简洁易懂的设计理念!