gpt4 book ai didi

java - Spark 与 Hadoop 集成 InputFormat 混淆

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

我目前正在尝试将自定义 InputSplitRecordReader 与 Apache Spark 的 SparkContext hadoopRDD() 函数结合使用。

我的问题如下:

InpuSplit.getLenght() 和/或 RecordReader.getProgress() 返回的值是否会影响 map() 的执行Spark Runtime 中的函数?

我问是因为我在 Apache Hadoop 上使用了这两个自定义类,它们按预期工作。但是,在 Spark 中,我看到在运行时生成了新的 InputSplit 对象,这是我不希望我的代码执行的操作。更准确地说:

在执行开始时,我在我的日志文件中看到生成了正确数量的 InputSplit 对象(在本例中我们假设只有 1 个)。反过来,生成与该拆分关联的 RecordReader 对象并开始获取记录。在某些时候,我收到一条消息,指出正在处理之前的 InputSplit 的 Job 停止,并且使用新的 InputSplit 生成了一个新的 Job。我不明白为什么会这样?是否与RecordReader.getProgress() 方法或InputSplit.getLength() 方法返回的值有关?

此外,我将 InputSplit 的长度定义为任意大字节数(即 1GB)。此值是否会影响在运行时生成的 Spark 作业数?

欢迎任何帮助和/或建议?

谢谢,尼克

P.S.-1:对于发布这么多问题,我深表歉意,但 Apache Spark 是一个新工具,几乎没有关于通过 HadoopRDDs 集成 Hadoop-Spark 的文档。

P.S.-2:如果需要,我可以提供更多技术细节。

最佳答案

是的,如果从 getLength() 返回任何值,那么在读取这些值后,否。文件中的字节数,hadoop 将生成一个新的拆分以读取更多数据。如果您不希望出现此行为,请覆盖方法 InputFormat.getSplits() 以返回 false。即 .. 你不希望它 split 。

getProgress() 方法与生成新拆分无关。

关于java - Spark 与 Hadoop 集成 InputFormat 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24815431/

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