Hadoop介绍 (直奔主题)
开源的数据分析平台,解决了大数据(大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理)的可靠存储和处理。适合处理非结构化数据,包括HDFS,MapReduce基本组件与扩展组件Pig、Hive、Hbase、Sqoop、Flume、ZooKeeper和Spark等。
Hadoop基本组件
HDFS组件:提供了一种跨服务器的弹性数据存储系统,在由普通PC组成的集群上提供高可靠的文件存储,通过将块保存多个副本的办法解决服务器或硬盘坏掉的问题。
存储结构如下图:
MapReduce组件:通过简单的MApper和Reducer的抽象提供一个编程模型,可以在一个由几十台上百台的PC组成的不可靠集群上并发地,分布式地处理大量的数据集,而把并发、分布式(如机器间通信)和故障恢复等计算细节隐藏起来。而Mapper和Reducer的抽象,又是各种各样的复杂数据处理都可以分解为的基本元素。这样,复杂的数据处理可以分解为由多个Job(包含一个Mapper和一个Reducer)组成的有向无环图(DAG),然后每个Mapper和Reducer放到Hadoop集群上执行,就可以得出结果。
MapReduce工作原理图如下:
Hadoop 扩展组件
这些技术主要包括了Sqoop、Flume、Hive、Pig、ZooKeeper、Spark等。
Pig组件:Apache Pig也是Hadoop框架中的一部分,Pig提供类SQL语言(Pig Latin)通过MapReduce来处理大规模半结构化数据。而Pig Latin是更高级的过程语言,通过将MapReduce中的设计模式抽象为操作,如Filter,GroupBy,Join,OrderBy。
Hive组件:是一个基于 hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据。它把海量数据存储于 hadoop 文件系统,而不是数据库,但提供了一套类数据库的数据存储和处理机制,并采用 HQL (类 SQL )语言对这些数据进行自动化管理和处理。我们可以把 Hive 中海量结构化数据看成一个个的表,而实际上这些数据是分布式存储在 HDFS 中的。 Hive 经过对语句进行解析和转换,最终生成一系列基于 hadoop 的 map/reduce 任务,通过执行这些任务完成数据处理。
Hbase组件:
HBase是一个构建在HDFS上的分布式列存储系统
HBase是基于google BigTable模型开发的,典型的key/value系统;
HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;
从逻辑上讲,HBase将数据按照表、行和列进行存储。
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
与HDFS关系图如下:
Sqoop组件:Sqoop 工具是hadoop环境下连接关系数据库(如 :MySQL ,Oracle) ,和hadoop存储系统的桥梁,支持多种关系数据源和hive,hdfs,hbase的相互导入。一般情况下,关系数据表存在于线上环境的备份环境,需要每天进行数据导入,根据每天的数据量而言,sqoop可以全表导入,对于每天产生的数据量不是很大的情形可以全表导入,但是sqoop也提供了增量数据导入的机制。
Flume组件:Flume是Cloudera提供的日志收集系统,Flume支持在日志系统中定制各类数据发送方,用于从网站服务器上收集数据。同时Flume提供对数据进行简单处理,并写到HDFS,HBase等集中存储器中。Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
应用场景比如我们在做一个电子商务网站,然后我们想从消费用户中访问点特定的节点区域来分析消费者的行为或者购买意图. 这样我们就可以更加快速的将他想要的推送到界面上,实现这一点,我们需要将获取到的她访问的页面以及点击的产品数据等日志数据信息收集并移交给Hadoop平台上去分析.而Flume正是帮我们做到这一点。现在流行的内容推送,比如广告定点投放以及新闻私人定制也是基于次,不过不一定是使用FLume,毕竟优秀的产品很多,比如facebook的Scribe,还有Apache新出的另一个明星项目chukwa,还有淘宝Time Tunnel。
结构如下图所示:
ZooKeeper组件:一种集中服务,其用于维护配置信息,命名,提供分布式同步,以及提供分组服务。
ZooKeeper是一个典型的分布式数据一致性的解决方案,分布式程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调通知、集群管理、master选举、分布式锁、分布式队列等功能。ZooKeeper可以保证如下分布式一致性特性。
顺序一致性:从同一个客户端发起的事务请求,最终将严格按照其发起顺序被应用到ZooKeeper中。
原子性:更新操作要么成功要么失败,没有中间状态
单一视图:不管客户端连接哪一个服务器,客户端看到服务端的数据模型都是一致的(the same view of service)。
可靠性:一旦一个更新成功,那么那就会被持久化,直到客户端用新的更新覆盖这个更新。
实时性:Zookeeper仅保证在一定时间内,客户端最终一定能够从服务端读到最新的数据状态。
Spark组件:Spark是一个Apache项目,它被标榜为“快如闪电的集群计算”。它拥有一个繁荣的开源社区,并且是目前最活跃的Apache项目之一。
Spark提供了一个更快、更通用的数据处理平台。和Hadoop的MapReduce相比,Spark可以让你的程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍。去年,在100 TB Daytona GraySort比赛中,Spark战胜了Hadoop,它只使用了十分之一的机器,但运行速度提升了3倍。Spark也已经成为 针对 PB 级别数据排序的最快的开源引擎。注:MapReduce适合历史数据分析计算,Spark适合实时数据分析计算。
Cloudera:100%开源的商业化Apache Hadoop发行版本(CDH, Cloudera’s Distribution including Apache Hadoop)和相关的组件,其中包括了各类安全高效的企业级数据管理工具,如Hive, HBase,Oozie, Zookeeper等。
Hortonworks:Hortonworks是一家基于Hadoop提供大数据服务的公司,致力于开发Hadoop框架内软件,提升大数据的处理能力。开发了很多增强特性并提交至核心主干,这使得Hadoop能够在包括windows Server和Azure在内平台上本地运行。
MapR:获取更好的性能和易用性而支持本地Unix文件系统而不是HDFS。提供诸如快照、镜像或有状态的故障恢复等高可用性特性。领导着Apache Drill项目,是Google的Dremel的开源实现,目的是在Hadoop数据上执行类似SQL的查询以提供实时处理。
结合上面介绍来一张各组件整体结构图如下: