大数据处理:Hive & Pig

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

大数据处理Hive&Pig1提纲Hive由来架构HQL及实例使用UDF扩展HiveHive使用中的技巧Pig由来架构PigLatin及实例使用UDF扩展PigPig使用中的技巧2Hadoop数据分析–Hive来源:AshishThusoo,JoydeepSenSarma,etal.,Facebook,“Hive:AWarehousingSolutionoverAMap-ReduceFramework”,ProceedingsoftheVLDBEndowment,Aug.2009.WhyHive?()HiveisadatawarehousesystemforHadoopthatfacilitateseasydatasummarization,ad-hocqueries,andtheanalysisoflargedatasetsstoredinHadoopcompatiblefilesystems.HiveprovidesamechanismtoprojectstructureontothisdataandquerythedatausingaSQL-likelanguagecalledHiveQL.数据库vs.数据仓库:存取(面向事务)vs.分析(面向主题)3Hadoop数据分析-感受Hive4Hive架构与组件5Hive数据组织库(Database)、表(Table)、分区(Partition)和桶(Bucket)库(Database):与传统的关系型数据库类似,库就是若干数据表的集合,代表了用户希望管理的一个数据集。表(Table):与关系型数据库中表的概念类似,表在逻辑上由存储的数据和描述表格中数据形式的相关元数据组成,每张表中的数据以序列化文件的形式存储在相应的HDFS目录下。分区(Partition):分区是为了在数据量过大时提高数据存储效率而对表进行划分的机制,每个表可以包含一个或多个分区,每个分区在物理上是HDFS存储表数据的目录下的子目录。桶(Bucket):通过对指定列值进行哈希并将结果除以桶的个数取余数的方法,将一张表或分区分到不同桶中,从而在查询少量数据只需在对应的桶中进行查找,提高查询效率。一个桶对应一个HDFS文件,存在于一个分区或一张表的目录中,文件按照字典顺序排列的。6Hive数据组织分区及桶示例:分区后,Type列作为划分列在文件系统的目录中体现,因此此列不会出现在数据文件的列值中。7/user/hive/warehouse/logs/Type=1/file_0000/user/hive/warehouse/logs/Type=2/file_0001Hive中的元数据元数据是描述数据的库/表/分区/桶组织形式和关系的基础数据元数据集中存放在元数据库(Metastore)中采用了传统的关系数据库(MySQL或Derby)存储元数据元数据的三种存储模式内嵌(Embedded)模式元数据存储在内嵌在本地磁盘的Derby数据库中本地(Local)模式元数据存储独立,支持多个Hive服务共享一个元数据库远程(Remote)模式Hive服务器可以访问多个元数据库服务,具有很好的可扩展性8Hive数据存储-行格式Hive数据存储格式的两个维度:行格式(rowformat)文件存储格式(fileformat)行格式SerDe(Serializer-Deserializer)每行数据是在存储时要进行序列化操作(Serializer),即将每行数据的属性结构及属性值转换为二进制数据流存入文件中读取时要进行反序列化操作(Deserializer),即将文件中存储的二进制数据量还原为每行数据的属性结构和属性值Hive提供了多种序列化反序列化接口,开发者也可以扩展自己的SerDe接口设置数据存储格式默认使用的SerDe接口为:延迟简单SerDe(LazySimpleSerDe)以回车符(ASCII码13)区分不同的行以CTRL-A(ASCII码1)区分一行中的不同列延迟(Lazy)指只有当某列数据被访问时才会进行反序列化操作,以提高数据存储效率9Hive数据存储-文件格式文件存储格式(fileformat):数据表中的数据是如何存储到文件中10HQL-HiveQueryLanguage提供给数据分析人员使用的类似SQL的命令语法不是SQL语言所遵循的SQL-92标准中的全集:非全集,有扩展11HQL中的数据类型STRUCT支持将多个不同类型的字段封装为一个结构型数据STRUCTindex:INT,name:STRING,weight:DOUBLE复杂数据类型在定义时要使用尖括号指明其数据字段的数据类型,并且允许任意层次的嵌套关系col1ARRAYINT,col2MAPINT,STRINGcol3STRUCTindex:INT,name:STRING,weight:DOUBLE12HQL执行流程13HQL实例(0)-源数据源数据源数据存放在HDFS的/data/目录下用户信息存放于user.txt文件访问日志存放于log.txt文件14HQL实例(1)-创建数据表user.txt→userlog.txt→log15HQL实例(1)-创建数据表Hive中的两种数据表:内部数据表、外部数据表内部数据表:Hive将把数据文件移动到它管理的数据仓库目录下外部数据表:Hive只创建并管理外部数据表的元数据,数据文件则仍使用原始文件区别创建外部表时需要指定外部数据源文件所在的位置加载数据(LOAD)和删除表(DROP)两类操作user表CREATETABLEuser(userIDSTRING,ageINT,genderSTRING);log表CREATEEXTERNALTABLElog(dateSTRING,URLSTRING,userID,STRING,categorySTRING,trafficINT)LOCATION'/data/log.txtʹ′;16HQL实例(1)-创建数据表(优化)分区:将数据表按照某个列进行切分然后存放在不同的目录下,提高对相应列的查询效率例如:将日志文件中的大量记录按照日期进行分区存放,提高日期查询效率CREATETABLElog(URLSTRING,userIDSTRING,categorySTRING,trafficINT)PARTITIONEDBY(dateSTRING);LOADDATAINPATHʹ′/data/log_20130601.txtʹ′INTOtablelogPARTITIONED(date='20130601');注意:date没有在列描述区域出现,仅在指定分区的语句段出现查看分区命令:SHOWPARTITIONShiveSHOWPARTITIONSlog;date=20130601date=2013060217HQL实例(1)-创建数据表(优化)桶:支持快速生成抽样样本集及提高查询效率例如:使用用户ID作为划分桶的字段,并生成5个桶CREATETABLEuser(userIDSTRING,ageINT,genderSTRING)CLUSTEREDBY(userID)INT5BUCKETS;在数据存储时将对用户ID进行哈希并用结果除以5后获得的余数决定分配到哪个桶中桶就是分区目录下的文件18HQL实例(2)-加载数据加载数据:从本地文件系统或HDFS中导入数据到数据表中内部数据表加载数据相当于一个移动操作,即将源数据文件移动到Hive管理的文件目录下对于user表,原始数据文件hdfs://data/user.txt将被移动到Hive管理的数据仓库hdfs://user/hive/warehouse/user目录下LOADDATAINPATHʹ′/data/user.txtʹ′INTOtableuser;外部数据表加载操作仅仅是建立元数据不会检查加载命令中的原始数据文件是否存在,留在之后进行数据操作时才进行LOADDATAINPATHʹ′/data/log.txtʹ′INTOtablelog;19HQL实例(3)-修改数据表命令:ALTERTABLE可修改表名、列名、列字段类型、增加列、替换列将原来名为user的表重命名为new_userALTERTABLEuserRENAMETOnew_user;内部数据表:数据文件所在的目录将被重命名为新的表名例如将hdfs://user/hive/warehouse/user目录被重命名为hdfs://user/hive/warehouse/new_user外部数据表:只修改元数据,不会操作数据文件和目录20HQL实例(3)-修改数据表增加列ALTERTABLEuserADDCOLUMNS(addresSTRING);修改列名和列字段类型ALTERTABLEuserCHANGEaddresaddressSTRING;注意:HiveQL修改表结构后,仅修改元数据中的表定义信息,并不真正更新数据文件中的内容,因此需要确保一致性21HQL实例(4)-复制数据表将一个已有表中的数据复制到另一个表中:单表复制、多表复制和创建表时复制单表复制:使用log表复制出一个同样的clone_log表多表复制:利用log表产生两个统计表,分别存放每日记录数统计和每日网站访问次数统计创建表时复制22HQL实例(5)-删除数据表删除数据表命令:DROPTABLE例如删除clone_log_1表DROPTABLEclone_log_1;区别:内部数据表:删除表操作是一个真正的删除操作,会将表对应的元数据和数据文件一并删除外部数据表:删除操作仅是删除元数据,真正的数据文件不会删除23HQL实例(6)-数据查询数据查询命令:SELECT...FROM...支持与SQL类似的子句条件(WHERE)分组(GROUP)排序(ORDERBY)限制返回数量(LIMIT)等SELECT*FROMlogWHEREdateʹ′20130601ʹ′;24HQL实例(7)-数据查询(GroupBy)查询每类网页的流量和INSERTINTOTABLEsum_trafficSELECTcategory,SUM(traffic)FROMlogGROUPBYcategory;25HQLGroupBy的实现INSERTINTOTABLEsum_trafficSELECTcategory,SUM(traffic)FROMlogGROUPBYcategory;26HQL实例(8)-数据查询(GroupBywithDistinct)查询每个网页的不同用户访问数SELECTURL,COUNT(DISTINCTuserID)FROMlogGROUPBYURL;27HQLGroupBywithDISTINCT的实现28HQL实例(9)-数据查询(OrderBy)20130601之后的数据按日期升序,URL升序输出SELECTdate,URLFROMlogWHEREdate=ʹ′20130601ʹ′ORDERBYdateASC,URLASC;ORDERBY要实现全局排序,只能在一个reducer中执行,执行效率低29HQL实例(10)-数据查询(更多排序方式)SORTBY、DISTRIBUTEBY和CLUSTERBYSORTBY子句确保在查询语句执行的MapReduce程序中,同一reducer内的数据按照指定的列进行排序DISTRIBUTEBY子句则可以指定具有相同指定列值的数据进入同一个reducer中进行处理CLUSTERBY:DISTRIBUEBYANDSORTBY20130601之后的数据按URL分组,然后按日期升序输出SELECTdate,URLFROMlogWHEREdate=ʹ′201

1 / 69
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功