Hadoop概述
Hadoop(http://hadoop.apache.org/)是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
一,Hadoop生态系统
Hadoop是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。
Hadoop的核心是HDFS和Mapreduce,hadoop2.0还包括YARN。
下图为hadoop的生态系统:
图1 HADOOP生态系统
Apache Ambari
Ambari是一个对Hadoop集群进行监控和管理的基于Web的系统。目前已经支持HDFS,MapReduce,Hive,HCatalog,HBase,ZooKeeper,Oozie,Pig和Sqoop等组件。详细参见:http://ambari.apache.org/
Apache Cassandra
Cassandra是一个分布式的NoSQL数据库。它基于multi-master模式,无单点失败,具有可扩展性。最早由Facebook开发用于存储收件箱等简单格式数据,后开源,被用于Twitter等知名网站。详细参见:http://cassandra.apache.org/
Apache Hive
Hive是 一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类似SQL一样的查询语言HiveQL来管理这些数据。详细参见:http://hive.apache.org/
Apache Pig
Pig是一个基于Hadoop的大数据分析平台,它提供了一个叫PigLatin的高级语言来表达大数据分析程序。详细参见:http://pig.apache.org/
Apache Avro
Avro是一个数据序列化系统。它提供了丰富的数据结构类型,快读可压缩的二进制数据格式,存储持久数据的文件容器,远程过程调用等。详细参见:http://avro.apache.org/
Apache Chukwa
Chukwa是一个用于监控大型分布式系统的的数据采集系统。它构建于Hadoop的HDFS和Map/Reduce框架之上,包含了一系列用于数据监控,分析和展示的灵活的强大工具集。它为日志系统提供了一整套解决方案。详细参见:http://chukwa.apache.org/
Apache Flume
Flume是一个高可靠的分布式海量日志采集,聚合和传输系统。它来源于Cloudera开发的日志收集系统。详细参见:http://flume.apache.org/
Apache HBase
HBase是一个分布式的,面向列的数据库。它基于Hadoop之上提供了类似BigTable的功能。详细参见:http://hbase.apache.org/
Apache Mahout
Mahout是一个机器学习领域的经典算法库,提供包括聚类,分类,推荐过滤,频繁子项挖掘等。详细参见:http://mahout.apache.org/
Apache Oozie
Oozie是一个工作流调度系统,用于管理Hadoop里的job。它可以把多个Map/Reduce作业组合到一个逻辑工作单元来完成指定目标。详细参见:http://oozie.apache.org/
Apache Sqoop
Sqoop是一个Hadoop和关系型数据库之间的数据转移工具。可将关系型数据库中的数据导入到Hadoop的HDFS中,也可将HDFS中的数据导进到关系型数据库中。详细参见:http://sqoop.apache.org/
Apache ZooKeeper
ZooKeeper是一个针对大型分布式系统的可靠协调系统,提供包括配置维护,名字服务,分布式同步和组服务等功能。Hadoop的管理就是用的ZooKeeper。详细参见:http://zookeeper.apache.org/
二,Hadoop核心
1,HDFS(Hadoop分布式文件系统)
源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版。是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
图2 HDFS文件管理系统
client:切分文件;访问HDFS;与NameNode交互,获取文件位置信息;与DataNode交互,读取和写入数据。
NameNode:Master节点,在hadoop1.X中只有一个,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户端请求。
DataNode:Slave节点,存储实际的数据,汇报存储信息给NameNode。
Secondary NameNode:辅助NameNode,分担其工作量;定期合并fsimage和fsedits,推送给NameNode;紧急情况下,可辅助恢复NameNode,但Secondary NameNode并非NameNode的热备。
2,MapReduce分布式计算
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
MapReduce的经典案例是统计文章中单词出现的次数(WordCount),原理图如图3、图4:
图片3, WordCount统计词频示意图
图片4, WordCount统计一篇文章词频示意图
3,Yarn资源管理框架
图片5, Hadoop 1 作业调度机制
图片6, Hadoop 2 作业调度机制
4,Hadoop 常用组件
三,Hadoop经典论文(云盘下载)
谷歌三大核心技术(一)Google File System
谷歌三大核心技术(二)Google MapReduce
谷歌三大核心技术(三)Google_BigTable
四,Hadoop与云计算
云计算由位于网络上的一组服务器把其计算、存储、数据等资源以服务的形式提供给请求者以完成信息处理任务的方法和过程。
Hadoop是一种分布式系统基础架构,可以作为通用的云计算平台, 其中HDFS分布式文件系统存储海量数据, MapReduce实现分布式计算,YARN负责资源管理和调度等。