Kettle连接Hadoop集群

Author Avatar
山小杰 8月 07, 2018
  • 在其它设备中阅读本文章

其实在Kettle系列教程中第十章【对接大数据平台】一文中已经介绍过了连接Hadoop集群需要的基本文件配置,但是呢,那种方式不能从表输入中直接输出数据到HDFS上,本章呢就介绍一下不经过【Hadoop Copy Files】如何直接输出数据到HDFS上。
可能你已经注意到,不管是转换还是作业,在Spoon界面左侧【主对象树】下面都有一个【Hadoop clusters】分组:
img
本章的主要内容就是如何在这里创建一个Hadoop集群连接!

基础文件准备

这一部分与Kettle系列教程中第十章【对接大数据平台-基础文件配置】中操作一样,这里不再赘述。

创建集群连接

在【Hadoop clusters】分组图标右键菜单中点击【New Cluster】弹出集群配置窗口:
img
首先给集群起个名字【Cluster name】;

然后【Storage】选择HDFS

再然后配置【HDFS】连接信息:如果你的集群未开启NameNode HA,那么【Hostname】和【Port】如实填写即可,注意【Port】可不是50070这个web端口哈。如果开启了NameNode HA,那么【Hostname】这里就填写HDFS的Namespace(命名空间),命名空间即为core-site.xmlfs.defaultFS去掉hdfs://后的的属性值,【Port】一定要留空。集群未配置访问认证的话,【Username】和【Password】不用填写;

接着配置【JobTracker】,其实应该改名叫【Yarn】了:与HDFS类似,如果ResourceManager未配置HA,则【Hostname】和【Port】如实填写。如果配置了HA,则【Hostname】这里需要将所有ResourceManager的主机地址都填写上,中间使用英文逗号分隔,【Port】一定要留空!

再接着配置【Zookeeper】:【Hostname】这里需要将集群中所有的Zookeeper主机地址填写上,中间使用英文逗号分隔,【Port】如实填写;

我的集群没有安装Oozie,故留空;

最后配置【Kafka】:需要填写bootstrap-server所在主机地址以及运行端口,多个之间使用英文逗号分隔。未安装Kafka的话留空即可。

配置完成以后,点击【测试】按钮可以测试一下集群连接,如果配置无误的话,可以看到全是绿色的对勾:
img

Q&A

这一小节就对集群连接测试时容易出现的报错或者警告进行一下解答:

  • 【Active Shim Load】出现报错或者警告,需要检查是否在Spoon工具栏 -> 工具 -> Hadoop Distribution中设置了对应的Hadoop平台;
  • 【Shim Configuration Verification】报出警告:The Hadoop File System URL does not match the URL in the shims core-site.xml,这个时候就需要检查【HDFS】的【Hostname】是否与core-site.xmlfs.defaultFS属性值一致;
  • 【User Home Directory Access】报错:Could not read directory contents,是因为Kettle是使用当前操作系统用户去访问HDFS的,如果HDFS上/user/目录下没有该用户的目录,则该项检测就会失败。解决办法:手动在HDFS上/user/目录下创建以当前操作系统用户名命名的文件夹即可。
  • 【Root Directory Access】报错,是因为Kettle访问HDFS的用户没有读写HDFS跟目录的权限,可通过修改集群配置文件解决:在hdfs-site.xml文件中增加一个属性配置,重启集群生效:
    <property>
      <name>dfs.permissions.enabled</name>
      <value>false</value>
    </property>
    

Hadoop File Output

创建完成集群连接以后,就可以直接输出数据到HDFS上了,本小节使用的是转换中【Big Data】分组下的【Hadoop File Output】组件:
img
直接看【Hadoop File Output】的配置项,其实与【文本文件输出】类似,只不过输出位置从本地变成了HDFS:
img
【内容】选项卡,设置字段分隔符,要注意选择LF换行格式,编码UTF-8
img
【字段】选项卡与【文本文件输出】配置方法相同,先【获取字段】,再【最小宽度】。

保存,运行,重看结果:
img