一、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等工具,還欠缺很多功能,然而其代碼邏輯簡單易懂,稍許改動就可適應更多,更復雜的場景。不得不令人敬佩其簡潔易懂的設計理念!