美文网首页
初识Hadoop

初识Hadoop

作者: 在路上的小海贼 | 来源:发表于2018-11-25 21:33 被阅读0次

    公司领导让部门内部结成小组,研究一下Hadoop,并说哪个组做得最好,年终奖有加成。无论奖励与否,多学一点总是好的。
    分组那天,阎总作为组长第一个选人,没想到选了我,算是对这将近一年工作态度的一种肯定吧,毕竟能力比我强的人有很多。
    上周五演示各个小组的ppt,我们组被评为最优,领导肯定了我们的努力,同事们也肯定了我们的努力,十分开心,将ppt整理了一下,算是对hadoop的一个小结吧,据说年后新的项目可能会用上。
    谷歌技术三宝分别是:GFS、MapReduce和BigTable。谷歌在03到06年间连续发表了三篇很有影响力的文章,分别是03年SOSP的GFS,04年OSDI的MapReduce,和06年OSDI的BigTable。SOSP和OSDI都是操作系统领域的顶级会议,在计算机学会推荐会议里属于A类。SOSP在单数年举办,而OSDI在双数年举办。
    Hadoop实际上就是谷歌三宝的开源实现,Hadoop MapReduce对应Google MapReduce,HBase对应Big Table,HDFS对应GFS。区别是谷歌底层是c++,而hadoop底层是用java。
    Hadoop是Apache基金会下的一款开源软件,它实现了包括分布式文件系统HDFS和MapReduce框架在内的云计算软件平台的基础架构,并且在其上整合了包括数据库、云计算管理、数据仓储等一系列平台,其已成为工业界和学术界进行云计算应用和研究的标准平台。
    现代社会的信息量增长速度极快,这些信息里又积累着大量的数据。预计到2020年,每年产生的数字信息将会有超过1/3的内容驻留在云平台中或借助云平台处理。如何高效地存储和管理这些数据,如何分析这些数据呢?这时候就需要使用Hadoop来处理海量数据。
    Hadoop主要用途如下:
    1、最简单的,做个数据备份/文件归档地方这利用了Hadoop海量数据的存储能力;
    2、数据仓库/数据挖掘:分析web日志,分析用户的行为(如:用使用搜索时,在搜索结果中点击第2页的概率有多大);
    3、搜索引擎:设计hadoop的初衷,就是为了快速建立索引;
    4、云计算:据说中国移动的大云,就是基于Hadoop的;
    5、研究:Hadoop的本质就是分布式计算,又是开源的,有很多思想值得借鉴。
    Hadoop的核心组成:一个存储系统(HDFS) + 一个计算系统(MapReduce)。
    HDFS
    HDFS(Hadoop Distributed File System)分布式文件系统,提供高吞吐量的应用程序数据访问,对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件。HDFS 的架构是基于一组特定的节点构建的,这是由它自身的特点决定的。
    图-1是HDFS组成图,其中:ResourceManager负责作业与资源的调度, NodeManager负责container状态的维护,并向RM保持心跳,NameNode是名称节点主要做任务与资源的分配,DataNode是数据节点主要用于数据存储, SecondaryNameNode做镜像的备份与合并。

    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-1 HDFS组成
    旧版hadoop缺点:
    从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看,MapReduce 的 JobTracker/TaskTracker 机制需要大规模的调整来,修复它在可扩展性,内存消耗,线程模型,可靠性和性能上的缺陷。
    重构思想:
    将JobTracker 两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度 / 监控。新的资源管理器全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调。
    从 0.23.0 版本开始,Hadoop 的 MapReduce 框架完全重构。新的 Hadoop MapReduce 框架命名为 MapReduceV2 或者叫 Yarn。
    分布式存储如何进行配置?
    分布式节点配置路径:/usr/local/hadoop/etc/hadoop/slaves,将机器名写到在slaves中进行分布式节点配置。
    图-2为两个节点的配置:
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-2 两个节点
    通过以下链接可以查看配置好的活跃节点:
    http://172.16.3.206:23001/dfsnodelist.jsp?whatNodes=LIVE(局域网IP)
    图-3为两个节点的web监控页面截图:
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-3 web监控页面
    下面设计一个实例来测试HDFS分布式的效率。
    设计思路:
    1、使用randomwriter利用Map/Reduce把数据随机的写到dfs中,大小1G
    2、分别使用1个DataNode和2个DataNode来对随机文件进行排序,比较执行上和时间消耗上的差异
    随机写入1G文件:
    指令:hadoop jar hadoop-mapreduce-examples-2.2.0.jar randomwriter hdfs://172.16.3.206:9000/sunyf/random
    执行如图-4所示:
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-4 写入文件
    对写入数据进行排序,1个从节点:
    指令:hadoop jar hadoop-mapreduce-examples-2.2.0.jar sort hdfs://172.16.3.206:9000/sunyf/random hdfs://172.16.3.206:9000/sunyf/randomoutput1
    执行如图-5所示:
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-5 1个节点排序
    对写入数据进行排序,2个从节点:
    指令:hadoop jar hadoop-mapreduce-examples-2.2.0.jar sort hdfs://172.16.3.206:9000/sunyf/random hdfs://172.16.3.206:9000/sunyf/randomoutput2
    执行如图-6所示:
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-6 2个节点排序
    效率分析:
    1个从节点耗时:29s GC time elapsed(ms) = 4243
    2个从节点耗时:33s GC time elapsed(ms) = 1129
    GC time elapsed(ms)表示: 通过JMX获取到执行map与reduce的子JVM总共的GC时间消耗。
    效率:分析分布式比单个节点耗时长是因为数据量太小,分布式计算还需要在数据合并处理上花费一定时间,数据越大,分布式计算效率越高。
    本来我们打算将randomwriter方法改写10G的文件大小,以便测试,但发现修改之后没有效果,网上也没有给出具体的结论,这里是一个疑点。
    举个例子:假如一个人可以在10天内做完做完的项目,交给一个10人的团队去做,那么这个团队可以在少于1天内做完吗?大多数情况下是不可能的,因为一个项目从最初的市场调研、需求分析、系统设计、数据库设计、软件开发、系统测试到最后的上线,一个团队去做的话,中间是需要沟通的、会产生内耗的。但是,假如一个人需要一年才可以完成的项目,你交给一个10人的团队去做,那么很可能会在一个月之内完成,因为只要分工明确,即便有内耗,也会提高很多的效率。
    MapReduce
    MapReduce 框架的核心步骤主要分两部分:Map 和Reduce。当你向MapReduce 框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map 任务,然后分配到不同的节点上去执行,每一个Map 任务处理输入数据中的一部分,当Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个Map 的输出汇总到一起并输出。
    网上有人用最简短的语言解释MapReduce:
    We want to count all the books in the library. You count up shelf #1, I count up shelf #2. That's map. The more people we get, the faster it goes.
    我们要数图书馆中的所有书。你数1号书架,我数2号书架,这就是“Map”。我们人越多,数书的速度就更快。
    Now we get together and add our individual counts. That's reduce.
    现在我们到一起,把所有人的统计数加在一起,这就是“Reduce”。
    MapReduce两种流程:
    1、Map-Reduce,如图-7所示:
    2、Map-Combine-Reduce,如图-8所示:
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-7 MapReduce流程图1 图-8 MapReduce流程图2
    combine作用:
    1、combine最基本是实现本地key的聚合,对map输出的key进行排序,value进行迭代
    2、combine还具有类似本地的reduce功能
    3、如果不用combine,那么,所有的结果都是reduce完成,效率会相对低下。使用combine,先完成的map会在本地聚合,提升速度。
    举例说明:
    Hello World Bye World
    Hello Hadoop GoodBye Hadoop
    Map和Reduce的执行见图-9至图-13的说明:
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-9 流程一Map
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-10 流程一Reduce
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-11 流程二Map
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-12 流程二Combine
    初识hadoop - 在路上的小海贼 - 笑傲江湖
    图-13 流程二Reduce
    Hadoop测试环境搭建,服务器等条件如表-1所示:
    表-1 搭建条件

    |

    服务器

    |

    JDK

    |

    Hadoop版本

    |
    |

    Linux服务器3台

    (Ubuntu 12.04.3)

    |

    OpenJDK 1.7

    |

    Hadoop 2.2.0

    |

    我们所使用的Hadoop测试环境,如表-2所示:

    表-2 测试环境

    |

    机器名

    |

    IP地址

    |

    作用

    |
    |

    hadoop01

    |

    172.16.3.206

    |

    NameNode、

    ResourceManager、

    SecondaryNameNode

    |
    |

    hadoop02

    |

    172.16.3.207

    |

    DataNode、

    NodeManager

    |
    |

    hadoop03

    |

    172.16.3.52

    |

    DataNode、

    NodeManager

    |
    常用命令:
    停止运行
    hadoop@hadoop01:/usr/local/hadoop/sbinstop-all.sh 初始化hdfs hadoop namenode -format -clusterid clustername 启动dfs hadoop@hadoop01:/usr/local/hadoop/sbin start-dfs.sh
    (JPS会出现NameNode,DataNode,SecondaryNameNode)
    启动yarn
    hadoop@hadoop01:/usr/local/hadoop/sbin$ start-yarn.sh
    (JPS会出现ResourceManager,NodeManager)
    HDFS上创建目录
    hadoop fs -mkdir hdfs://172.16.3.206:9000/sunyf
    将测试文件上传到HDFS
    hadoop fs -put 1.txt /sunyf/input
    将测试结果下载到本机路径
    hadoop fs -get /sunyf/ouput234/part-r-00000 /home/hadoop/sunyf/output/part-r-00000
    运行wordcount方法
    hadoop jar hadoop-mapreduce-examples-2.2.0.jar wordcount hdfs://172.16.3.206:9000/sunyf/input hdfs://172.16.3.206:9000/sunyf/output
    查看运行结果
    hadoop fs -cat hdfs://172.16.3.206:9000/sunyf/ouput/part-r-00000
    实例设计思路:
    1、选择一部长篇小说《哈利波特》英文版
    2、写程序过滤掉标点符号
    3、使用wordCount程序统计词频
    4、筛出人名做统计分析
    执行结果如图-14所示:

    初识hadoop - 在路上的小海贼 - 笑傲江湖

    图-14 人名出现频率统计图
    部分参考资料:
    http://hadoop.apache.org
    http://www.oschina.net/p/hadoop
    http://my.oschina.net/chainlong/blog/182944
    http://my.oschina.net/leejun2005/blog/82587
    http://blog.csdn.net/opennaive/article/details/7514146
    http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/
    http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
    http://blog.csdn.net/heyutao007/article/details/5890103

    相关文章

      网友评论

          本文标题:初识Hadoop

          本文链接:https://www.haomeiwen.com/subject/lyumqqtx.html