- 浏览: 358902 次
- 性别:
- 来自: 上海
最新评论
-
希恩杰:
采样器的目的是啥?使数据均匀分布到所有分区?使key的数量均匀 ...
Hadoop深入学习:Hadoop全排序中的Sampler采样器 -
lawlietwf:
三篇文章中有两篇链接地址一样,po主看下
Hadoop中的快速排序算法 -
坏小四:
...
《Hbase权威指南》深入学习hbase:表,列族,列标识,版本和cell -
fbwfbi:
发现使用pika-0.9.13的版本依然出错:Tracebac ...
RabbitMQ:使用python发布/订阅消息 -
hehu158:
centos6.5 chmod +x qq2012.tra.g ...
CentOS 6.4安装qq2012
文章列表
想找一个Hadoop相关的工作,很多都需要熟悉Python或Linux Shall脚本的脚本,故决定开始学习python。
在学习环境中使用的是python 2.7.*,但是CentOS 6.4中默认使用的python版本是2.6.6,故需要升级版本。
安装步骤如下:
引用
1,先安装GCC,用如下命令yum install gcc gcc-c++
2,下载python-2.7.5.tar.gz文件,修改文件权限chmode +x python-7.5.tar.gz
3,解压tar文件,tar -xzvf pyt ...
在本节中,我们再来仔细回顾一下MapReduce编程框架的所谓的“洗牌”过程,即MapReduce的Shuffle过程,可以说Shuffle是MapReduce编程框架的核心,能直接影响到MapReduce的性能。实际上,对MapReduce的调优在很大程度上就是对MapReduce Shuffle的性能的调优。
那么,Shuffle到底在MapReduce处于哪个阶段呢?实际上,从Map Task任务中的map()方法中的最后一步调用即输出中间数据开始,一直到Reduce Task任务开始执行reduce()方法结束,这一中间处理过程就被称为MapReduc ...
在Partitioner组件的设计与实现中,我们已经了解过Partitioner组件的其中一个和全排序相关的实现类——TotalOrderPartitioner。
我们知道,在Hadoop中,最终的处理结果集中的数据,除非就由一个Reduce Task处理,否则结果数据集只是局部有序而非全排序。
这节我们来学习在Hadoop中进行全排序操作中除了TotalOrderPartitioner之外的另一个组件——采样器Sampler。
在新版本的Hadoop中,内置了三个采样器: SplitSampler,RandomSampler和In ...
本节我们来着重学习ReduceTask的内部操作流程和实现。
我们先看一下ReduceTask操作流程:
从流程图中我们可以看出,ReduceTask分5个阶段:
Copy阶段
Merge阶段
Sort阶段
Reduce阶段
Write阶段
其中的Copy阶段和Merge阶段是并行进行的。默认情况下ReduceTask同时启动5个MapOutputCopier线程从各个Mapper端的中间数据结果copy数据,放大小超过一定阀值后,则存放到磁盘上,否则 ...
在本节中,我们主要来学习MapTask的内部实现。
整体执行流程
如上图示,MapTask的整个处理流程分五个阶段:
●read阶段:通过RecordReader从InputSplit分片中将数据解析 ...
在本节中,我们特别来学习一些有心跳(HeartBeat)的相关知识,这包括用途、心跳的发送、接收和应答。
JobTracker和TaskTracker之间是通过心跳来进行信息沟通的,TaskTracker通过周期性的通过心跳向JobTracker汇报该节点和任务的状态。心跳实际上就是一个RPC函数,在Hadoop中,心跳主要有三个作用:
1)、判断TaskTracker是否还活着;
2)、JobTracker及时获得各个TaskTracker节点上资源的使用情况和任务运行状态;
3)、给TaskTracker分配任务 ...
之前已经学过了MapReduce接口编程模型及涉及的相关组件,本节我们主要学习MapReduce的作业提交过程和如何初始化作业这两部分的内容。
下面我们来熟悉一下MapReduce作业的提交和初始化的过程:
作业的提交过程
第一步,使用Hadoop提供的shell命令提交作业,命令行作业提交命令:
$HADOOP_HOME/bin/hadoop jar job.jar \
-D mapred.job.name="task-test" \
...
在本节中,我们着重来学习一下MapReduce编程框架中的OutputFormat组件。
在MapReduce中,OutputFormat主要用于描述经reducer处理后输出的数据的格式,它会将用户提供的key/value键值对而写入到特定格式的文件中。
我们先看一下在1.0老版本中的OutputFormat接口的代码:
public interface OutputFormat<K, V> {
/**
* 返回一个RercordWriter类的对象,并有该对象接收用户的key/value ...
在本节中我们主要来学习MapReduce编程接口模型中的Reduce组件。
和学习Mapper组件详解一样,我们先来看看1.0新版本中Reduce代码:
public class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {
public class Context
extends ReduceContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {
public Context(Configuration conf, TaskAttemptID ...
本节我们来学习MapReduce编程框架中的Partitioner接口和其他相关的信息。
Partitioner的作用就是对Mapper产生的中间数据进行分片,以便将同一分片的数据交给同一个Reducer处理,该过程是MapReduce的shuffle过程,特别是Map端的shuffle的一部分。
Partitioner它直接影响Reduce阶段的负责均衡。在老版中,Partitioner是一个接口,继承了JobConfigurable接口,代码如下:
/**
* Partitions the key space.
*
* < ...
本节我们主要学习MapReduce编程接口模型中的Mapper组件,主要是学习其中一些的方法,如setup()、map()和cleanup()等方法地使用。
我们先来看一下新版本中的Mapper代码:
public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
public class Context
extends MapContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {
public Context(Configurati ...
在本节里,我们着重学习MapReduce编程接口模型中的InputForamt组件。
InputFormat主要用于描述输入数据的格式,提供了以下两个功能:
1)、数据切分,按照某个策略将输入数据且分成若干个split,以 ...
在学习MapReduce编程模型接口的五个组件之前,我们先来看一下MapReduce的序列化。
那么什么是序列化呢?
序列化就是讲一个对象编码成一个字节流;相反,从字节流中重新构建对象就叫做反序列化。 ...
MapReduce的一个设计目标就是易用性,它提供了一个高度抽象化的非常简单的编程模型。
MapReduce这个分布式计算框架,其应用场景往往是那些可以将任务分解成相互独立的子问题。基于这个特点, MapReduce编程模型将分布式编程分成了五个步骤:
1),迭代遍历输入数据,并将数据解析成简单的key/value键值对的形式,该阶段段对应着InputFormat组件;
2)、将输入的key/value映射成另外的key/value数值对,该阶段对应着Mapper组件;
3)、依据key对所有的中间数据进行分组儿,该 ...
本节我们主要看一下Map Task和Reduce Task的执行流程:
好了,接下来我们再看看Map Task和Reduce Task的一个完整的执行流程:
1)、TaskNode节点启动分配JobTracker个Map Task任务,启用InputFormat对象(具体为RecordReader)读取分配给本节点split分片,将每一行的数据读取成key/value键值对;
2)、mapper程序的map()函数会接收key/value键值对的数据,做逻辑处理,然后将之输出;
3)、(开始MapReduce的s ...