Hadoop生态系统
内容总结
HDFS(Hadoop分布式文件系统)
源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版。
是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
HDFS主要有以下几个部分组成:
Client:切分文件;访问HDFS;与NameNode交互,获取文件位置信息;与DataNode交互,读取和写入数据。
NameNode:Master节点,在hadoop1.X中只有一个,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户端请求。对于大型的集群来讲,Hadoop1.x存在两个最大的缺陷:
1)对于大型的集群,namenode的内存成为瓶颈,namenode的扩展性的问题;
2)namenode的单点故障问题。
针对以上的两个缺陷,Hadoop2.x以后分别对这两个问题进行了解决。
对于缺陷1)提出了Federation namenode来解决,该方案主要是通过多个namenode来实现多个命名空间来实现namenode的横向扩张。从而减轻单个namenode内存问题。
针对缺陷2),hadoop2.X提出了实现两个namenode实现热备HA的方案来解决。其中一个是处于standby状态,一个处于active状态。
DataNode:Slave节点,存储实际的数据,汇报存储信息给NameNode。
Secondary NameNode:辅助NameNode,分担其工作量;定期合并fsimage和edits,推送给NameNode;紧急情况下,可辅助恢复NameNode,但Secondary NameNode并非NameNode的热备。
目前,在硬盘不坏的情况,我们可以通过secondarynamenode来实现namenode的恢复。
内容介绍
《Hadoop生态系统》本书每一章都介绍了不同的主题(例如核心技术或数据传输),并且解释了为什么特定组件适用或不适用特定的需求。对于数据处理来说,使用Hadoop是一个全新的挑战,但如果有了这本便利的参考书,你将很容易领会使用Hadoop的精妙所在。
主要包括如下主题:核心技术,Hadoop分布式文件系统(HDFS)、MapReduce、YARN和Spark。数据库和数据管理,Cassandra、HBase、MongoDB和Hive。序列化,Avro、JSON和Parquet。管理和监视,Puppet、Chef、Zookeeper和Oozie。分析辅助,Pig、Mahout和MLLib。数据传输,Scoop、Flume、distcp和Storm。安全、访问控制和审计,Sentry、Kerberos和Knox。云计算和虚拟化,Serengeti、Docker和Whirr。
目录
- 前言 1
- 第1章关键技术 7
- 1.1 Hadoop分布式文件系统(HDFS) 8
- 1.2 MapReduce . 11
- 1.3 YARN 13
- 1.4 Spark . 15
- 第2章数据库及数据管理 17
- 2.1 Cassandra .19
- 2.2 HBase 21
- 2.3 Accumulo .24
- 2.4 Memcached . 26
- 2.5 Blur .28
- 2.6 Solr . 30
- 2.7 MongoDB 32
- 2.8 Hive 34
- 2.9 Spark SQL ( 前身是 Shark) 36
- 2.10 Giraph . 38
- 第3章序列化 41
- 3.1 Avro 43
- 3.2 JSON 46
- 3.3 Protocol Buffers (protobuf) . 48
- 3.4 Parquet 50
- 第4章管理与监控. 53
- 4.1 Ambari 54
- 4.2 HCatalog 56
- 4.3 Nagios 58
- 4.4 Puppet 59
- 4.5 Chef 61
- 4.6 ZooKeeper 63
- 4.7 Oozie . 66
- 4.8 Ganglia . 68
- 第5章分析辅助 . 69
- 5.1 MapReduce 接口69
- 5.2 分析库 70
- 5.3 Pig 72
- 5.4 Hadoop Streaming 74
- 5.5 Mahout 76
- 5.6 MLLib 78
- 5.7 Hadoop 图像处理接口(HIPI) 80
- 5.8 SpatialHadoop 81
- 第6章数据传输 . 83
- 6.1 Sqoop .85
- 6.2 Flume .87
- 6.3 DistCp 89
- 6.4 Storm . 90
- 第7章安全、访问控制和审计 93
- 7.1 Sentry. 95
- 7.2 Kerberos 97
- 7.3 Knox 99
- 第8章云计算和虚拟化 101
- 8.1 Serengeti. 103
- 8.2 Docker105
- 8.3 Whirr 107
Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之间传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。其中主要利用的是MP中的Map任务来实现并行导入,导出。Sqoop发展到现在已经出现了两个版本,一个是sqoop1.x.x系列,一个是sqoop1.99.X系列。对于sqoop1系列中,主要是通过命令行的方式来操作。 sqoop1 import原理:从传统数据库获取元数据信息(schema、table、field、field type),把导入功能转换为只有Map的Mapreduce作业,在mapreduce中有很多map,每个map读一片数据,进而并行的完成数据的拷贝。 sqoop1 export原理:获取导出表的schema、meta信息,和Hadoop中的字段match;多个map only作业同时运行,完成hdfs中数据导出到关系型数据库中。 Sqoop1.99.x是属于sqoop2的产品,该款产品目前功能还不是很完善,处于一个测试阶段,一般并不会应用于商业化产品当中。
MapReduce计算框架发展到现在有两个版本的MapReduce的API,针对MR1主要组件有以下几个部分组成: (1)JobTracker:Master节点,只有一个,主要任务是资源的分配和作业的调度及监督管理,管理所有作业,作业/任务的监控、错误处理等;将任务分解成一系列任务,并分派给TaskTracker。 (2)TaskTracker:Slave节点,运行Map Task和Reduce Task;并与JobTracker交互,汇报任务状态。 (3)Map Task:解析每条数据记录,传递给用户编写的map(),并执行,将输出结果写入本地磁盘。 (4)Reducer Task:从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行。 在这个过程中,有一个shuffle过程,对于该过程是理解MapReduce计算框架是关键。该过程包含map函数输出结果到reduce函数输入这一个中间过程中所有的操作,称之为shuffle过程。在这个过程中,可以分为map端和reduce端。