Hadoop简介
Hadoop是一个开源的、可运行于大规模集群上的分布式计算平台,它实现了MapReduce计算模型和分布式文件系统HDFS等功能,在业内得到了广泛的应用,同时也成为大数据的代名词,借助于Hadoop,程序员可以轻松的编写分布式并行程序,将其运行于计算机的集群上,完成海量数据的存储与处理分析。
Hadoop的特点
1.高可靠性
采用冗余数据存储方式,Hadoop采用分布式存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。
2.高效性
作为并行式分布平台,Hadoop采用分布式存储和分布式处理量大核心技术,能够高效地处理PB级数据。
3.高可扩展性
Hadoop的设计目标是可以高效稳定的运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点上。
4.高容错性
采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。
5.低成本
Hadoop采用廉价的计算机集群,成本比较低,普通用户也可以很容易的使用自己的电脑搭建Hadoop运行环境。
6.可以在Linux上运行
Hadoop是基于Java语言开发的,可以较好的运行在Linux平台上。
7.支持多种编程语言
比如C++, Python。
哪些公司在用Hadoop?
Facebook,百度,淘宝,华为,网易,中国移动等。
据悉,淘宝Hadoop集群拥有2860个节点,清一色基于英特尔处理器的x86服务器,其总存储容量高达50PB,实际使用量超过40PB,日均作业书高达15W,服务于阿里巴巴集团各部门,数据来源于各个部门产品的线上数据库(Oracle、Mysql)备份、系统日志、爬虫数据,每天在Hadoop集群运行各种MapRaduce任务,如数据魔方、量子统计、推荐系统、排行榜等。
百度作为全球最大的中文搜索引擎公司,对海量数据的存储和处理要求是非常高的。因此,百度选择了Hadoop,主要用于日志的存储和统计、网页数据的分析和挖掘、商业分析、在线数据反馈、网页类聚等。目前百度拥有3个Hadoop集群,计算机节点数量在700个左右,并且规模还在不断增加中,每天运行的MapReduce任务再3000个左右,处理数据约120TB/天。
华为是Hadoop的使用者,也是推动者,对Hadoop也有很大贡献。
Hadoop的版本
Hadoop大体分为两个版本,1.0和2.0。
在2.0之后的版本,完全不同于1.0的版本,包含HDFS Federation和YARN(Yet Another Resource Negotiator)两个系统。
Hadoop生态系统
经过多年的发展,目前已经包含了多个子项目。除了核心的HDFS和MapResource以外,Hadoop生态系统还包括ZooKeeper、HBase、Hive、Pig、Mahout、Sqoop、Flume、Ambari等功能组件。
在Hadoop2.0中新增了一些重要的组件,即HDFS HA和分布式资源调度管理框架YARN。
1.HDFS
GFS的开源实现,处理超大数据、流式处理、可运行在廉价商用服务器上等优点。
2.HBase
HBase是一个提供高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,一般采用HDFS作为其底层数据存储。
HBase是针对谷歌BigTable的开源实现,二者都采用了相同的数据模型,具有强大的非结构化数据存储能力。
HBase和传统关系数据库的一个重要区别就是,HBase采用基于列的存储,传统关系数据库基于行的存储。
HBase具有良好的横向扩展能力,可以通过不断增加廉价的服务器来增加其存储能力。
3.MapReduce
Hadoop MapReduce是针对谷歌的MapReduce的开源实现。是一种编程模型,用于大规模数据集(大于1TB)的并行运行,它将复杂的、运行于大规模集群上的并行计算过程高度地抽象到两个函数——Map和Reduce上,并且允许用户在不了解分布式系统底层细节的情况下开发并行应用程序。
MapReduce的核心思想就是“分而治之”,它把输入的数据集切分为若干个独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成,最后,通过整合各个节点的中间结果得到最终结果。
4.Hive
Hive是一个基于Hadoop的数据仓库工具,可以用于对Hadoop文件中的数据集进行数据整理、特殊查询、分析存储。
Hive的学习门槛较低,因为它提供了类似于关系数据库SQL语言的查询语言——Hive QL,可以通过Hive QL语句快速实现简单的MapReduce统计,Hive自身可以将Hive QL语句转换为MapReduce任务进行运行,而不必开发专门的MapReduce应用,因而十分适合数据仓库的统计分析。
5.Pig
Pig是一种数据流语言和运行环境,适用于使用Hadoop和MapReduce平台来查询大型半结构化数据集。
Pig的出现达达简化了Hadoop常见的工作任务,它在MapReduce的基础上创建更简单的过程语言抽象,为Hadoop应用程序提供了一种更加接近结构化查询语言(SQL)的接口。
当我们需要从大型数据集中搜索满足某个给定条件的记录时,采用Pig要比MapReduce具有明显的优势,在Pig中只需要编写一个单间的脚本在集群中自动并行处理与分发,但是在MapReduce中需要编写一个独立的应用程序。
6.Mahout
Mahout是Apache基金会下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,意在帮助开发人员更方便快捷的创建只能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。
此外,通过使用Apache Hadoop库,Mahout可以有效的扩展到云中。
7.ZooKeeper
ZooKeeper是针对谷歌Chubby的一个开源实现,是高效和可靠的协同工作系统,提供分布式锁之类的基本服务(如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等),用于构建分布式应用,减轻分布式应用程序所承担的调度任务。
ZooKeeper使用java编写,容易编程接入,它使用了一个和文件树结构相似的数据模型,可以使用Java或者C来进行编程接入。
8.Flume
Flume是Cloudera提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合、传输的系统。
Flume指针在日志系统中订制各类数据发送方,用于手机数据。同时,Flume提供对数据进行简单处理并写到各种数据接收方的能力。
9.Sqoop
Sqoop是SQL-to-Hadoop的缩写,主要用来在Hadoop和关系数据库之间交换数据,可以改进数据的互操作性。
通过Sqoop可以方便地将数据从Mysql、Oracle、PostgreSQL等关系数据库中导入Hadoop(也可以导入HDFS、HBase、Hive),或者将数据从Hadoop导入到数据库,使得传统关系数据库和Hadoop之间的数据迁移变得非常方便。
Sqoop主要通过JDBC(Java DataBase Connectivity)和关系数据库进行交互,理论上,支持JDBC的关系数据库都可以是Sqoop和Hadoop进行数据交互。
Sqoop是专门为大数据设计的,支持增量更新,可以将新纪录添加到最近一次导出的数据源上,或者指定上次修改的时间戳。
10.Ambari
Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的安装、部署、配置和管理。
Ambari目前已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、HBase、ZooKeeper、Sqoop。