2016.5.20 hadoop新手学习指导

2016.5.20

学习hadoop之前的一些基础知识
Hadoop新手学习指导
零基础学习hadoop到上手工作线路指导(初级篇)

学习总结
进度:大致浏览过,有些细节未深究,有些跳过。详细看过的都有操作标记比如加粗。
操作:并未实际操作。

1.什么是云计算与云计算技术
(1)什么是云计算
a. 云计算指的就是把你的软件和服务统一部署在数据中心,统一管理,从而实现高伸缩性。
b. 从部署方式来说,云计算可以分为私有云和公共云。从运营方式来说,云计算可以分成SaaS,PaaS,IaaS三类。
(2)什么是云计算技术
a. 云计算技术的特点是分布式架构。云计算中比较hot的技术有hadoop,它是一种分布式解决方案,用来处理大规模数据
b. 云计算中一些不错的发展方向有…

2.hadoop核心知识
(1)hadoop HDFS文件系统的特征
a. HDFS用来存储极大数目的信息(terabytes or petabytes),将数据保存到大量的节点中,支持很大的单个文件。HDFS是针对MapReduce设计的,使得数据尽可能根据其本地局部性进行访问与计算。
b. 提供数据的高可靠性,单个或者多个节点不工作,对系统不会造成任何影响,数据仍然可用。
c. 提供对这些信息的快速访问,并提供可扩展的方式。能够通过简单加入更多服务器的方式就能够服务更多的客户端。

(2)什么是Map/Reduce
a. Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也很丰富,包括ZooKeper,Pig,Chukwa,Hive,Hbase,Mahout,flume等。
b. Map/Reduce是一种编程模型,抽象理论,可以用c++实现,也可以用Java实现。

c. 一个类比的做菜例子
假设场景:如果想用薄荷、洋葱、番茄、辣椒、大蒜弄一瓶混合辣椒酱。你会怎么做呢?
实际操作:切碎,加盐和水,放入研磨机里研磨,最后得到混合辣椒酱。
Map/Reduce
Map是映射,Reduce是化简。
Map(映射): 把洋葱、番茄、辣椒和大蒜切碎,是各自作用在这些物体上的一个Map操作。所以你给Map一个洋葱,Map就会把洋葱切碎。 Map操作适用于每一种蔬菜,它会相应地生产出一种或多种碎块,在我们的例子中生产的是蔬菜块。在Map操作中可能会出现有个洋葱坏掉了的情况,你只要把坏洋葱丢了就行了。所以,如果出现坏洋葱了,Map操作就会过滤掉坏洋葱而不会生产出任何的坏洋葱块。
Reduce(化简):在这一阶段,你将各种蔬菜碎都放入研磨机里进行研磨,你就可以得到一瓶辣椒酱了。这意味要制成一瓶辣椒酱,你得研磨所有的原料。因此,研磨机通常将map操作的蔬菜碎聚集在了一起。

d. 上面的例子只是Map/Reduce的很小一部分,它强大的地方在于分布式计算
假设场景:假设你每天需要生产10000瓶刚刚所说的辣椒酱,并且根据口味不同生产不同之后种类的辣椒酱,比如洋葱辣椒酱、番茄辣椒酱等,你会怎么办呢?
实际操作:找一个能大量提供原料的供应商,然后雇佣大批工人,买入大量研磨机。工作开始后,让工人分成几个部门:洋葱处理组、番茄处理组等,然后在每个组内比如洋葱处理组,进行分工,每个人完成多少处理量。然后将所有处理好的洋葱和辣椒放到一起,放入洋葱研磨机内,最后得到洋葱辣椒酱。
Map/Reduce:切碎仍然是一个Map操作,只不过这里比前面增加了大量的工人,每个人处理布置好的任务量,蔬菜的种类比如番茄和洋葱用key来标记,然后将相同key的放到一起进行研磨,也就是Reduce操作。

e.另一个文件处理的例子
假设场景:统计下过去10年计算机论文出现最多的几个单词。
操作思路:把论文集分为N份,将任务部署到N台机器上去,交给多个计算机去完成。一台机器跑一个作业,这个方法跑得足够快,但是部署起来很麻烦,我们要人工把程序copy到别的机器,要人工把论文集分开,最痛苦的是还要把N个运行结果进行整合(当然我们也可以再写一个程序)。
让MapReduce来帮忙!

f. reduce函数和map函数
如何拆分任务,如何copy任务,如何整合结果这些都是框架定义好的。我们只要定义好这个任务(用户程序),其它都交给MapReduce。
map函数
输入:原始key-value pair
输出:中间key-value pair
reduce函数
输入:key-values
输出:values

//key:document name
//value:document contents
map(String key,String value){
    for each word w in value:
        EmitIntermediate(w,"1");
}

//key: a word,w in this situation
//values: a list of counts,("1","1","1"...) in this situation
reduce(String key, Iterator values){
    int result = 0;
    for each v in values{
        result += ParseInt(v);
    }
    Emit(AsString(result));
}

g.工作原理
工作原理
user program链接了MapReduce库,实现了最基本的Map函数和Reduce函数。
——>MapReduce库把user program的输入文件划分为M份(M为用户定义),比如split0~4
——>使用fork将用户进程拷贝到集群内的其他设备上
——>user program副本中的master为worker分配Map作业
——>Map worker开始读取对应分片的输入数据,抽取键值对,将其传递给map函数
——>map函数进行处理,将产生的中间键值对缓存在内存中
——>中间键值对被定期写入本地磁盘,且被分为R个区(R为用户定义)
——>中间键值对的位置被通报给master,master将位置信息转发给Reduce worker
——>Reduce worker对自己负责的中间键值对排序,使key相同的聚集,并将排序后的键值对传递给reduce函数
——>reduce函数进行处理,将输出添加在这个分区的输出文件中
——>当Map和Reduce作业完成,master唤醒正版user program,MapReduce函数调用返回user program的代码。
注意:
输入数据来自底层分布式文件系统GFS;中间数据存放在本地文件系统;最终输出数据写入底层分布式系统GFS。
Map作业处理一个输入数据的分片split,调用多次map函数来处理;Reduce作业处理一个分区中的中间键值对,对不同的键分别调用一次reduce函数。
所有执行完毕后,MapReduce输出放在了R个分区的输出文件中(分别对应一个Reduce作业)。用户通常并不需要合并这R个文件,而是将其作为输入交给另一个MapReduce程序处理。

(3)Hadoop mapper类的阅读
在Hadoop的mapper类中,有4个主要的函数,分别是:setup,clearup,map,run。
当调用到map时,通常会先执行一个setup函数,最后会执行一个cleanup函数。而默认情况下,这两个函数的内容都是nothing。因此,当map方法不符合应用要求时,可以试着通过增加setup和cleanup的内容来满足应用的需求。

protected void setup(Context context) throws IOException, InterruptedException{
    //nothing
}

protected void cleanup(Context context) throws IOException, InterruptedException{
    //nothing
}

protected void **map**(KEYIN key,VALUEIN value,Context context) throws IOException, InterruptedException{
    context.write((KEYOUT) KEY,(VALUEOUT) value);
}

public void run(Context context)throws IOException, InterruptedException{
    setup(context);
    while(context.nextkeyvalue()){
        **map**(context.getCurrentKey(),context.getCurrentValue();context);
    }
    cleanup(context);
}

(4)Hadoop reducer类的阅读
在Hadoop的reducer类中,有3个主要的函数,分别是:setup,clearup,reduce。
当调用到reduce时,通常会先执行一个setup函数,最后会执行一个cleanup函数。而默认情况下,这两个函数的内容都是nothing。因此,当reduce不符合应用要求时,可以试着通过增加setup和cleanup的内容来满足应用的需求。

protected setup(Context context) throws IOException, InterruptedException{
    //nothing
}

protected cleanup(Context context) throws IOException, InterruptedException{
    //nothing
}

protected void **reduce**(KEYIN key,Iterable<VALUEIN> values,Context context)throws IOException, InterruptedException{
    for(VALUEIN value:values){
        Context.write((KEYOUT)key,(VALUEOUT)value)
    }
}

public void **run**(Context context)throws IOException, InterruptedException{
    setup(context);
    while(context.nextkey()){
        **reduce**(context.getCurrentKey(),context.getValues(),context);
        //if a back up store is used, reset it
        ((ReduceContext.ValueIterator)(context.getValues().iterator())).restetBackupStore();
    }
    cleanup(context);
}

(5)MapReduce shuffle和排序
MapReduce为了确保每个reducer的输入都按照key排序,在将中间键值对传递给reducer的中间进行了排序。这个过程叫做shuffle。
从下图可以看出shuffle发生在map端和reduce端之间,将map端的输出与reduce端的输入对应。
shuffle的工作原理
具体的解释看起来好复杂,等学习一段时间再来吧。jump~

3.Hadoop的各个发布版和稳定性
hadoop部署方式为单机模式、伪分布式、完全分布式。对单机模式大家可以不用去关心和学习,在学习中我个人建议是搭建伪分布式,完全分布式是生产环境中使用,当大家把伪分布式后,必须对完全分布式有所了解,知道是如何工作的,也可以试着搭建hadoop的完全分布式。
现在hadoop已经发行了最新的2.2.x版本,但是不测试不够全面不够稳定,大家应该选择比较稳定的版本学习,因为在公司中还是会使用稳定的版本,2.2.x版本中一些处理机制和方案是值得我们学习的,需要所有了解。
hadoop各版本总结

4. hadoop伪分布式搭建
暂时jump~
5.hadoop 三节点集群安装配置详细实例
暂时jump~

6.hadoop shell命令介绍
暂时jump~

7.hadoop相关文档下载
文件内容目录:
(1)下一代Hadoop(2.0)介绍
(2)[Hadoop.Operations(2012.9)].Eric.Sammer.文字版
(3)Professional Hadoop Solutions(2013.9).Boris.Lublinsky
(4)Pro Hadoop
(5)MapReduce Design Patterns
(6)hadoop命令大全
(7)Hadoop分布式文件系统的模型分析
(8)Hadoop:The Definitive Guide(3rd,2012.5)
(9)Hadoop.Beginners.Guide(2013.2)].Garry.Turkington
(10)Hadoop+0.20.2+API
(11)Hadoop RealWorld Solutions Cookbook.Feb.2013
(12)Hadoop Operations(2012.9) Eric.Sammer.文字版
13.Hadoop in Practice
14.Hadoop in Action
百度网盘链接: http://pan.baidu.com/s/1cVN34 密码: vxet

还有一点作者的提醒,但是我没有验证过:
有一点想提醒初学的朋友,在学习hadoop开发的时候不要使用hadoop eclipse插件,这样会给你带来不必要的问题,你可以在eclipse使用maven工具下载hadoop资源包,然后写好mapreduce代码打包后传上自己的服务,使用命令启动运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值