深入浅出的hive学习总结资料_第1页
深入浅出的hive学习总结资料_第2页
深入浅出的hive学习总结资料_第3页
深入浅出的hive学习总结资料_第4页
深入浅出的hive学习总结资料_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

什么是Hive(一)Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为QL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。什么是Hive(二)Hive是SQL解析引擎,它将SQL语句转译成M/RJob然后在Hadoop执行。Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/RJob里使用这些数据。Hive的系统架构•用户接口,包括CLI,JDBC/ODBC,WebUI•元数据存储,通常是存储在关系数据库如mysql,derby中•解释器、编译器、优化器、执行器•Hadoop:用HDFS进行存储,利用MapReduce进行计算Hive的系统架构用户接口主要有三个:CLI,JDBC/ODBC和WebUICLI,即Shell命令行JDBC/ODBC是Hive的Java,与使用传统数据库JDBC的方式类似WebGUI是通过浏览器访问HiveHive将元数据存储在数据库中(metastore),目前只支持mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行Hive的数据存储在HDFS中,大部分的查询由MapReduce完成(包含*的查询,比如select*fromtable不会生成MapRedcue任务)Hive的安装启动#hivehive>showtables;hive>createtabletest(idint,namestring);hive>quit;Hive的metastoremetastore是hive元数据的集中存放地。metastore默认使用内嵌的derby数据库作为存储引擎Derby引擎的缺点:一次只能打开一个会话使用Mysql作为外置存储引擎,多用户同时访问Hive运行模式Hive的运行模式即任务的执行环境分为本地与集群两种我们可以通过mapred.job.tracker来指明设置方式:hive>SETmapred.job.tracker=local;Hive的启动方式1、hive命令行模式,直接输入#/hive/bin/hive的执行程序,或者输入#hive--servicecli2、hiveweb界面的(端口号9999)启动方式#hive--servicehwi&用于通过浏览器来访问hivehttp://hadoop0:9999/hwi/3、hive远程服务(端口号10000)启动方式#hive--servicehiveserver&Hive与传统数据库查询语言HiveQLSQL数据存储位置HDFSRawDeviceor本地FS数据格式用户定义系统决定数据更新不支持支持索引新版本有,但弱有执行MapReduceExecutor执行延迟高低可扩展性高低数据规模大小Hive的数据类型基本数据类型tinyint/smallint/int/bigintfloat/doublebooleanstring复杂数据类型Array/Map/Struct没有date/datetimeHive的数据存储Hive的数据存储基于HadoopHDFSHive没有专门的数据存储格式存储结构主要包括:数据库、文件、表、视图Hive默认可以直接加载文本文件(TextFile),还支持sequencefile创建表时,指定Hive数据的列分隔符与行分隔符,Hive即可解析数据Hive的数据模型-数据库类似传统数据库的DataBase默认数据库"default"使用#hive命令后,不使用hive>use<数据库名>,系统默认的数据库。可以显式使用hive>usedefault;创建一个新库hive>createdatabasetest_dw;Hive的数据模型-表Table内部表Partition分区表ExternalTable外部表BucketTable桶表Hive的数据模型-内部表与数据库中的Table在概念上是类似每一个Table在Hive中都有一个相应的目录存储数据。例如,一个表test,它在HDFS中的路径为:/warehouse/test。warehouse是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的数据仓库的目录所有的Table数据(不包括ExternalTable)都保存在这个目录中。删除表时,元数据与数据都会被删除Hive的数据模型-内部表创建数据文件inner_table.dat创建表hive>createtableinner_table(keystring);加载数据hive>loaddatalocalinpath'/root/inner_table.dat'intotableinner_table;查看数据select*frominner_tableselectcount(*)frominner_table删除表droptableinner_tableHive的数据模型-分区表Partition对应于数据库的Partition列的密集索引在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中例如:test表中包含date和city两个Partition,则对应于date=20130201,city=bj的HDFS子目录为:/warehouse/test/date=20130201/city=bj对应于date=20130202,city=sh的HDFS子目录为;/warehouse/test/date=20130202/city=shHive的数据模型-分区表CREATE

TABLEtmp_table#表名(titlestring,

#字段名称字段类型minimum_biddouble,quantitybigint,have_invoicebigint)COMMENT'注释:XXX'

#表注释

PARTITIONEDBY(ptSTRING)

#分区表字段(如果你文件非常之大的话,采用分区表可以快过滤出按分区字段划分的数据)

ROWFORMATDELIMITED

FIELDSTERMINATEDBY

'\001'

#字段是用什么分割开的STOREDASSEQUENCEFILE;#用哪种方式存储数据,SEQUENCEFILE是hadoop自带的文件压缩格式一些相关命令SHOW

TABLES;#查看所有的表SHOW

TABLES

'*TMP*';#支持模糊查询SHOWPARTITIONSTMP_TABLE;#查看表有哪些分区DESCRIBE

TMP_TABLE;#查看表结构Hive的数据模型-分区表创建数据文件partition_table.dat创建表createtablepartition_table(rectimestring,msisdnstring)partitionedby(daytimestring,citystring)rowformatdelimitedfieldsterminatedby'\t'storedasTEXTFILE;加载数据到分区loaddatalocalinpath'/home/partition_table.dat'intotablepartition_tablepartition(daytime='2013-02-01',city='bj');查看数据select*frompartition_tableselectcount(*)frompartition_table•删除表droptablepartition_tableHive的数据模型-分区表altertablepartition_tableaddpartition(daytime='2013-02-04',city='bj');通过loaddata加载数据altertablepartition_tabledroppartition(daytime='2013-02-04',city='bj')元数据,数据文件删除,但目录daytime=2013-02-04还在Hive的数据模型—桶表桶表是对数据进行哈希取值,然后放到不同文件中存储。创建表 createtablebucket_table(idstring)clusteredby(id)into4buckets; 加载数据 sethive.enforce.bucketing=true; insertintotablebucket_tableselectnamefromstu; insertoverwritetablebucket_tableselectnamefromstu;数据加载到桶表时,会对字段取hash值,然后与桶的数量取模。把数据放到对应的文件中。抽样查询 select*frombucket_tabletablesample(bucket1outof4onid);Hive的数据模型-外部表指向已经在HDFS中存在的数据,可以创建Partition它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异内部表的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个外部表时,仅删除该链接Hive的数据模型-外部表CREATEEXTERNALTABLEpage_view(viewTimeINT,

useridBIGINT,page_urlSTRING,

referrer_urlSTRING,

ipSTRINGCOMMENT'IPAddressoftheUser',countrySTRINGCOMMENT'countryoforigination‘)COMMENT'Thisisthestagingpageviewtable'ROWFORMATDELIMITEDFIELDSTERMINATEDBY

'44'

LINES TERMINATEDBY

'12'STOREDASTEXTFILELOCATION'hdfs://centos:9000/user/data/staging/page_view';Hive的数据模型-外部表创建数据文件external_table.dat创建表hive>createexternaltableexternal_table1(keystring)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'location'/home/external';在HDFS创建目录/home/external#hadoopfs-put/home/external_table.dat/home/external加载数据LOADDATAINPATH'/home/external_table1.dat'INTOTABLEexternal_table1;查看数据select*fromexternal_tableselectcount(*)fromexternal_table删除表droptableexternal_table视图操作视图的创建CREATEVIEWv1ASselect*fromt1;表的操作表的修改altertabletarget_tabaddcolumns(cols,string)表的删除droptable导入数据当数据被加载至表中时,不会对数据进行任何转换。Load操作只是将数据复制/移动至Hive表对应的位置。LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]

INTOTABLEtablename

[PARTITION(partcol1=val1,partcol2=val2...)]把一个Hive表导入到另一个已建Hive表INSERTOVERWRITETABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]select_statementFROMfrom_statementCTASCREATE[EXTERNAL]TABLE[IFNOTEXISTS]table_name (col_namedata_type,...) … ASSELECT…例:createtablenew_external_testasselect*fromexternal_table1;查询selectSELECT[ALL|DISTINCT]select_expr,select_expr,... FROMtable_reference [WHEREwhere_condition] [GROUPBYcol_list] [CLUSTERBYcol_list|[DISTRIBUTEBYcol_list][SORTBYcol_list]|[ORDERBYcol_list]] [LIMITnumber]DISTRIBUTEBY指定分发器(Partitioner),多Reducer可用查询基于Partition的查询一般SELECT查询是全表扫描。但如果是分区表,查询就可以利用分区剪枝(inputpruning)的特性,类似“分区索引“”,只扫描一个表中它关心的那一部分。Hive当前的实现是,只有分区断言(Partitionedby)出现在离FROM子句最近的那个WHERE子句中,才会启用分区剪枝。例如,如果page_views表(按天分区)使用date列分区,以下语句只会读取分区为‘2008-03-01’的数据。

SELECTpage_views.*FROMpage_views

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论