现在,我有了一些存储输出到HDFS的Spark应用程序。
由于我们的hadoop集群是由namenode H/A组成的,而spark集群位于hadoop集群之外(我知道这很糟糕),所以我需要为应用程序指定HDFS URI,以便它能够访问HDFS。
但是它不识别名称服务,所以我只能提供namenode的URI之一,如果它失败了,请修改配置文件,然后再试一次。
访问动物园管理员显示活动似乎很烦人,所以我想避免。
你能提出其他选择吗?
发布于 2016-09-12 07:34:43
假设您的名称服务是“hadooptest”,那么设置hadoop配置如下所示。您可以从启用了HDFS的远程HA的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")在此之后,您可以像下面这样使用带有“hadooptest”的URL。
test.write.orc("hdfs://hadooptest/tmp/test/r1")有关更多信息,请查看这里。
发布于 2019-10-21 03:09:49
如果您想将H/A HDFS集群作为您的默认配置(主要是适用于通过spark-submit或spark-shell启动的每个应用程序的配置)。您可以将集群信息写入spark-defaults.conf。
sudo vim $SPARK_HOME/conf/spark-defaults.conf并添加以下行。假设您的HDFS集群名为hdfs-k8s
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当您的下一个应用程序启动时,它应该可以工作。
sc.addPyFile('hdfs://hdfs-k8s/user/root/env.zip')发布于 2022-01-31 17:46:30
对于启用kerberos的集群,可以使用以下属性访问HDFS。更多信息,这里。这些信息可以从删除HA hdfs-site.xml文件中获得。
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。
https://stackoverflow.com/questions/30796957
复制相似问题