当前位置: 首页 > 知识库问答 >
问题:

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

屠杰
2023-03-14

我有一个Docker的图像火花Jupyter(https://github.com/zipfian/spark-install)

我为hadoop准备了另一个docker图片。(https://github.com/kiwenlau/hadoop-cluster-docker)

我在Ubuntu中运行上述两张图片中的两个容器。对于第一个容器:我能够成功地启动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

我是否错误地给出了hdfs路径?

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

谢谢你抽出时间。

我还没试过docker compose。

共有1个答案

龙玄天
2023-03-14

URIhdfs:///user/root/input/test缺少授权(主机名)部分和端口。要在另一个容器中写入hdfs,您需要完全指定URI,并确保这两个容器位于同一网络上,并且hdfs容器公开了namenode和data node的端口。

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

所以做你想做的:

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

 类似资料:
  • 假设我们的系统中有4个不同的图像,它们的名称如下: 假设我们运行container\u 1。我的问题是:container\u 1运行是否可能会保留container\u 2这样的容器?我搜索了一下,发现的问题和文章是:docker在另一个docker中运行?但这不是我的情况,我需要在container\u 1旁边运行其他容器。我对码头工人的了解很少。

  • 问题内容: 目前,我在需要连接到camunda的docker容器内运行一个node.js应用程序,该容器在另一个容器中运行。 我使用以下命令启动容器 这两个应用程序现在都在运行,我可以通过在端口8000上导航到主机的IP来访问camunda,运行wget 还会返回camunda页面。使用和键入我的应用程序容器时,我无法访问camunda。相反,我得到以下错误: 当我使用将我的应用程序容器链接到ca

  • 我有以下Dockerfile: 以及以下docker-compose.yml: 如果我通过docker cmd以以下方式手动运行Dockerfile: 看起来一切正常,我得到了它实际执行的应用程序输出日志: 但是,当我试图通过docker-comment以以下方式执行我的应用程序时: 我的应用程序似乎启动正常,但无法继续执行。以下是输出: 我尝试执行show logs命令: 但我得到的唯一记录是第

  • 问题内容: 我想使用docker-compose在“主机”网络中生成3个服务。这是我的docker-compose.yml文件: 我收到以下错误: 我在Windows上使用boot2docker。 Docker和Docker-compose版本: 如果我通过使用所有内容手动运行所有服务,则一切正常。 在文档中,我读到 docker-compose支持* net 命令: * 净 联网模式。使用与do

  • 本文向大家介绍Docker容器中运行nginx,包括了Docker容器中运行nginx的使用技巧和注意事项,需要的朋友参考一下 nginx简介 Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。与旧版本(<=2.2)的Apache不同,nginx不采用每客户机一线程的设计模型,而是充分使用异步逻辑,削减了上下文调度开销,所以并发服务能

  • Kibana 的 Docker 镜像可以从 Elastic 官网上的 Docker 镜像仓库获取。该镜像是随 X-Pack 一起打包的。 注意:X-Pack 在这个 image 中是预装好的。安装了 X-Pack,Kibana 会去连接同样带有 X-Pack 的 Elasticsearch 集群。 获取镜像 向 Elastic Docker 仓库发送一条 docker pull 命令就可以获取 K