Hadoop技术资料整理我爱编程数据相关

Hadoop概论浅学

2016-12-03  本文已影响133人  mrlevo520

Hadoop生态圈

这里写图片描述

可以把hadoop想象成一个很大的生态圈(本来就是),或者说想象成一个动物园吧,之后的东西就比较好理解了。(我也不知道为啥python的教程一般都是动物做封面,难道已经暗喻加入了动物园生态圈了?)


HDFS

HDFS(Hadoop Distributed File System)是一个分布式文件系统,是谷歌的GFS山寨版本。它具有高容错性并提供了高吞吐量的数据访问,非常适合大规模数据集上的应用,它提供了一个高度容错性和高吞吐量的海量数据存储解决方案。

HDFS架构

这里写图片描述

MapReduce

MapReduce 是现今一个非常流行的分布式计算框架,它被设计用于并行计算海量数据。MapReduce 框架的核心步骤主要分两部分:Map 和Reduce。当你向MapReduce 框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map 任务,然后分配到不同的节点上去执行,每一个Map 任务处理输入数据中的一部分,当Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个Map 的输出汇总到一起并输出。从高层抽象来看,MapReduce的数据流图如下图所示:

这里写图片描述

MapReduce流程图

这里写图片描述

MapReduce工作流程

补充


Map过程:

Step1:每个输入分片会让一个map任务来处理,默认情况下,以HDFS的一个块的大小(默认为64M)为一个分片,当然我们也可以设置块的大小。map输出的结果会暂且放在一个环形内存缓冲区中(该缓冲区的大小默认为100M,由io.sort.mb属性控制),当该缓冲区快要溢出时(默认为缓冲区大小的80%,由io.sort.spill.percent属性控制),会在本地文件系统中创建一个溢出文件,将该缓冲区中的数据写入这个文件;

Step2:在写入磁盘之前,线程首先根据reduce任务的数目将数据划分为相同数目的分区,也就是一个reduce任务对应一个分区的数据。这样做是为了避免有些reduce任务分配到大量数据,而有些reduce任务却分到很少数据,甚至没有分到数据的尴尬局面。其实分区就是对数据进行hash的过程。然后对每个分区中的数据进行排序,如果此时设置了Combiner,将排序后的结果进行Combia操作,这样做的目的是让尽可能少的数据写入到磁盘;

Step3:当map任务输出最后一个记录时,可能会有很多的溢出文件,这时需要将这些文件合并,目的是为了尽量减少每次写入磁盘的数据量和尽量减少下一复制阶段网络传输的数据量。


Reduce过程

Step1:Reduce会接收到不同map任务传来的数据,并且每个map传来的数据都是有序的。如果reduce端接受的数据量相当小,则直接存储在内存中(缓冲区大小由mapred.job.shuffle.input.buffer.percent属性控制,表示用作此用途的堆空间的百分比),如果数据量超过了该缓冲区大小的一定比例(由mapred.job.shuffle.merge.percent决定),则对数据合并后溢写到磁盘中;

Step2:随着溢写文件的增多,后台线程会将它们合并成一个更大的有序的文件,这样做是为了给后面的合并节省时间。其实不管在map端还是reduce端,MapReduce都是反复地执行排序,合并操作;

Step3:合并的过程中会产生许多的中间文件(写入磁盘了),但MapReduce会让写入磁盘的数据尽可能地少,并且最后一次合并的结果并没有写入磁盘,而是直接输入到reduce函数。


Hive

Hive是Facebook开发的构建于Hadoop集群之上的数据仓库应用,它提供了类似于SQL语法的HQL语句作为数据访问接口,这使得普通分析人员的应用Hadoop的学习曲线变小。

HIve架构

这里写图片描述

客户端组件

服务端组件


HBase

Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。

这里写图片描述

Pig

一种操作hadoop的轻量级脚本语言,是一种数据流语言,用来快速轻松的处理巨大的数据。Pig可以非常方便的处理HDFS和HBase的数据,和Hive一样,Pig可以非常高效的处理其需要做的,通过直接操作Pig查询可以节省大量的劳动和时间。当你想在你的数据上做一些转换,并且不想编写MapReduce jobs就可以用Pig.

这里写图片描述

Hive .vs Pig

  1. Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使 其成为Hadoop与其他BI工具结合的理想交集。
  2. Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的 应用程序。
  3. Pig相比Hive相对轻量,它主要的优势是相比于直接使用Hadoop Java APIs可大幅削减代码量。正因为如此,Pig仍然是吸引大量的软件开发人员。
  4. Hive和Pig都可以与HBase组合使用,Hive和Pig还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单.

Hive .vs Hbase

  1. Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。
  2. 想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop.
  3. Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。

Mahout

Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。AMahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。

这里写图片描述 这里写图片描述

Zookeeper

Zookeeper 作为 Hadoop 项目中的一个子项目,一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,是 Hadoop 集群管理的一个必不可少的模块,它主要用来控制集群中的数据,如它管理 Hadoop 集群中的NameNode,还有 Hbase 中 Master Election、Server 之间状态同步等。

这里写图片描述

Oozie

Oozie是一个工作流引擎服务器,用于运行Hadoop Map/Reduce和Pig 任务工作流.同时Oozie还是一个Java Web程序,运行在Java Servlet容器中,如Tomcat.

这里写图片描述

最后

至此,hadoop的生态圈介绍的差不多了,对于想深入的话,这些是远远不够的,我这个只是为了吃早饭的时候,可以看一下,记一下各个部分功能大体,也算是一种初步了解,希望对你也有些帮助


致谢

@yeruby--对MapReduce过程的理解
@石山园--Hadoop入门进阶课程5
@石山园--Hadoop入门进阶课程8
@lifuxiangcaohui--Hive总结(九)Hive体系结构
@天戈朱--Hive(一):架构及知识体系
@u011308691--Hive初识功能架构
@转--JobTracker和TaskTracker概述
@zhoubl668--Mahout推荐算法API详解
@转--分布式服务框架 Zookeeper
@清雾沁仙--Hadoop Oozie 学习笔记(六) Hadoop Oozie概述

上一篇 下一篇

猜你喜欢

热点阅读