Hadoop是一个能对大量数据进行分布式处理的软件框架。其基本的组成包括hdfs分布式文件系统和可以运行在hdfs文件系统上的
MapReduce编程模型,以及基于hdfs和MapReduce而开发的一系列上层应用软件。
hdfs是在一个网络中以流式数据访问模式来存储超大文件的跨越多台计算机的分布式文件系统。目前支持的超大文件的范围为从MB
级至PB级。
MapReduce是一种可用于数据处理的编程模型,基于MapReduce模型的程序本质上都是并行运行的。基于MapReduce编程模型的程序包括完
成数据提取的map函数,对中间结果进行处理的merge函数(merge函数一般是可选的),以及生成最终处理结果的reduce函数。经过map函
数和merge函数进行处理后的数据将是经过排序和分组的key-value,经过reduce对这些中间结果处理后生成最终的计算结果。其中map函
数都是并行运行的,每个map函数负责处理大文件的一个文件块,因此对于基于hdfs文件系统的大文件来说,map函数可以充分利用多台计
算机的处理能力,快速计算并出中间结果。
可以说hdfs和MapReduce是目前为止结合的非常完美的一个大数据处理框架。但是其也有一些缺点:
1.其虽然能够在较短的实际内处理PB级的大文件,但是它却不适合要求低延迟的ms级的快速响应的应用,如果要适应ms级响应的应用,那
么基于bigTable实现的Hbse和HyperTable更适合。
2.由于hdfs对文件的处理的初衷是以块的方式来存储大文件,每一个大文件的块信息都存储在namenode的内存中,因此对于过多的小文件
的存储将会大大增加namenode的存储容量,因此不适合。
3.hdfs和mapreduce是针对大文件数据进行读取并进行计算的框架,对于并行读写,或者并行写入的性能都是不高的。
基于hdfs和mapreduce的相关软件包括:
(1)Avro是一个数据序列化的系统,它可以提供:1) 丰富的数据结构类型;2) 快速可压缩的二进制数据形式;3) 存储持久数据的文件容器;4) 远程过程调用RPC;5) 简单的动态语言结合功能,Avro和动态语言结合后,读写数据文件和使用RPC协议都不需要生成代码,而代码生
成作为一种可选的优化只值得在静态类型语言中实现。
(2)Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。
(3)chukwa是一个开源的用于监控大型分布式系统的数据收集系统。这是构建在 hadoop 的 hdfs 和 map/reduce 框架之上的,继承了
hadoop 的可伸缩性和鲁棒性。
(4)Hama 是个计算框架,基于BSP(Bulk Synchronous Parallel大容量同步并行)计算技术,主要针对大规模科学的计算。
(5) HBase是一个分布式的、面向列的开源数据库,该技术来源于Chang et al所撰写的Google论文“Bigtable:一个结构化数据的分布式
存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。
(6) hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句
转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
(7) Mahout 提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实
现,包括集群、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。
(8) pig是一个基于hadoop的大规模数据分析平台,它提供的sql-like语言叫pig latin,该语言的编译器会把类sql的数据分析请求转换
为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口。
(9) ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
另外,值得一提的是基于BigTable而实现的HyperTable数据库目前在性能上(根据HyperTable官网提供的测试数据)已经远远超过了Hbase,是大规模多列结构化存储数据库的首选。