从运行Spark的另一个Docker容器写入Docker中运行的HDFS
我有一个spark + jupyter的docker镜像( https://github.com/zipfian/spark-install )
我有另外一个hadoop的docker镜像。 ( https://github.com/kiwenlau/hadoop-cluster-docker )
我在Ubuntu上面的2个镜像中运行2个容器。 对于第一个容器:我能够成功启动jupyter并运行python代码:
import pyspark sc = pyspark.sparkcontext('local[*]') rdd = sc.parallelize(range(1000)) rdd.takeSample(False,5)
对于第二个容器:
在主机Ubuntu操作系统,我能够成功地去
- web浏览器localhost:8088:然后浏览Hadoop的所有应用程序
- localhost:50070:并浏览HDFS文件系统。
现在我想从jupyter(运行在第一个容器中)写入HDFS文件系统(在第二个容器中运行)。
所以我添加额外的行
rdd.saveAsTextFile("hdfs:///user/root/input/test")
我得到的错误:
HDFS URI,无主机:hdfs:/// user / root / input / test
我不正确地给hdfspath?
我的理解是,我应该能够与另一个运行spark的容器运行hdfs的docker容器通信。 我错过了什么?
谢谢你的时间。
我还没有尝试docker撰写。
URI hdfs:///user/root/input/test
缺less权限(主机名)部分和端口。 要在另一个容器中写入hdfs,您需要完全指定URI并确保两个容器位于同一个networking中,并且HDFS容器具有用于名称节点和数据节点暴露的端口。
例如,您可能已经将HDFS容器的主机名设置为hdfs.container
。 然后,您可以使用URI hdfs://hdfs.container:8020/user/root/input/test
(假设Namenode在8020上运行)写入HDFS实例。 当然,您还需要确保您要写入的path具有正确的权限。
所以要做你想做的事情:
- 确保您的HDFS容器具有公开的namenode和datanode端口。 您可以在
EXPOSE
中使用EXPOSE
指令(链接的容器没有这些指令),或者在调用--expose
时使用--expose
参数。 默认端口是8020和50010(分别用于NN和DN)。 - 在同一个networking上启动容器。 如果你只是做没有 – networking
docker run
,他们将开始在默认networking,你会没事的。 使用--name
参数启动具有特定名称的HDFS容器。 - 现在修改你的URI以包含适当的权限(这将是你传递的docker
--name
参数的值)和端口,如上所述,它应该工作
- Hadoop“无法为您的平台加载本地Hadoop库”错误docker火花?
- 当部署模式是群集时,spark-submit代理主机/端口configuration不受尊重
- 在Docker中运行Spark时抛出java.lang.OutOfMemoryError
- 通过zeppelin从docker-hadoop-spark-workbench访问hdfs
- 缓冲区/caching耗尽Docker容器内的Spark独立
- neo4j-mazerunner,如何增加docker-compose.yml中的内存大小
- Spark应用程序无法写入docker中运行的elasticsearch集群
- docker中的纱线 – __spark_libs__.zip不存在
- 在Mac上查找$ YOUR_DOCKER_HOST IP