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等工具,还欠缺很多功能,然而其代码逻辑简单易懂,稍许改动就可适应更多,更复杂的场景。不得不令人敬佩其简洁易懂的设计理念!

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