了解hadoop技术目录•Hadoop简介•HDFS(HadoopDistributedFileSystem)•MapReduce•Hive本文的内容主要来自三篇hadoop领域的核心论文1、Hive—APetabyteScaleDataWarehouseUsingHadoop2、MapReduceandParallelDBMSs:FriendsorFoes3、Cheetah:AHighPerformance,CustomDataWarehouseonTopofMapReduce历史•2002-2004:ApacheNutch•2004-2006:–Google发表GFS和MapReduce相关论文–Apache在Nutch中实现HDFS和MapReduce•2006-2008:–Hadoop项目从Nutch中分离–2008年7月,Hadoop赢得TerabyteSortBenchmarkDougCuttingHadoop项目负责人Hadoop简介Hadoop实现了一个分布式文件系统(HadoopDistributedFileSystem),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(highthroughput)来访问应用程序的数据,适合那些有着超大数据集(largedataset)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streamingaccess)文件系统中的数据。Hadoop简介Hadoop是Apache的一个开源软件项目,由DougCutting在2004年开始开发。Hadoop是一个海量数据存储和计算的分布式系统,它由若干个成员组成,主要包括:HDFS、MapReduce、HBase、Hive、Pig和ZooKeeper,其中HDFS是Google的GFS开源版本,HBase是Google的BigTable开源版本,ZooKeeper是Google的Chubby开源版本。Hadoop在大量的公司中被使用和研究Hadoop的体系架构Hadoop由以下几个部件组成:HadoopCommon:ThecommonutilitiesthatsupporttheotherHadoopsubprojects.Avro:Adataserializationsystemthatprovidesdynamicintegrationwithscriptinglanguages.Chukwa:Adatacollectionsystemformanaginglargedistributedsystems.HBase:Ascalable,distributeddatabasethatsupportsstructureddatastorageforlargetables.HDFS:Adistributedfilesystemthatprovideshighthroughputaccesstoapplicationdata.Hive:Adatawarehouseinfrastructurethatprovidesdatasummarizationandadhocquerying.MapReduce:Asoftwareframeworkfordistributedprocessingoflargedatasetsoncomputeclusters.Pig:Ahigh-leveldata-flowlanguageandexecutionframeworkforparallelcomputation.ZooKeeper:Ahigh-performancecoordinationservicefordistributedapplications.Hadoop的体系架构Hadoop--HDFSHDFS的结构按照GFS设计AGFSclusterconsistsofasinglemasterandmultiplechunkserversandisaccessedbymultipleclientsHDFS•Fault-tolerant,容错性•Runoncommodityhardware,在通用的机器上运行•Scalable可扩缩的://labs.google.com/papers/gfs.html1个namenode多个datanodes1111HDFS•NameNode–存贮HDFS的元数据(metadata)–管理文件系统的命名空间(namespace)»创建、删除、移动、重命名文件和文件夹–接收从DataNode来的Heartbeat和Blockreport•DataNode–存贮数据块–执行从Namenode来的文件操作命令–定时向NameNode发送Heartbeat和BlockreportHeartbeat和BlockreportNamenodeMetadata:1,(1,2)2,(2,3)3,(1,3)Datanode1Datanode2Datanode31133221,31,22,31313DataFlow•FileRead131414DataFlow•FileWrite14MapReduce的原理•编程模型(programmodel),软件包•Map–把要处理的数据组合成一个个的key,value对(pair)•Reduce–把具有相同key的pair聚集在一起,计算一个新的value,从而得到一个新的key,value并输出。MapReduce的原理Datastore1Datastorenmap(key1,values...)(key2,values...)(key3,values...)map(key1,values...)(key2,values...)(key3,values...)Inputkey*valuepairsInputkey*valuepairs==Barrier==:Aggregatesintermediatevaluesbyoutputkeyreducereducereducekey1,intermediatevalueskey2,intermediatevalueskey3,intermediatevaluesfinalkey1valuesfinalkey2valuesfinalkey3values...Mapreduce控制数据流一个Jobtracker多个tasktrackersMapReduce•Jobtraker(Master)–接收任务(job)的提交–提供任务的监控(monitoring)和控制(control)–把job划分成多个tasks,交给Tasktracker执行,并管理这些tasks的执行•Tasktracker(Worker)–管理单个task的map任务和reduce任务的执行Wordcount:file0:helloworldfile1:hellomapreducefile2:byebyeInputfilesfile0file2file10,“helloworld”0,“hellomapreduce”0,“byebye”“hello”,1“world”,1“bye”,2“hello”,1“mpareduce”,1“hello”,2“world”,1“mapreduce”,1“bye”,2fileslineoffset,linecontentword,countword,countfiles目录•Hadoop简介–HDFS(HadoopDistributedFileSystem)–MapReduce•Hive•Hadoop的企业级应用WhatisHIVE•数据仓库业务具有多样性、多变性和逻辑复杂性,传统的ParallelDBMSs只能使用SQL语句,语言表达力不够应付现有的类似google,facebook等的数据仓库需求(若使用UDF或UDA自己定义aggregate,则失去了其强大的优化功能),而自己定制的maper和reducer的代码较为低层比较繁琐且重用性也不好,所以就有了Hive,提供一个类SQL的编程接口,简单又不失灵活性,且基于map-reduce.WhatisHIVE•(论文翻译)hive是一个基于hadoop的数据仓库。使用hadoop-hdfs作为数据存储层;提供类似SQL的语言(HQL),通过hadoop-mapreduce完成数据计算;通过HQL语言提供使用者部分传统RDBMS一样的表格查询特性和分布式存储计算特性。•(百科)hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。HIVE架构1、操作界面:CLI,Web,Thrift2、driver:hive系统将用户操作转化为mapreduce计算的模块(重点)3、hadoop:hdfs+mapreduce4、metastore:存储元数据HIVE结合HBasereduce阶段写入HBase的方式map-onlyjob写入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、列裁剪(Columnpruning):只有需要用到的列才进行输出•2、谓词下推(Predicatepushdown):尽早进行数据过滤,减少后续处理的数据量•3、分区裁剪(Partitionpruning):只读取满足分区条件的文件•4、map-join:对于join中一些小文件,可以在map阶段进行join操作•5、join-reordering:将在reducer中进行join操作时的小table放入内存,而大table通过stream方式读取•6、Group-by优化:进行局部聚合进行优化(包括hash-based和sort-based),对于skew的key(key的rownum和size在reduce时非常不均)可以进行两次map-reduce的方式优化说明:基本上用于优化的提示(hint)都是一些配置项,map-join除外,需要具体在HQL直接指定。HIVE的physicalplan的生成•根据上一步优化的结果,分解成一些map/reduce操作,并将最终结果(即一些plan的xml文件)写入到hdfs。•以论文的例子加以说明•A.Thusoo,J.S.Sarma,N.Jain,Z.Shao,P.Chakka,N.Zhang,S.Antony,andH.Liu,“Hive–APetabyteScaleDataWarehouseUsingHadoop,”Architecture.FROM(SELECTa.status,b.schoo