首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在外部hadoop集群中,如何通过由H/A namenodes组成的URI访问hdfs?

在外部hadoop集群中,如何通过由H/A namenodes组成的URI访问hdfs?
EN

Stack Overflow用户
提问于 2015-06-12 06:52:05
回答 5查看 11.3K关注 0票数 10

现在,我有了一些存储输出到HDFS的Spark应用程序。

由于我们的hadoop集群是由namenode H/A组成的,而spark集群位于hadoop集群之外(我知道这很糟糕),所以我需要为应用程序指定HDFS URI,以便它能够访问HDFS。

但是它不识别名称服务,所以我只能提供namenode的URI之一,如果它失败了,请修改配置文件,然后再试一次。

访问动物园管理员显示活动似乎很烦人,所以我想避免。

你能提出其他选择吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-09-12 07:34:43

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

代码语言:javascript
复制
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")

在此之后,您可以像下面这样使用带有“hadooptest”的URL。

代码语言:javascript
复制
test.write.orc("hdfs://hadooptest/tmp/test/r1")

有关更多信息,请查看这里

票数 13
EN

Stack Overflow用户

发布于 2019-10-21 03:09:49

如果您想将H/A HDFS集群作为您的默认配置(主要是适用于通过spark-submitspark-shell启动的每个应用程序的配置)。您可以将集群信息写入spark-defaults.conf

代码语言:javascript
复制
sudo vim $SPARK_HOME/conf/spark-defaults.conf

并添加以下行。假设您的HDFS集群名为hdfs-k8s

代码语言:javascript
复制
spark.hadoop.dfs.nameservices   hdfs-k8s
spark.hadoop.dfs.ha.namenodes.hdfs-k8s  nn0,nn1
spark.hadoop.dfs.namenode.rpc-address.hdfs-k8s.nn0 192.168.23.55:8020
spark.hadoop.dfs.namenode.rpc-address.hdfs-k8s.nn1 192.168.23.56:8020
spark.hadoop.dfs.client.failover.proxy.provider.hdfs-k8s    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

当您的下一个应用程序启动时,它应该可以工作。

代码语言:javascript
复制
sc.addPyFile('hdfs://hdfs-k8s/user/root/env.zip')
票数 3
EN

Stack Overflow用户

发布于 2022-01-31 17:46:30

对于启用kerberos的集群,可以使用以下属性访问HDFS。更多信息,这里。这些信息可以从删除HA hdfs-site.xml文件中获得。

代码语言:javascript
复制
spark.sparkContext.hadoopConfiguration.set("dfs.nameservices", "testnameservice")
spark.sparkContext.hadoopConfiguration.set("dfs.client.failover.proxy.provider.testnameservice", "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider")
spark.sparkContext.hadoopConfiguration.set("dfs.ha.namenodes.testnameservice", "nn1,nn2")
spark.sparkContext.hadoopConfiguration.set("dfs.namenode.rpc-address.testnameservice.nn1", "namenode1_hostname:8020")
spark.sparkContext.hadoopConfiguration.set("dfs.namenode.rpc-address.testnameservice.nn2", "namenode2_hostname:8020")
spark.read.csv("hdfs://testnameservice/path/to/hdfs/sample.csv")

如果您在使用此属性启动kerberos令牌时也设置了spark以访问kerberos令牌,则使用spark.kerberos.access.hadoopFileSystems表示spark > 3.0,或者将spark.kerberos.access.namenodes设置为Spark < 3.0,如前面提到的这里。不幸的是,为此,它只需要活动namenode配置,您必须在http://namenode_service:50070/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus上轮询namenode服务或namenode并检索active namenode。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30796957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档