如何设置 HDFS 文件系统以使用 HDFS 运行 Spark 作业?

Posted

技术标签:

【中文标题】如何设置 HDFS 文件系统以使用 HDFS 运行 Spark 作业?【英文标题】:How do I set up a HDFS file system to run a Spark job with HDFS? 【发布时间】:2019-08-22 09:09:54 【问题描述】:

我对使用 Minio/HDFS 以独立模式运行 Spark 感兴趣。

This question 确切地问我想要什么:“我需要一个 HDFS,因此仅使用 Hadoop 的文件系统部分就足够了吗?” -- 但接受的答案没有帮助,因为它没有提到如何将 HDFS 与 Spark 一起使用。

我已下载为 Apache Hadoop 2.7 及更高版本预构建的 Spark 2.4.3。

我已按照 Apache Spark 教程成功部署了一台主机(我的本地机器)和一台工作机(我的 RPi4 在同一个本地网络上)。我能够进行简单的字数统计(计算/opt/spark/README.md 中的字数)。

现在我想计算仅存在于 master 上的文件的字数。我知道我需要为此使用 HDFS 在本地网络上共享文件。但是,尽管阅读了 Apache Spark 和 Hadoop 文档,但我不知道如何执行此操作。

我对 Spark 和 Hadoop 之间的相互作用感到困惑。我不知道我是否应该在 Spark 集群之外设置一个 Hadoop 集群。 This tutorial on hadoop.apache.org 似乎没有帮助,因为它说“您需要同时启动 HDFS 和 YARN 集群”。我想以独立模式运行 Spark,而不是 YARN。

我需要做什么才能跑步

val textFile = spark.read.textFile("file_that_exists_only_on_my_master")

并将文件传播到工作节点,即在工作节点上不会出现“文件不存在”错误?

【问题讨论】:

从 mapR 获得一个虚拟机——它们仍然是额外的,它就在那里。 @thebluephantom 不确定您的意思是“他们仍然额外”。将看看 mapR 的 VM,但如果可能的话,我想自己部署。 确实#$@%$^存在 从 Cloudera、Hortonworks 或 MapR 获取 VM。它们都包括这些 VM 上的 hdfs 设置。不幸的是,在 Windows 上,设置它非常困难,甚至很难启动所有服务。 @PiyushP 我在 Linux 上,在主节点上运行 Ubuntu 18.04,在 Raspi 上运行 HypriotOS。 【参考方案1】:

我设置了 MinIO,并根据说明编写了以下 Github Gist。

诀窍是设置core_site.xml 指向MinIO 服务器。

Github Gist here

<script src="https://gist.github.com/lieuzhenghong/c062aa2c5544d6b1a0fa5139e10441ad.js"></script>

【讨论】:

以上是关于如何设置 HDFS 文件系统以使用 HDFS 运行 Spark 作业?的主要内容,如果未能解决你的问题,请参考以下文章

HDFS的运行模式

在本地文件系统(不是HDFS)中使用Scala读取Apache Spark中的文件时如何更改输入块大小[重复]

Hadoop HDFS

HDFS 系统架构

Apache Apex 是依赖 HDFS 还是有自己的文件系统?

2.HDFS