gpt4 book ai didi

hadoop - 从另一个运行 Spark 的 Docker 容器写入在 Docker 中运行的 HDFS

转载 作者:可可西里 更新时间:2023-11-01 14:48:14 25 4
gpt4 key购买 nike

我有一个 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 browser localhost:8088 : 并浏览Hadoop所有应用
  • localhost:50070: 并浏览 HDFS 文件系统。

enter image description here

现在我想从 jupyter(在第一个容器中运行)写入 HDFS 文件系统(在第二个容器中运行)。

所以我添加了额外的行

rdd.saveAsTextFile("hdfs:///user/root/input/test")

我得到错误:

HDFS URI,无主机:hdfs:///user/root/input/test

我提供的 hdfs 路径不正确吗?

我的理解是,我应该能够从另一个运行 spark 的容器与运行 hdfs 的 docker 容器通信。我错过了什么吗?

感谢您的宝贵时间。

我还没有尝试过 docker compose。

最佳答案

URI hdfs:///user/root/input/test 缺少权限(主机名)部分和端口。要写入另一个容器中的 hdfs,您需要完全指定 URI 并确保两个容器位于同一网络上,并且 HDFS 容器具有公开的名称节点和数据节点的端口。

例如,您可能已将 HDFS 容器的主机名设置为 hdfs.container。然后,您可以使用 URI hdfs://hdfs.container:8020/user/root/input/test 写入该 HDFS 实例(假设 Namenode 在 8020 上运行)。当然,您还需要确保您要写入的路径也具有正确的权限。

所以做你想做的:

  • 确保您的 HDFS 容器公开了名称节点和数据节点端口。您可以使用 dockerfile 中的 EXPOSE 指令(您链接的容器没有这些指令)或在调用 docker run< 时使用 --expose 参数来执行此操作。默认端口为 8020 和 50010(分别用于 NN 和 DN)。
  • 在同一网络上启动容器。如果你只是执行 docker run 而没有 --network 它们将在默认网络上启动,你会没事的。使用 --name 参数启动具有特定名称的 HDFS 容器。
  • 现在修改您的 URI 以包括适当的权限(这将是您传递的 docker --name 参数的值)和端口,如上所述,它应该可以工作

关于hadoop - 从另一个运行 Spark 的 Docker 容器写入在 Docker 中运行的 HDFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46613603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com