我正在使用基于spark-worker容器的spark-base容器。
您能帮我解决异常吗?
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/README.md
Main.java
context = new SparkContext(
new SparkConf()
.setAppName("Test App")
.setMaster("spark://spark-master:7077")
.set("spark.executor.memory", "1g")
.setJars(new String[] { "target/spark-docker-1.0-SNAPSHOT.jar" })
);
String path = "file:///README.md";
// EXCEPTION HERE!!!
List<Tuple2<String, Integer>> output = context.textFile(path, 2)
...
我的Docker容器未设置HDFS,因此希望它们可以与每个spark-worker
的本地文件系统一起使用。我对每个工人做了:
shell> docker exec -it spark-worker-# bash
shell> touch README.md
docker-compose.yml
# No HDFS or file system configurations!
version: '3.3'
services:
spark-master:
image: bde2020/spark-master
container_name: spark-master
ports: ['8080:8080', '7077:7077', '6066:6066']
spark-worker-1:
image: bde2020/spark-worker
container_name: spark-worker-1
ports: ['8082:8081']
depends_on:
- spark-master
environment:
- "SPARK_MASTER=spark://spark-master:7077"
spark-worker-2:
image: bde2020/spark-worker
container_name: spark-worker-2
ports: ['8083:8081']
depends_on:
- spark-master
environment:
- "SPARK_MASTER=spark://spark-master:7077"
答案 0 :(得分:0)
Spark可以使用本地文件,但是这意味着您必须在群集中的每个节点(包括驱动程序)上提供文件的副本。
此外,"file:///README.md"
是文件系统根目录中的路径,因此请确保这是您创建文件的位置,并且用户具有正确的访问权限。
使用本地文件的最简单方法是仅使用SparkFiles
还请记住,正确的写入需要分布式存储-Saving dataframe to local file system results in empty results
如果您想同时支持读写操作,则只需使用工作人员之间共享的Docker卷即可。