文档编写目的
在前面的文章《如何在集群外节点跨网段向HDFS写数据》和《外部客户端跨网段访问Hadoop集群方式(续)》中介绍了如何在集群外的客户端节点上访问Hadoop集群,本篇文章在前面文章的基础上基于Kerberos环境的CDH集群介绍,如何在集群外客户端跨网段向Kerberos环境的Hadoop集群提交MapReduce和Spark作业。
1.Redhat7.4
2.CDH5.16.1
3.集群已启用Kerberos
修改HDFS配置
1.进入HDFS服务的配置页面
2.在搜索栏输入“bind”勾选如下配置,将各服务的端口号绑定到0.0.0.0
3.搜索“core-site.xml”在高级配置项增加如下配置
<property>
<name>hadoop.security.token.service.use_ip</name>
<value>false</value>
</property>
4.搜索“hdfs-site.xml”在高级配置项增加如下配置
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>
注意:该配置属于HDFS的Gateway角色高级参数,这个配置可以只在集群外客户端的配置文件增, 这里为了统一方便集群配置下发。
修改Yarn配置
由于需要在集群外客户端跨网段提交MapReduce和Spark作业,需要将Yarn服务的端口号绑定到0.0.0.0,根据如下操作修改Yarn配置。
1.进入Yarn服务的配置界面,搜索“bind”
完成上述所有配置后,回到CM主页根据提示重启相应服务及分发客户端配置。
修改hosts配置
1.将集群内所有节点的/etc/hosts信息配置为如下格式
2.将集群外客户端节点的/etc/hosts信息配置为如下格式:
注意:注意集群内和集群外节点的/etc/hosts配置文件内容及格式,未按照要求配置则可能会出现Kerberos集群外节点无法提交MapReduce和Spark作业到集群。
同步配置到客户端
由于集群外客户端节点并不在Cloudera Manager的管理范围,需要将集群的客户端配置同步至集群外的客户端节点,可以参考Fayson之前的文章《如何在CDH集群外配置Kerberos环境的Spark2和Kafka客户端环境》,由于本篇文章主要讲述跨网段在集群外客户端节点提交MapReduce和Spark作业,所以需要将/etc目录下的hadoop和spark配置信息同步。
1.检查客户端配置文件/etc/hadoop/conf/hdfs-site.xml是否包含如下配置信息
cat /etc/hadoop/conf/hdfs-site.xml
2.检查客户端配置文件/etc/hadoop/conf/core-site.xml是否包含如下配置信息
cat /etc/hadoop/conf/core-site.xml
3.检查/etc/spark/conf/yarn-conf目录下的hdfs-site.xml和core-site.xml配置文件中是否有dfs.client.use.datanode.hostname和hadoop.security.token.service.use_ip配置项。
功能验证
1.在集群外客户端执行命令验证hadoop命令是否可用
kinit fayson
hadoop fs -ls /
hadoop fs -put hosts /tmp
hadoop fs -ls /tmp
hadoop fs -rm /tmp/hosts
2.向集群提交一个MapReduce作业
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 5
作业执行成功
3.向集群提交一个Spark作业
spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client /opt/cloudera/parcels/CDH/lib/spark/lib/spark-examples.jar 10
作业运行成功
总结
1.通过在集群外客户端配置文件/etc/hadoop/hdfs-site.xml配置中增加dfs.client.use.datanode.hostname为ture实现实现跨网段访问Kerberos环境下的HDFS服务。
2.需要跨网段向Kerberos集群提交Spark和MapReduce作业,需要将Yarn相应服务的端口号绑定在0.0.0.0上,同时需要在HDFS服务的core-site.xml配置文件中增加hadoop.security.token.service.use_ip为false,该参数需要在服务端和client端都存在,否则会报Kerberos认证失败的异常。
3.在配置Kerberos集群外节点提交Spark和MapReduce作业时,需要注意集群内外节点的hosts文件配置,按照文章中说明的格式配置,否则会导致作业提交失败。
参考:
https://community.cloudera.com/t5/Community-Articles/Parameters-for-Multi-Homing/ta-p/245732
https://issues.apache.org/jira/browse/HADOOP-7733
https://issues.apache.org/jira/browse/HADOOP-12954