我正在尝试了解如何将MR作业提交给基于YARN的Hadoop集群。
对于只有一个ResourceManager(即NO HA)的情况,我们可以像这样提交作业(我实际使用过,我认为是正确的)。
hadoop jar word-count.jar com.example.driver.MainDriver -fs hdfs://master.hadoop.cluster:54310 -jt master.hadoop.cluster:8032 /first/dir/IP_from_hdfs.txt /result/dir
可以看出,RM在端口8032和NN 54310上运行,我指定主机名,因为只有一个主机。
现在,对于NN和RM都有HA的情况,我该如何提交作业?我无法理解这一点,因为现在我们有两个RM和NN(活动/备用),我知道有一个zookeeper可以跟踪故障。因此,从客户角度尝试提交作业,我是否需要知道提交作业的确切NN和RM,或者是否有一些我们必须用于提交作业的逻辑命名?
任何人都可以帮我理解这个吗?
答案 0 :(得分:1)
无论是否有HA,提交作业的命令都保持不变。
hadoop jar <jar> <mainClass> <inputpath> <outputpath> [args]
使用-fs
和-jt
是可选的,除非您要指定的Namenode
和JobTracker
与配置中的fs.defaultFS
和core-site.xml
不同,否则不会使用。
如果dfs.nameservices
中的hdfs-site.xml
属性和定义名称服务(<property>
<name>dfs.client.failover.proxy.provider.<nameserviceID></name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
)及其名称节点的属性在SET
中正确配置客户端,只要执行客户端操作,就会选择Active Master。
默认情况下,DFS客户端使用此Java类来确定当前哪个NameNode处于活动状态。
U