第1章 hadoop - baidu

7
1Hadoop 概述 Hadoop 是一个开发和运行处理大规模数据的软件平台,是 Apache 的一个用 Java 语言 实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。 1.1 Hadoop 起源 Hadoop 框架中最核心设计就是:HDFS MapReduceHDFS 提供了海量数据的存储, MapReduce 提供了对数据的计算。 1.1.1 Google Hadoop 模块 Google 的数据中心使用廉价的 Linux PC 机组成集群,在上面运行各种应用。即使是分 布式开发的新手也可以迅速使用 Google 的基础设施。Hadoop 核心组件与 Google 对应的组 件对应关系如表 1-1 所示。 1-1 Google Hadoop 对应模块 Google 功能描述 对应 Hadoop 模块 GFS 分布式文件系统(Google File System ),隐藏下层负载均衡、冗余复制等细 节,对上层程序提供一个统一的文件系统 API 接口。Google 根据自己的需求对 它进行了特别优化,包括超大文件的访问、读操作比例远超过写操作、PC 极易发生故障造成节点失效等。GFS 把文件分成 64MB 的块,分布在集群的机 器上,使用 Linux 的文件系统存放,同时每块文件至少有 3 份以上的冗余。中 心是一个 Master 节点,根据文件索引找寻文件块 HDFS MapReduce Google 发现大多数分布式运算可以抽象为 MapReduce 操作。Map 是把输入 Input 分解成中间的 Key-Value 对,Reduce Key-Value 合成最终输出 Output这两个函数由程序员提供给系统,下层设施把 Map Reduce 操作分布在集群 上运行,并把结果存储在 GFS MapReduce BigTable 一个大型的分布式数据库,这个数据库不是关系式的数据库。像它的名字一 样,就是一个巨大的表格,用来存储结构化的数据 HBase 1.1.2 为什么会有 Hadoop 随着互联网快速的发展,产生的日志数量级的增加,大量的日志给公司带来了很大的 挑战。如日志存储问题、海量日志分析的效率问题、成本问题等。 下面我们来分析个问题。 一般网站把用户的访问行为记录以 Apache 日志的形式记录下来,这些日志中包含了用

Upload: others

Post on 17-Oct-2021

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 第1章 Hadoop - Baidu

第1章 Hadoop 概述

Hadoop 是一个开发和运行处理大规模数据的软件平台,是 Apache 的一个用 Java 语言

实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。

1.1 Hadoop 起源

Hadoop 框架中最核心设计就是:HDFS 和 MapReduce。HDFS 提供了海量数据的存储,

MapReduce 提供了对数据的计算。

1.1.1 Google 与 Hadoop 模块

Google 的数据中心使用廉价的 Linux PC 机组成集群,在上面运行各种应用。即使是分

布式开发的新手也可以迅速使用 Google 的基础设施。Hadoop 核心组件与 Google 对应的组

件对应关系如表 1-1 所示。

表 1-1 Google 与 Hadoop 对应模块

Google 功能描述 对应 Hadoop 模块

GFS

分布式文件系统(Google File System),隐藏下层负载均衡、冗余复制等细

节,对上层程序提供一个统一的文件系统 API 接口。Google 根据自己的需求对

它进行了特别优化,包括超大文件的访问、读操作比例远超过写操作、PC 机

极易发生故障造成节点失效等。GFS 把文件分成 64MB 的块,分布在集群的机

器上,使用 Linux 的文件系统存放,同时每块文件至少有 3 份以上的冗余。中

心是一个 Master 节点,根据文件索引找寻文件块

HDFS

MapReduce

Google 发现大多数分布式运算可以抽象为 MapReduce 操作。Map 是把输入

Input 分解成中间的 Key-Value 对,Reduce 把 Key-Value 合成最终输出 Output。

这两个函数由程序员提供给系统,下层设施把 Map 和 Reduce 操作分布在集群

上运行,并把结果存储在 GFS 上

MapReduce

BigTable一个大型的分布式数据库,这个数据库不是关系式的数据库。像它的名字一

样,就是一个巨大的表格,用来存储结构化的数据HBase

1.1.2 为什么会有 Hadoop

随着互联网快速的发展,产生的日志数量级的增加,大量的日志给公司带来了很大的

挑战。如日志存储问题、海量日志分析的效率问题、成本问题等。

下面我们来分析个问题。

一般网站把用户的访问行为记录以 Apache 日志的形式记录下来,这些日志中包含了用

Page 2: 第1章 Hadoop - Baidu

2   第1章 Hadoop 概述

户访问网站的所有信息,下面列举关键的信息,关键字段如下。

客服端 IP 用户标示 访问时间 访问 URL 关联的 URL 状态  流量 代理

client_ip user_ip access_time  url refrence status page_size agent

因为需要统一对数据进行离线计算,所以常常把它们全部移到同一个地方,如 Oracle

数据库等,每天产生的日志量大概计算一下,如下所示。

网站请求数:1000 万条 / 天 ❑

每天日志大小:450 字节 / 行 × 1000 万条 = 4.2 GB ❑

日志存储周期:2 年 ❑

一天产生 4.5 GB 日志,2 年需要 4.2 GB × 2 × 365 = 3.0 TB。

怎么来解决 3.0 TB 的数据备份和容错的问题?解决方案如下

1)为了方便系统命令查看日志,不压缩,总共需要 3.0 TB 空间,刚好有一些 2U 的服

务器,每台 1 TB 的磁盘空间。

2)为了避免系统盘坏掉影响服务器使用,对系统盘做 Raid1。

3)为了避免其他存放数据的盘坏掉导致数据无法恢复,对剩下的盘做 Raid5。

所有的数据都汇聚到这几台 LogBackUp 服务器上了。有了 LogBackUp 服务器,离线

统计就可以全部在这些服务器上进行了。在这套架构上,用 wc、grep、sort、uniq、awk、

sed 等系统命令,完成了很多的统计需求,比如统计访问频率较高的 client_ip,某个新上线

的页面的 reference 主要是哪些网站。

当公司业务迅猛发展,网站流量爆发增长,日志量也就成指数级增长,日志对于一个

互联网公司来说是非常重要的,互联网公司可以通过分析日志来获取用户的行为,如推荐

系统、淘宝的用户买卖行为分析等。假如现在的日志量计算如下所示。

日志总行数:10 亿 / 天 ❑

每天日志大小:450 字节 / 行 × 10 亿 = 420 GB ❑

日志种类:5 种 ❑

1 天产生 420 GB 日志,2 年需要 420 GB × 2 × 365 = 300 TB, 这么大的数据量怎么来

存储和分析?

1.1.3 Hadoop 版本介绍

最新发布的 Apache Hadoop 版本如图 1-1 所示。一些 Hadoop 入门者会问:这个版本的

功能有哪些?基于哪个版本?后续的版本是什么?要解释这一点,我们应该从 Apache 项目

发布的一些基本知识开始分析。一般来说,Apache 项目的新功能在主干(trunk)代码上开

发。有时候,很大的特性也会有自己的开发分支(branch),它们期望后续会并入 trunk。新

功能通常是在 trunk 发布之前就有的,一般质量或稳定性没有太大保证。候选的分支会定期

从主干分支上分离出来发布。一旦一个候选分支发布,它通常停止获得新的功能。如果有

bug 修复,经过投票后,会针对这个特定的分支再发布一个新版本。社区的任何成员可以创

建一个版本分支,并可随意命名。

Page 3: 第1章 Hadoop - Baidu

1.2 Hadoop生态系统   3

Trunk development (source of new features)

0.20.1 0.20.2

0.210.23.1

0.22

0.20.203

2009 2010 2011 2012

0.20.204 1.0

“0.20.security”

“0.20.append”

0.23

0.20.205

图 1-1 Hadoop 版本图

注意 目前使用比较多的版本是 v-0.20.2、v-1.0.3 或 v-1.0.4。Hadoop 2.0 版本还处于测试

阶段。目前 Hadoop 只能在 Linux 环境下运行。JDK 版本要在 1.5 以上。

1.2 Hadoop 生态系统

当下 Hadoop 已经成长为一个庞大的体系,只要和海量数据相关的领域,都有 Hadoop

的身影。图 1-2 是一个 Hadoop 生态系统的图谱,详细列举了在 Hadoop 这个生态系统中出

现的各种数据工具。

图 1-2 Hadoop 生态系统

这一切,都起源自 Web 数据爆炸时代的来临。Hadoop 生态系统的功能以及对应的开源

工具说明如下。

1)海量数据怎么存,当然是用分布式文件系统 —— HDFS。

2)数据怎么用呢,分析、处理 MapReduce 框架,让你通过编写代码来实现对大数据

的分析工作。

Page 4: 第1章 Hadoop - Baidu

4   第1章 Hadoop 概述

3)非结构化数据(日志)收集处理 —— Fuse、WebDAV、Chukwa、Flume 和 Scribe。

4)数据导入 HDFS 中,RDBSM 也可以加入 HDFS 的狂欢了 —— HIHO、Sqoop。

5)MapReduce 太麻烦,用熟悉的方式操作 Hadoop 里的数据 —— Pig、Hive、 Jaql。

6)让你的数据可见 —— Drilldown、 Intellicus。

7)用高级语言管理你的任务流 —— Oozie、Cascading。

8)Hadoop 自己的监控管理工具 —— Hue、Karmasphere、 Eclipse Plugin、Cacti、 Ganglia。

9)数据序列化处理与任务调度 —— Avro、ZooKeeper。

10)更多构建在 Hadoop 上层的服务 —— Mahout、 Elastic Map Reduce。

11)OLTP 存储系统 —— HBase。

12)基于 Hadoop 的实时分析—— Impala。

1.3 Hadoop 常用项目介绍

随着 Hadoop 的使用越来越多,基于 Hadoop 开发的工具也越来越多,下面介绍常用的

一些工具。

1.Hive

Hive 是 Facebook 捐献给 Apache 的一个项目,Hive 是基于 Hadoop 的一个数据仓库工

具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,可以将

SQL 语句转换为 MapReduce 任务进行运行。 其优点是学习成本低,可以通过类 SQL 语句

快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的

统计分析。

Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来

进行数据提取转化加载(Extract Transform and Load ,ETL),这是一种可以存储、查询和

分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为

HQL,它允许熟悉 SQL 的用户查询数据。同时,允许熟悉 MapReduce 的开发者开发自定

义的 Mapper 和 Reducer,以处理内建的 Mapper 和 Reducer 无法完成的复杂的分析工作。

2.Pig

Pig 是 Yahoo 捐献给 Apache 的一个项目,目前还在 Apache 孵化器(incubator)阶段,

目前版本是 v0.5.0。

Pig 是一个基于 Hadoop 的大规模数据分析平台,它提供的 SQL-like 语言叫 Pig Latin,

该语言的编译器会把类 SQL 的数据分析请求转换为一系列经过优化处理的 MapReduce 运

算。Pig 为复杂的海量数据并行计算提供了一个简易的操作和编程接口。

3.Mahout

Mahout 是 ASF(Apache Software Foundation)旗下的一个开源项目,提供一些可扩展

的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。

Apache Mahout 项目已经发展第四个年头,目前已经有了三个公共发行版本。Mahout 包含

Page 5: 第1章 Hadoop - Baidu

1.3 Hadoop常用项目介绍    5

许多实现,包括集群、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop

库,Mahout 可以有效地扩展到云中。

Mahout 算法库提供了以下一些功能。

支持 MapReduce 的集群实现包括 K-means、模糊 K-means、Canopy、Dirichlet 和 ❑

Mean-Shift;

Distributed Naive Bayes 和 Complementary Naive Bayes 分类实现; ❑

针对进化编程的分布式适用性功能; ❑

Matrix 和矢量库等。 ❑

4.Flume

Flume 是 Cloudera 提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和

传输的系统。Flume 支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume

提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

Flume 提供了从 console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、

syslog(syslog 日志系统,支持 TCP 和 UDP 等两种模式)、exec(命令执行)等数据源上收

集数据的能力。

Flume 采用多 Master 的方式。为了保证配置数据的一致性,Flume 引入 ZooKeeper,

用于保存配置数据。ZooKeeper 本身可保证配置数据的一致性和高可用,另外,在配置数据

发生变化时,ZooKeeper 可以通知 Flume Master 节点。Flume Master 间使用 gossip 协议同

步数据。

Apache 孵化的 Flume 又称 FlumeNG。

5.Sqoop

Sqoop 是一个用来将 Hadoop 和关系型数据库中的数据相互转移的工具,可以将一个关

系型数据库(如 MySQL、Oracle、Postgres 等)中的数据导入 Hadoop 的 HDFS 中,也可以

将 HDFS 的数据导入关系型数据库中。

6.Oozie

Oozie 是一种 Java Web 应用程序,它运行在 Java Servlet 容器(即 Tomcat)中,并使用

数据库来存储以下内容:

工作流定义; ❑

当前运行的工作流实例,包括实例的状态和变量。 ❑

Oozie 工作流是放置在控制依赖 DAG(Direct Acyclic Graph,有向无环图)中的一组动

作(如 Hadoop 的 Map/Reduce 作业、Pig 作业等),其中指定了动作执行的顺序。我们会使

用 hPDL(一种 XML 流程定义语言)来描述这个图。

hPDL 是一种很简洁的语言,只会使用少数流程控制和动作节点。控制节点会定义执行

的流程,并包含工作流的起点和终点(start、end 和 fail 节点)以及控制工作流执行路径的

机制(decision、fork 和 join 节点)。动作节点是一些机制,通过它们工作流会触发执行计算

或者处理任务。Oozie 为以下类型的动作提供支持: Hadoop MapReduce、Hadoop 文件系统、

Page 6: 第1章 Hadoop - Baidu

6   第1章 Hadoop 概述

Pig、Java 和 Oozie 的子工作流(SSH 动作已经从 Oozie Schema 0.2 之后的版本中移除了)。

所有由动作节点触发的计算和处理任务都不在 Oozie 之中——它们是由 Hadoop 的

Map/Reduce 框架执行的。这种方法让 Oozie 可以支持现存的 Hadoop 用于负载平衡、灾难

恢复的机制。这些任务主要是异步执行的(只有文件系统动作例外,它是同步处理的)。这

意味着对于大多数工作流动作触发的计算或处理任务的类型来说,在工作流操作转换到工

作流的下一个节点之前都需要等待,直到计算或处理任务结束了之后才能够继续。Oozie 可

以通过两种不同的方式来检测计算或处理任务是否完成,也就是回调和轮询。当 Oozie 启

动了计算或处理任务的时候,它会为任务提供唯一的回调 URL,然后任务会在完成的时候

发送通知给特定的 URL。在任务无法触发回调 URL 的情况下(可能是因为任何原因,比方

说网络闪断),或者当任务的类型无法在完成时触发回调 URL 的时候,Oozie 有一种机制,

可以对计算或处理任务进行轮询,从而保证能够完成任务。

Oozie 工作流可以参数化(在工作流定义中使用像 ${inputDir} 之类的变量)。在提交工

作流操作的时候,我们必须提供参数值。如果经过合适地参数化(比方说,使用不同的输出

目录),那么多个同样的工作流操作可以并发。

一些工作流是根据需要触发的,但是大多数情况下,我们有必要基于一定的时间段和

(或)数据可用性和(或)外部事件来运行它们。Oozie 协调系统(Coordinator System)让用

户可以基于这些参数来定义工作流执行计划。Oozie 协调程序让我们可以以谓词的方式对工

作流执行触发器进行建模,那可以指向数据、事件和(或)外部事件。工作流作业会在谓词

得到满足的时候启动。

有时我们还需要连接定时运行但时间间隔不同的工作流操作。多个随后运行的工作流

的输出会成为下一个工作流的输入。把这些工作流连接在一起,会让系统把它作为数据应

用的管道来引用。Oozie 协调程序支持创建这样的数据应用管道。

7.ZooKeeper

ZooKeeper 是 Hadoop 的正式子项目,它是一个针对大型分布式系统的可靠协调系统。

提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper 的目标就是封

装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

8.Impala

Impala 采用与 Hive 相同的元数据、SQL 语法、ODBC 驱动程序和用户接口(Hue

Beeswax),这样在使用 CDH 产品时,批处理和实时查询的平台是统一的。目前支持的文

件格式是文本文件和 Sequence Files(可以压缩为 Snappy、GZIP 和 BZIP,前者性能最好)。

其他格式如 Avro、RCFile、LZO 文本和 Doug Cutting 的 Trevni 将在正式版中支持,官方测

试速度是 Hive 的 3 ~ 90 倍。

1.4 Hadoop 在国内的应用

图 1-3 由 Hadoop 技术论坛提供,数据的绝对值参考意义不大,主要是看各城市间的相

Page 7: 第1章 Hadoop - Baidu

1.5 本章小结   7

对数据。北京、深圳和杭州位列前三甲,分析主要原因是:北京有淘宝和百度,深圳有腾

讯,杭州有网易等。互联网公司是 Hadoop 在国内的主要使用力量。淘宝是在国内最先使用

Hadoop 的公司之一,而百度赞助了 HyperTable 的开发,另外北京研究 Hadoop 的高校多,

所以北京是 Hadoop 方面研究和应用需求最高的城市。

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

Beijing

Shenzhen

Hangzhou

Shanghai

Guangzhou

Nanjing

Chendu

Changsha

Shenyang

Wuhan

656

332

241

144

144

67

64

59

48

40

30.51%

15.44%

11.21%

6.70%

6.70

3.12%

2.98%

2.74%

2.23%

1.86%

6.70%

6.70%

11.21%

15.44%

30.51%

16.51%

图 1-3 Hadoop 使用统计图

目前,Hadoop 在国内深得互联网企业的青睐,很多互联网公司都在使用 Hadoop 来实

现公司的核心业务,如搜索、推荐等。

奇虎 360 :Hadoop 存储软件管家中的软件,使用 CDN 技术将用户请求引到最近的 ❑

Hadoop 集群并进行下载。

京东、百度:存储、分析日志、数据挖掘和机器学习(主要是推荐系统)。 ❑

广告类公司:存储日志,通过协调过滤算法为客户推荐广告。 ❑

华为:云计算平台。 ❑

学校:学生上网与社会行为分析。 ❑

淘宝、阿里巴巴:国内使用 Hadoop 最深入的公司,整个淘宝和阿里巴巴都是数据 ❑

驱动的。

1.5 本章小结

互联网时代什么最重要——数据!大数据时代什么工具最流行——Hadoop !本章主

要从大体上介绍 Hadoop,让读者对 Hadoop 有个大体的印象。接下来我们开始深入介绍

Hadoop 的相关知识,以及 Hadoop 的安装、使用和开发。