2017-05-09 4 views
1

YARNモードでスパークアプリケーションをHDFSファイルシステムを使用して実行しようとすると、以下のプロパティを提供するときに正常に動作します。HA対応クラスタ用にSparkContextを設定する方法

sparkConf.set("spark.hadoop.yarn.resourcemanager.hostname",resourcemanagerHostname); 
sparkConf.set("spark.hadoop.yarn.resourcemanager.address",resourcemanagerAddress); 
sparkConf.set("spark.yarn.stagingDir",stagingDirectory); 

しかし、これで問題は次のとおりです。

  1. 私のHDFSはNamdeNode HAは、私がHDFS
のspark.yarn.stagingDirコモンズのURLを提供する場合、それは動作しません有効になっているので、

hdfs://hdcluster/user/tmp/というエラーを与える:

は、未知のホストhdcluster

を持っている。しかし、私はhdfs://<ActiveNameNode>/user/tmp/としてURLを与えたときにそれが正常に動作しますが、我々はアクティブになりますどの事前に知っていないので、どのように行います私はこれを解決する?

SparkContextはHadoopの設定を取りますが、SparkConfigurationクラスにはHadoopの設定を受け入れるメソッドがありません。

  1. Resource ManagerがHAで動作しているときに、リソースマネージャのアドレスを指定するにはどうすればよいですか。
  2. あなたが yarn-site.xmlのようなHadoopの設定ファイル内に既に存在している設定パラメータを使用する必要が
+0

を追加することです。このようなセクションにコードを入れてください。最後に感謝と名前を書く必要はありません。 – surajsn

答えて

1

hdfs-site.xml

使用Configurationオブジェクトを初期化します。

val conf = new org.apache.hadoop.conf.Configuration() 

を現在のHDFS URI、使用することを確認するには:

val currentFS = conf.get("fs.defaultFS"); 

あなたの名前ノードのURI、のようなもの:

res0: String = hdfs://namenode1 

しようと、現在使用中のリソースマネージャのアドレスを確認するには:

val currentRMaddr = conf.get("yarn.resourcemanager.address") 
0

私は正確に同じ問題がありました。

HDFS HAの内部Spark Context Hadoop設定を構成する必要があります。 Spark ContextまたはSpark Sessionをインスタンス化する場合、キーはspark.hadoop.で始まり、Hadoop Configurationをインスタンス化する際にそれらを使用するすべての設定が見つかります。無効なホスト例外を取得hdfs://namespace/path/to/fileを使用していないことができるようにするためにはそう

は、適切にあなたの質問を編集してください、次の設定オプション

spark.hadoop.fs.defaultFS = "hdfs://my-namespace-name" 
spark.hadoop.ha.zookeeper.quorum = "real.hdfs.host.1.com:2181,real.hdfs.host.2.com:2181" 
spark.hadoop.dfs.nameservices = "my-namespace-name" 
spark.hadoop.dfs.client.failover.proxy.provider.my-namespace-name = org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider 
spark.hadoop.dfs.ha.automatic-failover.enabled.my-namespace-name = true 
spark.hadoop.dfs.ha.namenodes.my-namespace-name = "realhost1,realhost2" 
spark.hadoop.dfs.namenode.rpc-address.my-namespace-name.realhost1 = "real.hdfs.host.1.com:8020" 
spark.hadoop.dfs.namenode.servicerpc-address.my-namespace-name.realhost1 = "real.hdfs.host.1.com:8022" 
spark.hadoop.dfs.namenode.http-address.my-namespace-name.realhost1 = "real.hdfs.host.1.com:50070" 
spark.hadoop.dfs.namenode.https-address.my-namespace-name.realhost1 = "real.hdfs.host.1.com:50470" 
spark.hadoop.dfs.namenode.rpc-address.my-namespace-name.realhost2 = "real.hdfs.host.2.com:8020" 
spark.hadoop.dfs.namenode.servicerpc-address.my-namespace-name.realhost2 = "real.hdfs.host.2.com:8022" 
spark.hadoop.dfs.namenode.http-address.my-namespace-name.realhost2 = "real.hdfs.host.2.com:50070" 
spark.hadoop.dfs.namenode.https-address.my-namespace-name.realhost2 = "real.hdfs.host.2.com:50470" 
spark.hadoop.dfs.replication = 3 
spark.hadoop.dfs.blocksize = 134217728 
spark.hadoop.dfs.client.use.datanode.hostname = false 
spark.hadoop.dfs.datanode.hdfs-blocks-metadata.enabled = true 
関連する問題