我正在学习Hadoop,并从HDFS
和MapReduce
开始。我理解HDFS
和MapReduce
的基础知识。
有一点我无法理解,我在下面解释:
大数据集 - >作为块存储在HDFS中,例如B1,B2,B3。
现在,当我们运行MR作业时,每个映射器都在一个块上运行(假设1个映射器处理一个数据块以简化)
1 Mapper ==>处理1块
我还读到该块被分为Records
,对于给定的块,为该块(数据)中的每个记录调用相同的映射器。
但究竟什么是Record
?
对于给定的块,因为它必须被“分解”为records
,该块如何被分解为记录以及记录中的成分。
在大多数示例中,我看到记录是由新行分隔的整行。
我怀疑是什么决定了什么可以被视为记录的“条件”基础。
我知道Hadoop中有很多InputFormat,但我的问题是决定将某些内容视为记录的条件是什么。
任何人都可以用简单的语言帮助我理解这一点。
答案 0 :(得分:1)
你已经基本上已经为自己回答了这个问题,所以希望我的解释可以帮助你。
记录是键值对的MapReduce特定术语。单个MapReduce作业可以有多种不同类型的记录 - 在wordcount示例中,映射器输入记录类型为<Object, Text>
,映射器输出/缩减器输入记录类型为<Text, IntWritable>
,以及reducer输出记录类型也是<Text, IntWritable>
。
InputFormat负责定义块如何拆分为单个记录。如您所述,有许多InputFormats,每个都负责实现管理如何将数据拆分为记录的代码。
块本身没有记录概念,因为在数据被读取到映射器之前不会创建记录。您可以使用两个单独的MapReduce作业来读取相同的块但使用不同的InputFormats。就HDFS而言,它只是存储了一大块数据。
没有&#34;条件&#34;用于定义数据的拆分方式 - 您可以创建自己的InputFormat并按需要拆分数据。