问题标签 [input-split]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5444 浏览

hadoop - 在 Hadoop MapReduce 中为二进制文件创建自定义 InputFormat 和 RecordReader

我正在编写一个 M/R 作业,它处理以二进制格式编写的大型时间序列数据文件,看起来像这样(为了便于阅读,这里的新行,实际数据是连续的,显然):

其中 timestamp 只是一个 8 字节的结构,可以通过前 2 个字节来识别。如上所示,实际数据在重复值时间戳之间有界,并且包含一个或多个预定义结构。我想编写一个自定义 InputFormat,它将向映射器发出键/值对:

从逻辑上讲,我想跟踪当前的TIMESTAMP,并汇总所有数据,直到TIMESTAMP再次检测到该数据,然后将我的<TIMESTAMP, DATA>对作为记录发送出去。我的问题是在内部拆分之间同步RecordReader,所以如果某个读者收到以下拆分

解决这个问题的好方法是什么?我是否有一种简单的方法来访问文件偏移量,以便我CustomRecordReader可以在拆分之间同步而不会丢失数据?我觉得我在如何处理拆分方面存在一些概念上的空白,因此对这些问题的解释可能会有所帮助。谢谢。

0 投票
0 回答
148 浏览

hadoop - Hadoop map.input.start 不是线边界?

似乎 map.input.start 属性没有给我一行开始的位置(当然,第一个 map.input.start 是 0 除外)。有时,map.input.start 位于映射器输入的第一行中间的某个位置,有时它位于前一个映射器输入的最后一行中间的某个位置。这是可以预料的吗?如果是这样,我怎样才能获得行的字节偏移量?usingTextInputFormat不起作用,因为我使用的是 Hadoop 流,它丢弃了映射器的密钥

0 投票
1 回答
1784 浏览

apache-pig - Pig:强制每个输入文件使用一个映射器

跟进Pig:强制 UDF 在 Reducer 中发生或设置映射器数量。我有一个 UDF,它在我的猪工作流程中作为地图步骤运行。它需要一个 X 文件列表,每个从前一步保存的 reducer 1 个。我希望有 X 映射器(每个输入文件 1 个)来运行这个 UDF,因为它非常耗时,所以 Pig 没有像我想要的那样并行运行它。基于Hadoop 流式传输:每个地图的单个文件或多个文件。不要拆分我认为解决方案是防止拆分,所以我做了一个猪 Load Func 之类的。

当我使用它时,它的效果与我想要的完全相反,映射器任务的数量减少了近一半。

我如何才能真正强制每个输入文件只有一个映射器?

0 投票
1 回答
3856 浏览

java - Hadoop FileSplit 读取

假设一个客户端应用程序使用一个FileSplit对象来从相应的文件中读取实际字节。

为此,必须通过以下代码InputStream从 中创建一个对象:FileSplit

在某些场景中,例如类,会出现将流调整为 -1 的情况Hadoop MapReduce LineRecordReader。但是,该FSDataInputStream seek()方法的文档明确指出,在寻找到一个位置之后,下一次读取将来自该位置,这意味着(?)上面的代码将是 1 个字节(?)。

所以,问题是,对于所有 InputSplit 阅读案例是否需要“-1”调整?

顺便说一句,如果想要FileSplit正确读取一个文件,仅寻找它的开头是不够的,因为每个拆分也有一个结尾,可能与实际 HDFS 文件的结尾不同。因此,对应的InputStream应该是“有界的”,即具有最大长度,如下所示:

fsin在这种情况下,在上面创建了“本机”流之后,使用org.apache.commons.io.input.BoundedInputStream该类来实现“边界”。

更新

显然,仅当用例排在该类中时才需要进行调整LineRecordReader,这超出了拆分的边界,以确保它读取完整的最后一行。

可以在较早的问题MAPREDUCE-772的评论中找到有关此问题的详细讨论。

0 投票
2 回答
1051 浏览

hadoop - 如何处理inputsplit的多行记录?

我有一个 100 TB 的文本文件,它有多行记录。而且我们没有给出每条记录占用多少行。一个记录的大小可以是 5 行,另一个可能是 6 行,另一个可能是 4 行。它不确定每条记录的行大小可能会有所不同。

所以我不能使用默认的 TextInputFormat,我已经编写了自己的输入格式和自定义记录阅读器,但我的困惑是:当拆分发生时,我不确定每个拆分是否包含完整记录。记录的某些部分可以进入第 1 部分,而另一些部分可以进入第 2 部分。但这是错误的。

那么,您能否建议如何处理这种情况,以便我保证我的完整记录在单个 InputSplit 中?

提前致谢-JE

0 投票
1 回答
2616 浏览

hadoop - MapReduce:当 2 个块分布在不同的节点上时,如何完成输入拆分?

我阅读了以下 wiki,但仍然无法澄清一件事。

https://wiki.apache.org/hadoop/HadoopMapReduce

比如说,我有一个大文件被分成两个 HDFS 块,并且这些块被物理保存到 2 台不同的机器中。考虑在集群中没有这样的节点在本地托管这两个块。据我了解,对于 TextInputFormat HDFS 块大小通常与拆分大小相同。现在由于有 2 个拆分,2 个地图实例将在 2 个单独的机器中生成,这些机器在本地保存块。现在假设 HDFS 文本文件在一行中间被破坏以形成块。hadoop 现在会将第 2 台机器中的第 2 块复制到第 1 台机器中,以便它可以提供第 2 块的第一行(断线的一半)来完成第一个块的最后一条断线吗?

0 投票
2 回答
3697 浏览

hadoop - 如何读取拆分为多行的记录以及如何在输入拆分期间处理损坏的记录

我有一个日志文件如下

我想使用 mapreduce 来处理这个。我想提取事件 ID、状态以及事件花费的时间

如何处理这两个记录,因为它们具有可变的记录长度,以及如果输入拆分发生在记录结束之前怎么办。

0 投票
1 回答
141 浏览

java - 如何在输入拆分上计算位置

在“Hadoop - 权威指南”中,它说 -->

运行作业的客户端通过调用 getSplits() 计算作业的拆分,然后将它们发送到作业跟踪器,作业跟踪器使用它们的存储位置来安排地图任务以在任务跟踪器上处理它们。

我们知道 getLocations() 返回一个主机名数组。

问题 1:客户端如何知道要返回哪些主机名。这不是jobtracker的工作吗?

问题 2:2 个不同的 InputSplit 对象能否返回相同的主机名?主机名是如何决定的。谁这样做?

我觉得客户端联系名称节点以获取文件的所有主机名(包括副本),进行一些数学运算以到达为每个输入拆分设置的位置。这是真的吗?

0 投票
2 回答
198 浏览

hadoop - 字数:每个块超过 1 个地图任务,推测执行关闭

在 Wordcount 中,您似乎可以在每个块中获得超过 1 个地图任务,并关闭推测执行。

jobtracker 是否在后台做了一些魔术来分配比 InputSplits 提供的更多的任务?

0 投票
0 回答
79 浏览

hadoop - 地图减少作业中的拆分

我有一个输入文件,我需要在其上自定义RecordReader. 但是,这里的问题是,数据可能会分布在不同的输入拆分中,并且不同的映射器可能会获得应该由第一个映射器使用的数据。

例如
ABCD
$ EF

开头的“$”表示它是上一行的延续。

考虑到,第二次拆分从 $ 开始。现在,我的第一个映射器不会知道第一行的延续。另请注意,我的数据中很可能根本没有任何第二行。所以,直到或除非我读到第二行,我才能知道我的数据有什么延续。

请帮我找到解决这个问题的方法。