手记

快速认识Hadoop生态系统

就目前来说Hadoop已经成为处理大数据的问题的必备的组件,许多的大厂都已经在使用Hadoop软件栈处理自己的问题,那为什么Hadoop技术栈这么流行?

其实不外乎几个原因:首先Hadoop是完全开源的,虽然Oracle也可以搭建集群但是毕竟Oracle不是开源的,其次是当数据量大的时候Oracle的计算也会变得很慢。其次是Hadoop的社区比较活跃,这样解决问题的成本就会很低,因为很可能一些问题早已经被别人解决了。最后是Hadoop已经被很多企业投入使用,有了实战的经验,同时Hadoop有很广泛的大数据解决面。

Hadoop1.0和Hadoop2.0

要学习hadoop首先就要认识Hadoop的版本问题,因为网上很多资料都是很混淆的,有的介绍的其实是Hadoop1.0的问题,有的资料都搞混Hadoop1.0与Hadoop2.0,这对学习很不利。


360截图173705179310989.png

首先我们应该知道Hadoop1.0最大的问题是单点故障问题

Hadoop2.0就是针对Hadoop1.0的问题进行解决与优化。根据上图我们知道,Hadoop1.0只支持单一的计算模型MapReduce,Hadoop2.0加入Yarn资源调度器,可以支持多种类型的计算模型,Yarn同时可以给不同的计算任务进行计算资源的分配。

Hadoop2.0

  • HDFS 主要提供了分布式存储系统,供了高可靠性、高扩展性和高吞吐率的数据存储服务,同时基于对数据的操作基本属于顺序读取的流式读取,并且Hadoop可以承载草大文件的存储。

  • Yarn 主要负责集群的资源的管理,同时也可以进行资源的分配。

  • Mapreduce分布式计算框架,具有易于编程、高容错性和高扩展性等优点.

HDFS

360截图17290506114124152.png

HDFS的基本原理,就是将大文件切分为同样大小的数据块(128MB),进行冗余(3份)存储在不同的机器上。同时调控集群的负载均衡。

如上图所示,在Hadoop2.0中Namenode节点有两个为了解决但节点故障问题,不过现在的备份节点是属于静态绑定,如果两个节点都故障,就不得使用冷启动方式启动。

Yarn

360截图17571120377276.png

了解Hadoop1.0的一定知道其是通过JobTracker和TaskTracker进行任务与资源的分配,但是也存在单节点故障的问题。Yarn目前很复杂,但目前也符合主/从的模式,由上图知,ResourceManager管理着NodeManage从节点。具有良好的扩展性和高可用性。

MapReduce

20170730014216035.png

上图是MapReduce计算的过程,主要分为input,splitting,Mapping,shuffing,Reducing,output五个过程。但是其他复杂过程都被封装了,我们只需要进行编写Mapping和Reducing的过程。

Hadoop生态系统

360截图17900104136343.png

Hive

最初用于解决海量结构化的日志数据统计问题,其是构建在HDFS数据仓库上的,其底层就是MapReduce计算实现。Hive定义了一种HiveQL语言,可以使Hive通过简单的类SQL语句实现MapReduce程序。

SELECT word, COUNT(*) FROM doc  LATERAL VIEW explode(split(text, ' ')) lTable 
as word  GROUP BY word;

pig

pig与hive类似,但是pig不管数据是不是关系型的,有无元数据,是否嵌套都可以进行操作,而且pig也可以在其他平台上进行使用。
定义了一种数据流语言——Pig Latin

 ① 加载数据 input = load ‘/input/data’ as (line:chararray); 
 ② 将字符串分割成单词 words = foreach input generate                      flatten(TOKENIZE(line)) as word; 
 ③ 对单词进行分组 grpd = group words by word; 
 ④ 统计每组中单词数量 cntd = foreach grpd generate group,               COUNT(words); 
 ⑤ 打印结果 dump cntd;

Mahout

基于Hadoop的机器学习和数据挖掘的分布 式计算框架
mahout主要包含以下5部分

频繁挖掘模式:挖掘数据中频繁出现的项集。

聚类:将诸如文本、文档之类的数据分成局部相关的组。

分类:利用已经存在的分类文档训练分类器,对未分类的文档进行分类。

推荐引擎(协同过滤):获得用户的行为并从中发现用户可能喜欢的事物。

频繁子项挖掘:利用一个项集(查询记录或购物记录)去识别经常一起出现的项目。

Hbase

4951489-8dee031e87bde745.jpg

Table:表:类似于传统传统数据库中的表

Column Family:列簇:Table在水平方向有一个或者多个

Column Family 组成
一个Column Family中可以由任意多个Column组 成

Row Key: 行键 Table的主键 Table中的记录按照Row Key排序 Timestamp: 时间戳

每行数据均对应一个时间戳 版本号
Client:

包含访问HBase的接口,并维护cache来加快对HBase的访问。说白了,就是用来访问HBase的客户端。

HMaster:

这个东西是HBase的主节点,用来协调Client端应用程序和HRegionServer的关系,管理分配HRegion给HRegionserver服务器。

HRegionServer:

Hbase的从节点,管理当前自己这台服务器上面的HRegion,HRegion是Hbase表的基础单元组建,存储了分布式的表。HRegionserver负责切分在运行过程中变得过大的HRegion。

HRegion:

一个Table可以有多个HRegion,HBase使用rowKey将表水平切割成多个HRegion,每个HRegion都纪录了它的StartKey和EndKey(第一个HRegion的StartKey为空,最后一个HRegion的EndKey为空),由于RowKey是排序的,因而Client可以通过HMaster快速的定位每个RowKey在哪个HRegion中。HRegion由HMaster分配到相应的HRegionServer中,然后由HRegionServer负责HRegion的启动和管理,和Client的通信,负责数据的读(使用HDFS)。每个HRegionServer可以同时管理1000个左右的HRegion,出处请参看论文:BigTable(5 Implementation节):Each tablet server manages a set of tablets(typically we have somewhere between ten to a thousand tablets per tablet server))。

MemStore:

它是一个写缓存,数据先WAL[write ahead log](也就是HLog它是一个二进制文件,所有写操作都会先保证将数据写入这个Log文件后,才会真正更新MemStore,最后写入HFile中),在写入MemStore后,由MemStore根据一定的算法将数据Flush到底层HDFS文件中(HFile),一般而言,对于每个HRegion中的每个Column Family来说,有一个自己的MemStore。

StoreFile:

1个HStore,由一个MemStore和0~N个StoreFile组成。

HFile:

用于存储HBase的数据(Cell/KeyValue),在HFile中的数据是按RowKey、Column Family、Column排序,对于相同的数据单元,排序则按照时间戳(Timestamp)倒叙排列。

Zookeeper:

HBase内置有zookeeper,但一般我们会有其他的Zookeeper集群来监管master和regionserver,Zookeeper通过选举,保证任何时候,集群中只有一个活跃的HMaster,HMaster与HRegionServer 启动时会向ZooKeeper注册,存储所有HRegion的寻址入口,实时监控HRegionserver的上线和下线信息。并实时通知给HMaster,存储HBase的schema和table元数据,默认情况下,HBase 管理ZooKeeper 实例,Zookeeper的引入使得HMaster不再是单点故障。一般情况下会启动两个HMaster,非Active的HMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担。

Zookeeper

Zookeeper本质上是一个MapReduce程序。


20141108213346_932.png


连接Hadoop与传统数据库之间的桥梁  支持多种数据库,包括MySQL、DB2等  插拔式,用户可根据需要支持新的数据库  本质上是一个MapReduce程序  充分利用了MR分布式并行的特点,充分利用MR容错性

Oozie

如何对这些框架和作业进行统一管理和调度?
不同作业之间存在依赖关系(DAG);

周期性作业

定时执行的作业

作业执行状态监控与报警(发邮件、短信等)

360截图17290513287528.png

开源版本

Apache Hadoop

CDH

HDP

建议选择公司发行版,比如CDH或HDP

不用考虑不同软件间的版本匹配



作者:张晓天a
链接:https://www.jianshu.com/p/edde773746da


0人推荐
随时随地看视频
慕课网APP