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

Spark在读取HDFS文件时如何在内部工作

邹斌
2023-03-14

假设我有一个256 KB的文件存储在HDFS文件系统中的一个节点(作为两个块,每个块128 KB)。该文件内部包含两个块,每个块128 KB。假设我有两个节点集群,每个节点只有1个核心。我的理解是,转换过程中的spark将读取内存中一个节点上的完整文件,然后将一个文件块内存数据传输到另一个节点,以便两个节点/核心可以并行执行它?那是正确的吗?

如果两个节点都有两个核心,而不是一个核心呢?在这种情况下,单节点上的两个核可以进行计算吗?对吗?

         val text = sc.textFile("mytextfile.txt") 
         val counts = text.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_) 
         counts.collect

共有1个答案

百里泓
2023-03-14

您的问题有点假设性,因为Hadoop集群中的HDFS只存在一个数据节点和两个工作节点(其中一个既是工作节点又是数据节点)是不太可能的。也就是说,Spark(和MR)与HDFS的整体思想是将处理带到数据上。工作节点实际上是标准Hadoop设置中的数据节点。这就是初衷。

一些变体来回答你的问题:

>

  • 假设上述情况,每个工作节点将在新生成的RDDs上处理一个分区和随后的转换,直到完成为止。当然,您可以对数据进行重新分区,所发生的情况取决于分区的数量和每个工作节点的执行器数量。

  •  类似资料:
    • 我有一个大的(>500M行)CSV文件。这个CSV文件中的每一行都包含一个位于HDFS上的二进制文件的路径。我想使用Spark读取这些文件中的每一个,处理它们,并将结果写到另一个CSV文件或表中。 在驱动程序中执行此操作非常简单,下面的代码完成了这项工作 但是失败 是否可以让执行者直接访问HDFS文件或HDFS文件系统?或者,是否有一种有效的方法来读取HDFS/S3上数百万个二进制文件并用Spar

    • 问题内容: 我有一个200kb的文件,可以在多个页面中使用,但是在每个页面上我只需要该文件的1-2行,那么如果我知道行号,该如何只读取这些行呢? 例如,如果我只需要第十行,那么我就不想将所有行(仅第十行)加载到内存中。 对不起,我的英语不好! 问题答案: 除非您知道该行的偏移量,否则您将需要读取该点之前的每一行。您可以通过使用循环遍历文件来丢弃旧的行(不需要的行)。 可能更好的解决方案是使用数据库

    • 我在AWS上有一个Hadoop/Yarn集群设置,我有一个主服务器和三个从服务器。我已经验证有3个活动节点在端口50070和8088上运行。我在客户机部署模式下测试了一个spark工作,一切都很好。 当我尝试使用。我得到以下错误。

    • 所以我必须检索存储在HDFS中的文件的内容,并对其进行某些分析。 问题是,我甚至无法读取文件并将其内容写入本地文件系统中的另一个文本文件。(我是Flink的新手,这只是一个测试,以确保我正确读取了文件) HDFS中的文件是纯文本文件。这是我的密码: 在我运行/tmp之后,它没有输出。 这是一个非常简单的代码,我不确定它是否有问题,或者我只是做了一些别的错误。正如我所说,我对Flink完全是新手 此

    • 问题内容: 我想读取CSV文件并使用AngularJS和HTML5获取其内容。我想将csv文件的内容放在$ scope中。 我的HTML中有此代码 问题答案: 使用自定义指令: http://plnkr.co/edit/eeQbR65oE8iljm7ueGhX?p=preview

    • 我正在寻找MSDN论坛上的一些信息,但找不到一个好的论坛/在spark网站上阅读时,我有暗示在这里我会有更好的机会。因此,最重要的是,我想读取一个 Blob 存储,其中有一个连续的 XML 文件源,所有小文件,最后我们将这些文件存储在 Azure DW 中。使用 Azure 数据砖,我可以使用 Spark 和 python,但我找不到“读取”xml 类型的方法。一些示例脚本使用了一个库 xml.e