Datax支持kerberos認證

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章