基于hadoop的数据仓库技术
目录 Hadoop简介 Hive HDFS (Hadoop Distributed File System) MapReduce 1、Hive—A Petabyte Scale Data Warehouse Using Hadoop 2、MapReduce and Parallel DBMSs:Friends or Foes 3、Cheetah:A High Performance,Custom Data Warehouse on Top of MapReduce
历史 2002-2004: Apache Nutch 2004-2006: Google 发表 GFS 和 MapReduce相关论文 Apache 在Nutch中实现HDFS和MapReduce 2006-2008: Hadoop 项目从Nutch中分离 2008年7月,Hadoop赢得Terabyte Sort Benchmark Hadoop Wins Terabyte Sort Benchmark: One of Yahoo's Hadoop clusters sorted 1 terabyte of data in 209 seconds, which beat the previous record of 297 seconds in the annual general purpose (Daytona) terabyte sort benchmark. This is the first time that either a Java or an open source program has won.
Doug Cutting Hadoop项目负责人 同时也是Nutch, Lucene的负责人 09年8月离开yahoo!,加入Cloudera Doug Cutting Hadoop项目负责人
Hadoop简介 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。 There are 36 data centers in all—19 in the U.S., 12 in Europe, 3 in Asia, and one each in Russia and South America. Baidu - the leading Chinese language search engine Hadoop used to analyze the log of search and do some mining work on web page database We handle about 3000TB per week Our clusters vary from 10 to 500 nodes Hypertable is also supported by Baidu
Hadoop简介 Hadoop是 Apache 的一个开源软件项目,由Doug Cutting在2004年开始开发。 Hadoop是一个海量数据存储和计算的分布式系统,它由若干个成员组成,主要包括:HDFS、MapReduce、HBase、Hive、Pig 和 ZooKeeper, 其中HDFS是Google的GFS开源版本, HBase 是Google的 BigTable开源版本,ZooKeeper是Google的Chubby开源版本。 Hadoop在大量的公司中被使用和研究 There are 36 data centers in all—19 in the U.S., 12 in Europe, 3 in Asia, and one each in Russia and South America. Baidu - the leading Chinese language search engine Hadoop used to analyze the log of search and do some mining work on web page database We handle about 3000TB per week Our clusters vary from 10 to 500 nodes Hypertable is also supported by Baidu
Hadoop的体系架构 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. There are 36 data centers in all—19 in the U.S., 12 in Europe, 3 in Asia, and one each in Russia and South America. Baidu - the leading Chinese language search engine Hadoop used to analyze the log of search and do some mining work on web page database We handle about 3000TB per week Our clusters vary from 10 to 500 nodes Hypertable is also supported by Baidu
Hadoop的体系架构 There are 36 data centers in all—19 in the U.S., 12 in Europe, 3 in Asia, and one each in Russia and South America. Baidu - the leading Chinese language search engine Hadoop used to analyze the log of search and do some mining work on web page database We handle about 3000TB per week Our clusters vary from 10 to 500 nodes Hypertable is also supported by Baidu
Hadoop--HDFS HDFS的结构按照GFS设计 A GFS cluster consists of a single master and multiple chunkservers and is accessed by multiple clients There are 36 data centers in all—19 in the U.S., 12 in Europe, 3 in Asia, and one each in Russia and South America. Baidu - the leading Chinese language search engine Hadoop used to analyze the log of search and do some mining work on web page database We handle about 3000TB per week Our clusters vary from 10 to 500 nodes Hypertable is also supported by Baidu
HDFS Fault-tolerant, 容错性 Run on commodity hardware,在通用的机器上运行 Scalable 可扩缩的 1个 namenode 多个 datanodes 容错性的保证是用校验码或者用冗余,HDFS是用冗余 Commodity hardware 普通pc,不是大型的服务器 可扩展,最重要的特性:访问量的增加,传统的架构的做法…可扩咱架构的做 法… http://hadoop.apache.org/hdfs/docs/current/hdfs_design.html http://labs.google.com/papers/gfs.html
HDFS NameNode DataNode 存贮HDFS的元数据(metadata) 管理文件系统的命名空间(namespace) 创建、删除、移动、重命名文件和文件夹 接收从DataNode来的Heartbeat 和 Blockreport DataNode 存贮数据块 执行从Namenode来的文件操作命令 定时向NameNode发送Heartbeat和Blockreport 重点介绍的概念: Metadata Metadata和data之间的同步 11 11
Heartbeat和Blockreport Datanode 1 Namenode Metadata: <1,(1,2)> <2,(2,3) > <3,(1,3)> 1 1,3 3 1,2 Datanode 2 1 2 2,3 1、保证metadata和data的一致 2、namenode用这样的机制来探测datanode是dead的还是alive,并在发现 datanode死机的时候重新生成副本 Datanode 3 2 3
Data Flow File Read 先读NameNode,获得数据块的信息,再去读相应的DataNode中的数据。 避免所有数据都从NameNode获取,使得NameNode成为性能瓶颈 13 13 13
Data Flow File Write 14 14 14
MapReduce的原理 编程模型(program model),软件包 Map Reduce 把要处理的数据组合成一个个的<key, value>对(pair) Reduce 把具有相同key的pair聚集在一起,计算一个 新的value,从而得到一个新的<key, value> 并输出。 编程模型:计算方法,计算模式,一种思考问题的方法,一种处理问题的方法 ,把这些处理问题的方法实现在一个软件包里。 用这个软件包的时候就用了这种处理问题的方法。
MapReduce的原理 编程模型:计算方法,计算模式,一种思考问题的方法,一种处理问题的方法 ,把这些处理问题的方法实现在一个软件包里。 用这个软件包的时候就用了这种处理问题的方法。
Mapreduce 控制 一个Jobtracker 多个tasktrackers 数据流
MapReduce Jobtraker (Master) Tasktracker (Worker) 接收任务(job)的提交 提供任务的监控(monitoring)和控制(control) 把job划分成多个tasks,交给Tasktracker执行,并管 理这些tasks的执行 Tasktracker (Worker) 管理单个task的map任务和reduce任务的执行
Word count: file0 file1 file2 files <word, count> hello world file1: hello mapreduce file2: bye bye file0 <“hello”, 1> <“world”, 1> <0, “hello world”> Input files file1 <“hello”, 1> <“mpareduce”, 1> <0, “hello mapreduce”> <“hello”, 2> <“world”, 1> <“mapreduce”, 1> <“bye”, 2> file2 <“bye”, 2> <0, “bye bye”> files <line offset, line content> <word, count> <word, count> files
目录 Hadoop简介 Hive Hadoop的企业级应用 HDFS (Hadoop Distributed File System) MapReduce Hive Hadoop的企业级应用
What is HIVE 数据仓库业务具有多样性、多变性和逻辑复杂性,传统的 Parallel DBMSs只能使用SQL语句,语言表达力不够应 付现有的类似google,facebook等的数据仓库需求(若 使用UDF或UDA自己定义aggregate,则失去了其强大 的优化功能),而自己定制的maper和reducer的代码较 为低层比较繁琐且重用性也不好,所以就有了Hive,提供 一个类SQL的编程接口,简单又不失灵活性,且基于 map-reduce.
What is HIVE (论文翻译)hive是一个基于hadoop的数据仓库。使用 hadoop-hdfs作为数据存储层;提供类似SQL的语言 (HQL),通过hadoop-mapreduce完成数据计算;通 过HQL语言提供使用者部分传统RDBMS一样的表格查询 特性和分布式存储计算特性。 (百科)hive是基于Hadoop的一个数据仓库工具,可以 将结构化的数据文件映射为一张数据库表,并提供完整的 sql查询功能,可以将sql语句转换为MapReduce任务进 行运行。 其优点是学习成本低,可以通过类SQL语句快 速实现简单的MapReduce统计,不必开发专门的 MapReduce应用,十分适合数据仓库的统计分析。
HIVE架构 1、 操作界面:CLI,Web,Thrift 2、 driver:hive系统将用户操作转化为mapreduce计算的模块(重点) 3、 hadoop:hdfs+mapreduce 4、 metastore:存储元数据
HIVE结合HBase
reduce阶段写入HBase的方式
map-only job写入HBase的方式
HIVE的实现 hive的元数据存储在传统的RDBMS中,现在为 mysql中。采用JDO (JPOX)。 原因:访问这些Metadata,我们想要“很低的延 时”,而存在hdfs中是无法满足。(元数据对 hive是相当重要的,因此一般要求有备份机制 ) 使用:元数据都是在HQL语句编译的时候 ,就被 生成一个xml文件(包含此次编译所有需要的元 数据信息)存储在hdfs中,然后运行 mapreduce时传递给mapper和reducer。(减 少后期访问)
HIVE查询的优化过程 GraphWalker遍历(walk) DAG中所有的Node,并检 查一个Rule是否满足,在满 足的条件下回出发一个对应 的Processor。Dispatcher 则维护Rule到Processor的 映射,并进行Rule的匹配工 作。
HIVE查询的简单优化步骤 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直接指定。
HIVE的physical 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' )) subq1 INSERT OVERWRITE TABLE gender_summary PARTITION(ds='2009-03-20') SELECT subq1.gender, COUNT(1) GROUP BY subq1.gender INSERT OVERWRITE TABLE school_summary PARTITION(ds='2009-03-20') SELECT subq1.school, COUNT(1) GROUP BY subq1.school
HIVE的physical plan的生成
The End Thank you k