2017-08-07 113 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 

到目前为止,我在Hadoop中只有 start-dfs.sh ,并且没有真正配置Spark中的任何内容。我是否需要使用YARN集群管理器来运行Spark,以便Spark和Hadoop使用相同的集群管理器,因此可以访问HDFS文件?

我试图CONFIG纱的site.xml在Hadoop中以下tutorialspoint https://www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htm,并在指定的spark-env.sh HADOOP_CONF_DIR,但它似乎并没有工作,同样的错误抛出。我是否缺少一些其他配置?

谢谢!

EDIT

初始的Hadoop版本是2.8.0和火花版本2.1.1用Hadoop 2.7。试图下载hadoop-2.7.4,但同样的错误仍然存​​在。

问题here表明这是一个java语法问题,而不是火花hdfs问题。我会尝试这种方法,看看这是否解决了这里的错误。

+0

这看起来不像HDFS相关,更像是Scala版本问题。 –

+0

@YuvalItzchakov感谢您的快速响应!我会仔细检查我的Scala版本。只是想澄清,你认为这是Spark和斯卡拉,或火花的Scala和Hadoop的斯卡拉之间的版本不匹配?我下载了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独立群集模式下运行时,最好是通过spark-submit提交应用程序,而不是在IDE中运行。将所有东西都包装在罐子里,然后放入罐子里,作为一种魅力!

相关问题