如何通过包含外部hadoop集群的Spark中的H/A名称节点的URI访问hdfs?

Jun*_*Lim 6 hadoop hdfs apache-spark

现在我有一些Spark应用程序将输出存储到HDFS.

由于我们的hadoop集群由namenode H/A组成,而spark集群在hadoop集群之外(我知道它不好)我需要为应用程序指定HDFS URI,以便它可以访问HDFS.

但它无法识别名称服务,因此我只能给出namenode的URI之一,如果失败,请修改配置文件并重试.

访问Zookeeper以显示活动似乎非常烦人,所以我想避免.

你能建议任何替代方案吗?

Mun*_*Heo 8

假设您的名称服务是'hadooptest',然后设置如下的hadoop配置.您可以从启用了远程HA的HDFS的hdfs-site.xml文件中获取这些信息.

sc.hadoopConfiguration.set("dfs.nameservices", "hadooptest")
sc.hadoopConfiguration.set("dfs.client.failover.proxy.provider.hadooptest", "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider")
sc.hadoopConfiguration.set("dfs.ha.namenodes.hadooptest", "nn1,nn2")
sc.hadoopConfiguration.set("dfs.namenode.rpc-address.hadooptest.nn1", "10.10.14.81:8020")
sc.hadoopConfiguration.set("dfs.namenode.rpc-address.hadooptest.nn2", "10.10.14.82:8020")
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以使用带有'hadooptest'的URL,如下所示.

test.write.orc("hdfs://hadooptest/tmp/test/r1")
Run Code Online (Sandbox Code Playgroud)

检查这里获取更多信息.