如何在Spark独立群集模式下访问HDFS文件?

时间:2017-08-07 07:49:20

标签: apache-spark

我正在尝试访问Spark中的HDFS文件。当我在本地模式下运行Spark时,一切正常,即

SparkSession.master("local")

并通过

访问HDFS文件
hdfs://localhost:9000/$FILE_PATH

但是当我试图在独立集群模式下运行Spark时,即

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中配置任何东西。我是否需要使用YARN集群管理器运行Spark,以便Spark和Hadoop使用相同的集群管理器,因此可以访问HDFS文件?

我已尝试在tutorialspoint https://www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htm之后在Hadoop中配置yarn-site.xml,并在spark-env.sh中指定HADOOP_CONF_DIR,但它似乎不起作用且抛出相同的错误。我错过了一些其他配置吗?

谢谢!

修改

最初的Hadoop版本是2.8.0,Spark版本是2.1.1,带有Hadoop 2.7。试图下载hadoop-2.7.4,但同样的错误仍然存​​在。

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

1 个答案:

答案 0 :(得分:0)

受到帖子here的启发,我自己解决了这个问题。

此map-reduce作业依赖于Serializable类,因此在Spark本地模式下运行时,可以找到此可序列化类,并且可以依赖于map-reduce作业执行。

在Spark独立群集模式下运行时,最好是通过spark-submit提交应用程序,而不是在IDE中运行。将所有东西都装在罐子里,然后点燃它 - 提交罐子,就像一个魅力!