大规模数据查询Hive及Impala技术原理及架构总提纲第一部分:Hive数据查询分析技术和实例介绍Hive介绍Hive的体系架构与数据模型——Hive核心:基于MapReduce执行SQLHIVE和他的“小伙伴们”综合应用实例介绍第二部分:Impala数据分析计数和实例介绍IMPALA介绍IMPALA架构分析IMPALA实例介绍告别语:YOYO自身产品和Hadoop的集成*第一部分:Hive数据查询分析技术和实例介绍陈庆2013-04提纲•Hive简介•Hive的体系架构与数据模型——Hive核心:基于MapReduce执行SQL•HIVE和他的“小伙伴们”综合应用实例介绍Hive是什么?AsystemforqueryingandmanagingstructureddatabuiltontopofHadoopUsesMap-ReduceforexecutionHDFSforstorage–butanysystemthatimplementsHadoopFSAPIKeyBuildingPrinciples:Structureddatawithrichdatatypes(structs,listsandmaps)Directlyquerydatafromdifferentformats(text/binary)andfileformats(Flat/Sequence)SQLasafamiliarprogrammingtoolandforstandardanalyticsHive:建立在Hadoop之上的数据库仓库应用基本是将结构化的数据文件映射为一张数据库表,并可以将SQL语句转换为MapReduce任务进行运行,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析;Hive中不支持对数据的改写、插入和删除,这样简化了大量的读写设计,而且设计者认为对需要进行挖掘的数据没有必要删除。“ThethingIreallycareaboutisthemission,makingtheworldopen.”——MarkZuckerbergHive论文介绍AshishiThusoo:2007年加入Facebook,后期负责Facebook数据基础设施团队,创造了世界上最大的数据分析与处理平台。该平台实现了公司内部分析师、产品工程师以及数据科学家得以访问数据,以及他本人秉持的“thedemocratizationofdata”的目标。2012年6月,Ashishi离开Facebook,创建了Qubole公司,其基于AmazonWebService的云资源提供Hive的商业服务。JoydeepSenSarma:目前是Qubole的联合创始人和Qubole印度区总裁。Hive–APetabyteScaleDataWarehouseUsingHadoop,AshishThusoo,JoydeepSenSarma,NamitJain,ZhengShao,PrasadChakka,NingZhang,SureshAntony,HaoLiuandRaghothamMurthy,2010IEEEInternationalConferenceonDataEngineering(ICDE,A+顶级会议,26/1006)5千万8亿Hive在Hadoop体系中的位置提纲•Hive简介•Hive的体系架构与数据模型——Hive核心:基于MapReduce执行SQL•HIVE和他的“小伙伴们”综合应用实例介绍Hive体系架构1.用户接口:包括CLI,Client,WebGui。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至HiveServer。在启动Client模式的时候,需要指出HiveServer所在节点,并且在该节点启动HiveServer。WebGui是通过浏览器访问Hive。2.Metastore:即元数据存储,通常是存储在关系数据库如mysql,derby中。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。3.Driver:包括解释器、编译器、优化器,完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。4.Hive的数据存储在HDFS中,大部分的查询由MapReduce完成。Hive—数据模型LogicalPartitioningHashedBucketsSchemaLibraryclicksHDFSMetaStore/hive/clicks/hive/clicks/ds=2008-03-25/hive/clicks/ds=2008-03-25/0…Tables#Buckets=32BucketingInfoPartitioningCols/hive/TableName/Partition1/Partition2/Bucket0Hive—MetastoreMetastore是Hive元数据的集中存放地,metastore包括两部分:服务和后台数据的存储。默认情况下,metastore服务和Hive服务运行在同一个JVM中,它包含一个内嵌的以本地磁盘为存储的Derby数据库实例,称为“内嵌metastore配置”,这种方式一次只能为每个metastore打开一个hive会话。本地metastore:metastore服务仍然和Hive服务运行在同一个进程中,但连接的是在另一个进程中运行的数据库。远程metastore:此配置一个或多个metastore服务器和Hive服务运行在不同进程,提供更好的管理性和安全。Hive—数据存储结构RCFile(RecordColumnarFile)存储结构遵循的是“先水平划分,再垂直划分”的设计理念。RCFile结合了行存储和列存储的优点:首先,RCFile保证同一行的数据位于同一节点,因此元组重构的开销很低;其次,像列存储一样,RCFile能够利用列维度的数据压缩,并且能跳过不必要的列读取。Hive中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符、行分隔符以及读取文件数据的方法(Hive中默认有三个文件格式TextFile,SequenceFile以及RCFile)。提纲•Hive简介•Hive的体系架构与数据模型——Hive核心:基于MapReduce执行SQL•HIVE和他的“小伙伴们”综合应用实例介绍Hive对SQL的支持SQL操作类别SQL操作说明HBaseHiveRDBDDL(DateDefinitionLanguage数据定义语言)Create在数据库中创建对象√√√Alter修改数据库的结构√√Drop从数据库中删除对象√√√Truncate从一个表中移除所有记录,包括为记录分配的所有空间也一并移除√√Comment为数据字典添加备注√Grant/Revoke赋予/撤销访问权限√√√DML(DataManipulationLanguage数据操纵语言)Select基本查询通过scan实现√√---GroupBy查询结果根据某字段分组√√---Join两张表做交集后生成记录集√√---Union将产生的两个记录集合并在一起√√---OrderBy查询结果根据某字段排序√√Insert向一个表中插入数据√√Update更新表内存在的数据√√Delete删除表中记录√√Explain解释分析数据的访问路径√√Lock控制并发√√Call调用一个PL/SQL或JAVA子程序√√DCL/TCL(DateControl/TransactionControl数据/事务控制)Import/Export导入导出表√√√SETTRANSACTION改变事务选项√Rollback回滚到最近一次COMMIT之前的状态√Commit保存已完成工作√SelectSyntaxSELECT[ALL|DISTINCT]select_expr,select_expr,...FROMtable_reference[WHEREwhere_condition][GROUPBYcol_list][CLUSTERBYcol_list|[DISTRIBUTEBYcol_list][SORTBYcol_list]][LIMITnumber]一个SELECT语句可以是一个union查询或一个子查询的一部分。table_reference是查询的输入,可以是一个普通表、一个视图、一个join或一个子查询简单查询。例如,下面这一语句从t1表中查询所有列的信息。示例:ALLandDISTINCTClauses使用ALL和DISTINCT选项区分对重复记录的处理。默认是ALL,表示查询所有记录。DISTINCT表示去掉重复的记录。HAVINGClauseSELECTcol1FROMt1GROUPBYcol1HAVINGSUM(col2)10转化为下述子查询SELECTcol1FROM(SELECTcol1,SUM(col2)AScol2sumFROMt1GROUPBYcol1)t2WHEREt2.col2sum10LIMITClauseLimit可以限制查询的记录数。查询的结果是随机选择的。下面的查询语句从t1表中随机查询5条记录:SELECT*FROMt1LIMIT5REGEXColumnSpecification使用正则表达式进行列选择。SELECT`(ds|hr)?+.+`FROMsalesGroupbySyntaxSELECT[ALL|DISTINCT]select_expr,select_expr,...FROMtable_reference[WHEREwhere_condition][GROUPBYcol_list][CLUSTERBYcol_list|[DISTRIBUTEBYcol_list][SORTBYcol_list]][LIMITnumber]GROUPBY语句用于结合合计函数,根据一个或多个列对结果集进行分组。Groupby示例:O_IdOrderDateOrderPriceCustomer12012/12/291000Bush22012/11/231600Carter32012/10/05700Bush42012/09/28300Bush52012/08/062000Adams62012/07/21100CarterCustomerSum(OrderPrice)Bush2000Carter1700Adams2000CustomerSum(OrderPrice)Bush5700Carter5700Bush5700Bush5700Adams5700Carter5700SELECTCustomer,SUM(OrderPrice)FROMOrdersSELECTCustomer,SUM(OrderPrice)FROMOrdersGROUPBYCustomerJoinSyntaxjoin_table:table_referenceJOINtable_factor[join_condition]|table_reference{LEFT|RIGHT|FULL}[OUTER]JOINtable_referencejoin_condition|table_referenceLEFTSEMIJOINtable_referencejoin_condition示例:Hive只支持等值Join,因为非等值难以转化为MapReduce任务。SELECTa.*FROMaJOINbON(a.id=b.idANDa.department=b.department)Join多于两个表SELECTa.val,b.val,c.valFROMaJOINbON(a.key=b.key1)JOINcON(c