32
基基 基基 hadoop hadoop 基基基基基基基 基基基基基基基

基于 hadoop 的数据仓库技术

Embed Size (px)

DESCRIPTION

基于 hadoop 的数据仓库技术. 目录. Hadoop 简介 HDFS (Hadoop Distributed File System) MapReduce Hive. 本文的内容主要来自三篇 hadoop 领域的核心论文 1 、 Hive—A Petabyte Scale Data Warehouse Using Hadoop 2 、 MapReduce and Parallel DBMSs:Friends or Foes - PowerPoint PPT Presentation

Citation preview

Page 1: 基于 hadoop 的数据仓库技术

基于基于 hadoophadoop 的数据仓库技的数据仓库技术术

Page 2: 基于 hadoop 的数据仓库技术

目录目录

• Hadoop简介• HDFS (Hadoop Distributed File System)• MapReduce

• Hive

本文的内容主要来自三篇 hadoop 领域的核心论文1、 Hive—A Petabyte Scale Data Warehouse Using Hadoop2、MapReduce and Parallel DBMSs:Friends or Foes3、 Cheetah:A High Performance,Custom Data Warehouse on Top of MapReduce

Page 3: 基于 hadoop 的数据仓库技术

历史历史• 2002-2004: Apache Nutch• 2004-2006:

– Google 发表 GFS 和 MapReduce相关论文

– Apache 在 Nutch中实现 HDFS和MapReduce

• 2006-2008:– Hadoop 项目从 Nutch中分离– 2008年 7月, Hadoop赢得 Terabyte Sort

Benchmark

Page 4: 基于 hadoop 的数据仓库技术

Doug CuttingHadoop项目负责人

Page 5: 基于 hadoop 的数据仓库技术

HadoopHadoop简介简介

Hadoop 实现了一个分布式文件系统( Hadoop Distributed File System ),简称 HDFS。 HDFS 有着高容错性的特点,并且设计用来部署在低廉的( low-cost )硬件上。而且它提供高传输率( high throughput )来访问应用程序的数据,适合那些有着超大数据集( large data set )的应用程序。 HDFS 放宽了( relax) POSIX 的要求( requirements )这样可以流的形式访问( streaming access )文件系统中的数据。

Page 6: 基于 hadoop 的数据仓库技术

HadoopHadoop简介简介

Hadoop 是 Apache 的一个开源软件项目 ,由Doug Cutting在 2004 年开始开发。

Hadoop 是一个海量数据存储和计算的分布式系统,它由若干个成员组成,主要包括: HDFS、MapReduce、 HBase、 Hive、 Pig 和 ZooKeeper , 其中 HDFS是 Google的 GFS开源版本, HBase 是 Google 的 BigTable开源版本, ZooKeeper是 Google的 Chubby开源版本。

Hadoop 在大量的公司中被使用和研究

Page 7: 基于 hadoop 的数据仓库技术

HadoopHadoop 的体系架构的体系架构Hadoop由以下几个部件组成:Hadoop Common: The common utilities that support the other Hadoop

subprojects.

Avro: A data serialization system that provides dynamic integration with scripting languages.

Chukwa: A data collection system for managing large distributed systems.

HBase: A scalable, distributed database that supports structured data storage for large tables.

HDFS: A distributed file system that provides high throughput access to application data.

Hive: A data warehouse infrastructure that provides data summarization and ad hoc querying.

MapReduce: A software framework for distributed processing of large data sets on compute clusters.

Pig: A high-level data-flow language and execution framework for parallel computation.

ZooKeeper: A high-performance coordination service for distributed applications.

Page 8: 基于 hadoop 的数据仓库技术

HadoopHadoop 的体系架构的体系架构

Page 9: 基于 hadoop 的数据仓库技术

Hadoop--HDFSHadoop--HDFS HDFS 的结构按照 GFS 设计 A GFS cluster consists of a single master and

multiple chunkservers and is accessed by multiple clie

nts

Page 10: 基于 hadoop 的数据仓库技术

HDFSHDFS

• Fault-tolerant, 容错性• Run on commodity hardware,在通用的机器上运行• Scalable 可扩缩的

http://hadoop.apache.org/hdfs/docs/current/hdfs_design.html

http://labs.google.com/papers/gfs.html

1个namenode

多个datanodes

Page 11: 基于 hadoop 的数据仓库技术

1111

HDFSHDFS

• NameNode–存贮 HDFS的元数据 (metadata)–管理文件系统的命名空间( namespace)» 创建、删除、移动、重命名文件和文件夹

–接收从 DataNode来的 Heartbeat 和 Blockreport

• DataNode–存贮数据块–执行从 Namenode来的文件操作命令–定时向 NameNode发送 Heartbeat和 Blockreport

Page 12: 基于 hadoop 的数据仓库技术

HeartbeatHeartbeat和和 BlockreportBlockreport

NamenodeMetadata:<1,(1,2)><2,(2,3) ><3,(1,3)>

Datanode 1

Datanode 2

Datanode 3

1

1

3

3

2

2

1,3

1,2

2,3

Page 13: 基于 hadoop 的数据仓库技术

1313

Data FlowData Flow

• File Read

13

Page 14: 基于 hadoop 的数据仓库技术

1414

Data FlowData Flow

• File Write

14

Page 15: 基于 hadoop 的数据仓库技术

MapReduceMapReduce 的原理的原理

•编程模型( program model),软件包• Map

–把要处理的数据组合成一个个的<key, value>对( pair)

• Reduce–把具有相同 key的 pair聚集在一起,计算一个新的 value,从而得到一个新的<key, value>并输出。

Page 16: 基于 hadoop 的数据仓库技术

MapReduceMapReduce 的原理的原理

Data store 1 Data store nmap

(key 1, values...)

(key 2, values...)

(key 3, values...)

map

(key 1, values...)

(key 2, values...)

(key 3, values...)

Input key*value pairs

Input key*value pairs

== Barrier == : Aggregates intermediate values by output key

reduce reduce reduce

key 1, intermediate

values

key 2, intermediate

values

key 3, intermediate

values

final key 1 values

final key 2 values

final key 3 values

...

Page 17: 基于 hadoop 的数据仓库技术

MapreduceMapreduce

控制

数据流

一个 Jobtracker

多个 tasktrackers

Page 18: 基于 hadoop 的数据仓库技术

MapReduceMapReduce

• Jobtraker (Master) – 接收任务( job)的提交– 提供任务的监控 (monitoring)和控制 (control)– 把 job划分成多个 tasks,交给 Tasktracker执行,并管理这些 tasks的执行

• Tasktracker (Worker)– 管理单个 task的map任务和 reduce任务的执行

Page 19: 基于 hadoop 的数据仓库技术

Word count:file0:

hello worldfile1:

hello mapreducefile2:

bye bye

Input files

file0

file2

file1

<0, “hello world”>

<0, “hello mapreduce”>

<0, “bye bye”>

<“hello”, 1>

<“world”, 1>

<“bye”, 2>

<“hello”, 1>

<“mpareduce”, 1><“hello”, 2>

<“world”, 1>

<“mapreduce”, 1>

<“bye”, 2>

files <line offset, line content> <word, count> <word, count> files

Page 20: 基于 hadoop 的数据仓库技术

目录目录

• Hadoop简介– HDFS (Hadoop Distributed File System)– MapReduce

• Hive• Hadoop 的企业级应用

Page 21: 基于 hadoop 的数据仓库技术

What is HIVEWhat is HIVE

• 数据仓库业务具有多样性、多变性和逻辑复杂性,传统的Parallel DBMSs 只能使用 SQL 语句,语言表达力不够应付现有的类似 google, facebook 等的数据仓库需求(若使用 UDF或 UDA 自己定义 aggregate ,则失去了其强大的优化功能),而自己定制的 maper和 reducer的代码较为低层比较繁琐且重用性也不好,所以就有了Hive ,提供一个类 SQL 的编程接口,简单又不失灵活性,且基于 map-reduce.

Page 22: 基于 hadoop 的数据仓库技术

What is HIVEWhat is HIVE

• (论文翻译) hive 是一个基于 hadoop 的数据仓库。使用 hadoop-hdfs 作为数据存储层;提供类似 SQL 的语言( HQL ),通过 hadoop-mapreduce 完成数据计算;通过 HQL 语言提供使用者部分传统 RDBMS 一样的表格查询特性和分布式存储计算特性。

• (百科) hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。 其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的MapReduce 应用,十分适合数据仓库的统计分析。

Page 23: 基于 hadoop 的数据仓库技术

HIVEHIVE 架构架构

1 、 操作界面: CLI,Web, Thrift2 、 driver: hive 系统将用户操作转化为 mapreduce 计算的模块(重点)3 、 hadoop: hdfs+mapreduce4 、 metastore :存储元数据

Page 24: 基于 hadoop 的数据仓库技术

HIVEHIVE 结合结合 HBaseHBase

Page 25: 基于 hadoop 的数据仓库技术

reduce 阶段写入 HBase 的方式

Page 26: 基于 hadoop 的数据仓库技术

map-only job 写入 HBase 的方式

Page 27: 基于 hadoop 的数据仓库技术

HIVEHIVE 的实现的实现

• hive 的元数据存储在传统的 RDBMS 中,现在为mysql 中。采用 JDO ( JPOX )。

• 原因:访问这些 Metadata ,我们想要“很低的延时”,而存在 hdfs 中是无法满足。(元数据对hive 是相当重要的,因此一般要求有备份机制 )

• 使用:元数据都是在 HQL 语句编译的时候 ,就被生成一个 xml 文件(包含此次编译所有需要的元数据信息)存储在 hdfs 中,然后运行mapreduce时传递给mapper和 reducer 。(减少后期访问)

Page 28: 基于 hadoop 的数据仓库技术

HIVEHIVE 查询的优化过程查询的优化过程

• GraphWalker遍历( walk) DAG 中所有的 Node ,并检查一个 Rule 是否满足,在满足的条件下回出发一个对应的Processor。 Dispatcher则维护 Rule到 Processor的映射,并进行 Rule 的匹配工作。

Page 29: 基于 hadoop 的数据仓库技术

HIVEHIVE 查询的简单优化步骤查询的简单优化步骤• 1 、 列裁剪( Column pruning ):只有需要用到的列 才进行

输出• 2 、 谓词下推( Predicate pushdown ):尽早进行数据过滤 ,减少后续处理的数据量

• 3 、 分区裁剪( Partition pruning ):只读取满足分区条件的文件

• 4 、 map-join :对于 join 中一些小文件,可以在 map 阶段进行join 操作

• 5 、 join-reordering :将在 reducer 中进行 join 操作时的小table 放入内存 ,而大 table 通过 stream方式读取

• 6 、 Group-by 优化: 进行局部聚合进行优化(包括 hash-based和 sort-based ),对于 skew的 key( key的 row num和 size在 reduce时非常不均)可以进行两次map-reduce 的方式优化说明:基本上用于优化的提示( hint )都是一些配置项, map-join除外,需要具体在 HQL直接指定。

Page 30: 基于 hadoop 的数据仓库技术

HIVEHIVE的的 physical planphysical plan 的生成的生成

• 根据上一步优化的结果,分解成一些 map/reduce 操作,并将最终结果(即一些 plan的xml 文件)写入到 hdfs 。

• 以论文的例子加以说明• A. Thusoo, J.S. Sarma, N. Jain, Z. Shao, P. Chakka, N. Zhang, S. Antony, and H. Liu, “Hive – A Petabyte Scale

Data Warehouse Using Hadoop,” Architecture.

FROM (SELECT a.status, b.school, b.gender FROM status_updates a JOIN profiles b ON (a.userid = b.userid AND a.ds='2009-03-20' )) subq1INSERT OVERWRITE TABLE gender_summary

PARTITION(ds='2009-03-20')SELECT subq1.gender, COUNT(1) GROUP BY subq1.genderINSERT OVERWRITE TABLE school_summary

PARTITION(ds='2009-03-20')SELECT subq1.school, COUNT(1) GROUP BY subq1.school

Page 31: 基于 hadoop 的数据仓库技术

HIVEHIVE的的 physical planphysical plan 的生成的生成

Page 32: 基于 hadoop 的数据仓库技术

The End

Thank you k