mapreduce—块是如何转换成记录的,hadoop中记录的定义到底是什么

hgqdbh6s  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(455)

我正在学习hadoop,首先 HDFS 以及 MapReduce . 我理解了 HDFS 以及 MapReduce .
有一点我无法理解,我将在下面解释:
大数据集-->作为块存储在hdfs中,例如b1、b2、b3。
现在,当我们运行mr作业时,每个Map器在单个块上工作(为了简单起见,假设一个Map器处理一个数据块)
1个Map器==>处理1个块
我还看到这个街区被分成 Records 对于给定的块,为该块(数据)中的每个记录调用相同的Map器。
但究竟什么是 Record ?
对于给定的块,因为它必须被“分解”为 records ,该块如何被分解成记录,以及记录的组成部分。
在大多数示例中,我看到一条记录是由新行分隔的整行。
我的疑问是什么决定了某些东西可以作为记录处理的“条件”基础。
我知道hadoop中有很多inputformat,但我的问题是什么条件决定了某个东西被视为记录。
谁能帮我用简单的话来理解这一点。

unftdfkk

unftdfkk1#

你需要理解 RecordReader . Block 数据存储在磁盘上的硬绑定字节数。所以,如果说一个256MB的数据块,就意味着磁盘上有256MB的数据块。Map器从块中获取1条记录,对其进行处理;还有下一个——定义记录的责任就在你身上 RecordReader .
什么是唱片?如果我把块比作 table , record 是表中的一行。现在想想这个——如何在mapper中处理一个块数据,毕竟不能在一个随机字节的数据上写逻辑。从Map器的Angular 来看,只有当输入数据“有意义”或具有数据的结构或逻辑块(从Map器逻辑的Angular 来看)时,才能有逻辑。
这个逻辑块称为 record . 默认情况下,一行数据是默认实现中的逻辑块。但有时,将一行数据作为逻辑数据是没有意义的。有时,根本就没有线(假设它是mp4类型的数据,Map器需要一首歌曲作为输入)!
假设您在mapper中有一个要求,需要同时处理5条连续的线。在这种情况下,您需要覆盖 RecordReader 实现了5行 one record 一起交给制图员。
编辑1
你们的理解是正确的
inputformat:打开数据源并将数据分成块
recordreader:实际上将块解析为键/值对。
对于 JavaDoc 输入格式错误
inputformat描述map reduce作业的输入规范。map reduce框架依赖于作业的inputformat来:
将输入文件拆分为逻辑InputSplit,然后将每个逻辑InputSplit分配给一个单独的Map器。
提供recordreader实现,用于从逻辑inputsplit中提取输入记录以供Map程序处理。
从第一点开始,一个块并不是Map器的精确输入;这是一个相当复杂的问题 InputSplit . e、 g.考虑一个zip文件(用 GZIP ). zip文件是 ZipEntry (每个压缩文件)。从处理的Angular 来看,zip文件是不可拆分的。意思是 InputSplit 对于一个zip文件,它将由几个块组成(实际上是用来存储特定zip文件的所有块)。这是以牺牲数据局部性为代价的。i、 即使zip文件已损坏并存储在 HDFS 在不同的节点,整个文件将被移动到运行Map器的节点。这个 ZipFileInputFormat 提供默认的记录读取器实现 ZipFileRecordReader ,它的逻辑是 ZipEntry (压缩文件)的Map器键值。

hof1towb

hof1towb2#

你已经基本上自己回答了这个问题,希望我的解释能有所帮助。
记录是一个特定于mapreduce的术语,用于键值对。一个mapreduce作业可以有几种不同类型的记录-在wordcount示例中,Map器输入记录类型是 <Object, Text> ,Map器输出/还原器输入记录类型为 <Text, IntWritable> ,并且减速器输出记录类型也是 <Text, IntWritable> .
inputformat负责定义如何将块拆分为单个记录。正如您所确定的,有许多inputformat,每个inputformat都负责实现管理如何将数据拆分为记录的代码。
块本身没有记录的概念,因为在Map器读取数据之前,不会创建记录。可以有两个单独的mapreduce作业,它们读取相同的块,但使用不同的输入格式。就hdfs而言,它只是存储一个大数据块。
没有“条件”来定义如何分割数据-您可以创建自己的inputformat并根据需要分割数据。

相关问题