Ven*_*Vig 5 hadoop hdfs docker apache-spark
我有一个 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)
Run Code Online (Sandbox Code Playgroud)
对于第二个容器:
在主机 Ubuntu 操作系统中,我能够成功进入
现在我想从 jupyter(在第一个容器中运行)写入 HDFS 文件系统(在第二个容器中运行)。
所以我添加了附加行
rdd.saveAsTextFile("hdfs:///user/root/input/test")
Run Code Online (Sandbox Code Playgroud)
我收到错误:
HDFS URI,无主机:hdfs:///user/root/input/test
我是否错误地给出了 hdfs 路径?
我的理解是,我应该能够从另一个运行 Spark 的容器与运行 hdfs 的 docker 容器进行通信。我错过了什么吗?
谢谢你的时间。
我还没有尝试过 docker compose。
URIhdfs:///user/root/input/test缺少权限(主机名)部分和端口。要写入另一个容器中的 hdfs,您需要完全指定 URI,并确保两个容器位于同一网络上,并且 HDFS 容器具有公开的名称节点和数据节点的端口。
例如,您可能已将 HDFS 容器的主机名设置为hdfs.container。然后,您可以使用 URI 写入该 HDFS 实例hdfs://hdfs.container:8020/user/root/input/test(假设 Namenode 在 8020 上运行)。当然,您还需要确保您要写入的路径也具有正确的权限。
所以要做你想做的事:
EXPOSEdockerfile 中的指令(您链接的容器没有这些指令)或--expose在调用docker run. 默认端口为 8020 和 50010(分别用于 NN 和 DN)。docker run不这样做--network,他们将在默认网络上启动,你会没事的。使用参数以特定名称启动 HDFS 容器--name。--name)和端口,如上所述,它应该可以工作| 归档时间: |
|
| 查看次数: |
6156 次 |
| 最近记录: |