就目前来说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程序。
代码语言:javascript复制SELECT word, COUNT(*) FROM doc LATERAL VIEW explode(split(text, ' ')) lTable
as word GROUP BY word;
pig
pig与hive类似,但是pig不管数据是不是关系型的,有无元数据,是否嵌套都可以进行操作,而且pig也可以在其他平台上进行使用。 定义了一种数据流语言——Pig Latin
代码语言:javascript复制 ① 加载数据 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
不用考虑不同软件间的版本匹配