`
zhaohuafei
  • 浏览: 26819 次
文章分类
社区版块
存档分类
最新评论

Hadoop读书笔记——基础知识二

 
阅读更多
Hadoop数据类型
为了让键/值对可以在集群上移动,MapReduce框架提供了一种序列化键/值对的方法。因此,只有那些支持这种序列化的类能够在框架中充当键/值。
实现Writable接口的类可以是值;
实现WritableComparable<T>接口的类可以是键/值。

键/值对经常使用的数据类型列表。这些类均用于实现WritableComparable接口。
BooleanWritable
标准布尔变量的封装
ByteWritable
单字节数的封装
DoubleWritable
双字节数的封装
FloatWritable
浮点数的封装
IntWritable
整数的封装
LongWritable
Long的封装
TextWritable
使用UTF8格式的文本
NullWritable
无键值的占位符

Mapper
一个类要作为mapper,需继承MapReduceBase积累并实现Mapper接口。mapper接口负责数据处理阶段,它采用的形式为Mapper<k1,v1,k2,v2>Java泛型,这里的键/值分别实现了WritableComparable和Writable接口,mapper只有一个方法——map,用于处理一个单独的键/值对。

Reducer
reducer的实现和mapper一样必须首先在Reduce基类上扩展。还必须实现reducer方法。

Partition
重定向Mapper输出。将mapper的结果输出给不同的reducer。默认的做法是对键进行散列来确定reducer,hadoop通过HashPartitioner类强制执行这个策略。但有时会出错,需定制。一个定制的partitioner只需实现configure()和getPartition()两个函数。前者将hadoop对作业的配置应用在Partitioner上,而后者返回一个介于0和reduce任务数之间的整数,指向键/值对将要发送到的reducer。

Shuffing
在map和reduce阶段之间,一个MapReducer应用必然从MapReducer任务得到输出结果,并把这些结果发布给reducer任务。该过程通常称为洗牌,因为在单节点上的mapper输出可能被送往分布在集群多个节点上的reducer。

读和写
MapReduce处理的基本原则之一是将输入数据分割成块。这些块可以在多台计算机上并行处理。这些块被称为分片(Input Spilt)。每个分片应该足够小以实现更细粒度的并行,但也不能太小,否则启动与停止分片处理就占很大的开销。

InputFormat
hadoop分割与读取输入文件的方式被定义在InputFormat接口的一个实现中。TextFormat是其默认实现。

OutputFormat
当MapReduce输出数据到文件时,使用的是OutputFormat类。

普通的MapReduce数据流。输入数据被分配到不同节点之后,节点间通信的唯一时间是在“洗牌”阶段,这个通信约束对可扩展性有极大帮助。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics