我尝试使用
在Amazon Ec2中以群集模式执行spark程序spark-submit --master spark://<master-ip>:7077 --deploy-mode cluster --class com.mycompany.SimpleApp ./spark.jar
该类有一行试图读取文件:
JavaRDD<String> logData = sc.textFile("/user/input/CHANGES.txt").cache();
即使我能够以独立模式阅读,我也无法在群集模式下阅读此txt文件。在群集模式下,它希望从hdfs读取。所以我使用
将文件放在/ root / persistent-hdfs的hdfs中hadoop fs -mkdir -p /wordcount/input
hadoop fs -put /app/hadoop/tmp/input.txt /wordcount/input/input.txt
我可以使用hadoop fs -ls /workcount/input
查看该文件。但是Spark仍然无法读取文件。知道我做错了什么。感谢。
答案 0 :(得分:0)
您可能需要检查以下几点:
您似乎只是将输入文件从/app/hadoop/tmp/input.txt
复制到/wordcount/input/input.txt
,所有这些都在节点磁盘中。我相信你误解了hadoop
命令的功能。
相反,您应该尝试将文件显式放在持久性HDFS(root/persistent-hdfs/
)中,然后使用hdfs://...
前缀加载它。
请看一下here,似乎 Spark 默认只启动短暂的HDFS服务器。要切换到持久性HDFS服务器,您必须执行以下操作:
/root/ephemeral-hdfs/bin/stop-dfs.sh
/root/persistent-hdfs/bin/start-dfs.sh
请尝试这些东西,我希望他们能为你服务。