您的位置:首页 > 大数据 > Hadoop

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

2014-04-14 13:49 49 查看
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数据流。输入数据被分配到不同节点之后,节点间通信的唯一时间是在“洗牌”阶段,这个通信约束对可扩展性有极大帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: