2017-08-07 6 views
1

私はSparkでHDFSファイルにアクセスしようとしています。すべては私がローカルモードでスパークを実行すると、正常に動作すなわちSparkスタンドアロンクラスタモードでHDFSファイルにアクセスする方法は?

SparkSession.master("local") 

hdfs://localhost:9000/$FILE_PATH 

でHDFSファイルへのアクセスを得る。しかし、私は、スタンドアロンクラスタモードでスパークを実行しようとしていたとき、すなわち

SparkSession.master("spark://$SPARK_MASTER_HOST:7077") 

エラーが

java.lang.ClassCastException: cannot assign instance of java.lang.invoke.SerializedLambda to field org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1.fun$1 of type org.apache.spark.api.java.function.Function in instance of org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1 
スロー

これまでのところ、私は start-dfs.sh をHadoopに持っていて、実際にはSparkに何も設定していません。 SparkとHadoopが同じクラスタマネージャを使用し、HDFSファイルにアクセスできるように、YARNクラスタマネージャを使用してSparkを実行する必要がありますか?

私はtutorialspoint https://www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htmに続いてHadoopで設定し、spark-env.shでHADOOP_CONF_DIRを指定しようとしましたが、動作していないようで、同じエラーがスローされます。私はいくつかの他の設定が欠けていますか?

ありがとうございます!

EDIT

初期のHadoopのバージョンは2.8.0で、スパークバージョンはHadoopの2.7と2.1.1です。 hadoop-2.7.4をダウンロードしようとしましたが、同じエラーが依然として存在します。

質問hereは、hdfsの問題を引き起こすのではなく、Java構文の問題としてこれを示唆しています。私はこのアプローチを試し、ここでエラーが解決するかどうかを見ていきます。

+0

これは、Scalaのバージョン管理の問題によく似ています。 –

+0

@YuvalItzchakovこのような迅速な対応に感謝します!私はスカラのバージョンを再確認します。 SparkとScala、SparkのScalaとHadoopのScalaの間のバージョンの不一致を示唆していますか?私はspark-2.1.1-bin-hadoop2.7とhadoop-2.8.0をダウンロードしましたが、代わりにhadoop 2.7.0を試すべきですか? –

+2

私はhadoop2.7と一緒に行くだろう。 Scalaのバージョンが2.11(Sparkがコンパイルされているもの)であることを確認してください。 –

答えて

0

投稿者hereからインスピレーションを得て、自分で問題を解決しました。

このジョブをマップ減らすSerializableのクラスに依存するため、スパークローカルモードで実行している場合、ジョブが依存実行することができ、この直列化可能クラスを見つけることができるとマップ減らします。

Sparkスタンドアロンクラスタモードで実行している場合は、IDEで実行するのではなく、spark-submitでアプリケーションを送信するのが最適です。瓶のすべてをパッケージ化し、瓶を火花送信し、魅力として働きます!

関連する問題