1.1 产生背景
HADOOP最早起源于Nutch。Nutch要构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,随着抓取网页数量的增加,如何解决数十亿网页的存储和索引成为问题。2003年开始谷歌陆续发表的三篇论文为该问题提供了可行的解决方案。分布式文件系统(GFS),可用于处理海量网页的存储;分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题;BigTable数据库提供了一种可以在超大数据集中进行实时CRUD操作的功能。Nutch开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,2008年1月,HADOOP成为Apache顶级项目,迎来了它的快速发展期。
1.2 Hadoop概念
1.2.1 介绍
Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架。它支持在商品硬件构建的大型集群上运行的应用程序。Hadoop是根据Google公司发表的MapReduce和Google档案系统的论文自行实作而成。Hadoop是一套开源的软件平台,利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理。诞生于2006年。Hadoop的官网:http://hadoop.apache.org/; Hadoop与Google一样,都是小孩命名的,是一个虚构的名字,没有特别的含义。从计算机专业的角度看,Hadoop是一个分布式系统基础架构,由Apache基金会开发。Hadoop的主要目标是对分布式环境下的“大数据”以一种可靠、高效、可伸缩的方式处理。Hadoop框架透明地为应用提供可靠性和数据移动。它实现了名为MapReduce的编程范式:应用程序被分割成许多小部分,而每个部分都能在集群中的任意节点上执行或重新执行。Hadoop还提供了分布式文件系统,用以存储所有计算节点的数据,这为整个集群带来了非常高的带宽。MapReduce和分布式文件系统的设计,使得整个框架能够自动处理节点故障。它使应用程序与成千上万的独立计算的电脑和PB级的数据。
1.2.2 核心组件
- HDFS:一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。构建于廉价计算机集群之上的分布式文件系统,低成本、高可靠性、高吞吐量。
- MapReduce: 一种用于并行处理大型数据集的基于YARN的系统。分布式编程模型和软件框架,用于在集群上编写对海量数据处理的并行化程序
- YARN:作业调度和集群资源管理的框架。
- Common: 支持其他Hadoop模块的常用工具。整体架构提供基础支撑性功能,主要包括了文件系统、RPC和数据串行化库
- Hive: 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行。 其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析。数据仓库工具,将结构化数据文件映射为库表,并提供强大的类SQL查询功能
- Hbase:分布式的、面向列的数据库,是一个适合于非结构化海量数据存储的数据库
- Pig:适合海量数据分析的脚本语言工具,包括了一个数据分析语言和支持的运行环境
- Sqoop:是一款开源的工具,主要用于在 Hadoop、 Hive 与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如:MySQL,Oracle等)中的数据导进到Hadoop 的HDFS中,也可以将HDFS的数据导进到关系型数据库中。在Hadoop与传统数据库间进行数据交换的工具,支持两者之间的数据导入和导出
- Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统
- Zookeeper:是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。维护Hadoop集群的配置和命名信息,并提供分布式锁同步功能和群组管理功能
- Ambari:安装、管理和监控Hadoop集群的Web界面工具。目前已支持大部分组件的管理,就Ambari的作用来说,就是创建、管理、监视 Hadoop 的集群
1.2.3 hadoop1.X和hadoop2.X:
Hadoop1.X | Hadoop2.X |
---|---|
Hadoop中的Mapreduce同时处理业务逻辑运算和资源调度,耦合性较大。 | 在Hadoop2.X 新增加了 Yarn,Yarn只负责资源调度,Mapreduce只负责计算 |
1.3 Hadoop序列化
1.3.1 定义
序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。
反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。
1.3.2 原因
一般来说,“活的”对象只生存在内存里,关机断电就没有了。而且“活的”对象只能由本地的进程使用,不能被发送到网络上的另外一台计算机。然而序列化可以存储“活的”对象,可以将“活的”对象发送到远程计算机。
1.3.3 Hadoop序列化特点:
- 紧凑:高效使用存储空间。
- 快速:读写数据的额外开销小。
- 可扩展:随着通信协议的升级而可升级
- 互操作:支持多语言的交互。