第7章-数据仓库Hive_第1页
第7章-数据仓库Hive_第2页
第7章-数据仓库Hive_第3页
第7章-数据仓库Hive_第4页
第7章-数据仓库Hive_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

第7章数据仓库Hive目

录1Hive简介Hive架构Hive数据存储模型237.1.1Hive简介Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。之所以说Hive是构建在Hadoop之上的数据仓库,是因为数据存储在HDFS上,数据计算可以使用基于Hadoop的多种计算框架.Hive定义了简单的类SQL查询语言,称为HiveQL,使不熟悉MapReduce的用户也能很方便地利用SQL语言对数据进行查询、汇总和分析。表7-1

Hive和传统关系型数据库的比较

HiveRDBMS查询语言HQLSQL数据存储位置HDFS块设备或本地文件系统数据格式用户定义系统决定数据更新不支持对某个具体行的操作,对数据的操作只支持覆盖原数据和追加数据支持索引无有执行MapReduceExecutor执行延迟高低处理数据规模大小可扩展性高低7.1.2Hive架构(1)用户接口主要有三个:CLI,Client和WUI。即Hive对外提供了三种服务模式,Hive命令行模式(CLI),Hive的Web模式(WUI),Hive的远程服务(Client),其中最常用的是Hive命令行模式CLI,WUI是通过浏览器访问Hive。(2)Hive将元数据存储在关系数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列及类型,存储空间,分区,表数据所在目录等。(3)解释器、编译器、优化器完成HiveQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。(4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select*fromtbl不会生成MapRedcue任务)。2、连接数据库的三种模式Hive将元数据存储在RDBMS中,有三种模式可以连接到数据库:(1)单用户模式。此模式连接到一个嵌入式数据库Derby,一般用于单元测试。(2)多用户模式。通过网络连接到一个数据库中,是最经常使用到的模式,一般使用mysql存储hive元数据。如下图7-2所示。(3)远程服务器模式。用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。一般使用mysql存储hive元数据。如下图7-3所示。7.1.3Hive数据存储模型Hive中所有的数据都存储在HDFS中。Hive中包含以下数据模型:Table内部表,ExternalTable外部表,Partition分区,Bucket桶。Hive默认可以直接加载文本文件,还支持sequencefile、RCFile。(1)Hive数据库类似传统数据库的DataBase,在第三方数据库里实际是一张表。创建Hive数据库示例:createdatabasemyhive_db。(2)内部表Hive的内部表与数据库中的表在概念上类似。每一个Table在Hive中都有一个相应的目录存储数据。例如一个表myhive,它在HDFS中的路径为/test/myhive,其中test是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的数据仓库的目录,所有的Table数据(不包括外部表)都保存在这个目录中。删除表时,元数据与数据都会被删除。(2)内部表内部表示例:创建数据文件:myhive.txt创建表:createtablemyhive(keystring)加载数据:LOADDATALOCALINPATH‘filepath’INTOTABLEmyhive查看数据:select*frommyhiveselectcount(*)frommyhive删除表:droptablemyhive(3)外部表外部表(ExternalTable)指向已经在HDFS中存储的数据,可以创建分区。外部表只有一个过程,加载数据和创建表同时完成(CREATEEXTERNALTABLE……LOCATION),实际数据是存储在LOCATION后面指定的HDFS路径中,并不会移动到数据仓库目录中。当删除一个外部表时,仅删除该链接。外部表示例:创建数据文件:test_ext.txt创建表:createexternaltabletest_ext(keystring)加载数据:LOADDATAINPATH‘filepath’INTOTABLEtest_ext查看数据:select*fromtest_extselectcount(*)fromtest_ext删除表:droptabletest_ext(4)分区分区(Partition)对应于数据库中的Partition列的密集索引,但是Hive中Partition的组织方式和数据库中的很不相同。在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中。分区表示例:创建数据文件:test_part.txt创建表:createtabletest_part(keystring)partitionedby(dsstring)加载数据:LOADDATAINPATH‘filepath’INTOTABLEtest_partpartition(city=‘CA’)查看数据:select*fromtest_partselectcount(*)fromtest_part删除表:droptabletest_part(5)桶桶(Buckets)是将表的列通过哈希(Hash)算法进一步分解成不同的文件存储。它对指定列计算Hash,根据Hash值切分数据,目的是为了并行,每一个Bucket对应一个文件。例如将user列分散至32个bucket,首先对user列的值计算Hash,对应Hash值为0的HDFS目录为/test/hivet/ds=20090801/ctry=US/part-00000;Hash值为20的HDFS目录为/test/hivet/ds=20090801/ctry=US/part-00020。如果想应用很多的Map任务这样是不错的选择。桶的简单示例:创建数据文件:test_bucket.txt创建表:createtabletest_bucket(keystring)clusteredby(key)into20buckets加载数据:LOADDATAINPATH‘filepath’INTOTABLEtest_bucket查看数据:select*fromtest_bucketsethive.enforce.bucketing=true;(6)Hive的视图视图与传统数据库的视图类似。视图是只读的,它基于基本表,如果改变,数据增加不会影响视图的呈现;如果删除,会出现问题。如果不指定视图的列,会根据select语句后的列生成。示例:createviewtest_viewasselect*fromtest7.2.2HiveQL常用操作1、Hive基本数据类型Hive支持基本数据类型和复杂类型,基本数据类型主要有数值类型(INT、FLOAT、DOUBLE)、布尔型和字符串,复杂类型有三种:ARRAY、MAP和STRUCT。2、HiveQL常用操作(1)创建数据库,创建表:createdatabaseifnotexistshive;#创建数据库showdatabases;#查看所有数据库usehive;#切换到hive数据库下showtables;#查看该数据库下的所有表(2)导入数据在此主要介绍从文件中向表中导入数据。假设需要将本地文件/opt/examples/stu.txt导入到hive数据库中的stu表。stu.txt文件内容如下。创建stu.txt文件并输入数据,命令及操作如下。stu.txt:1 zhangsan2 lisi3 wangwu注意:stu.txt文件中的数据间隔符要和stu表建表时采用的字段分隔符一致,本教程创建stu表时的字段分隔符是tab键,所以这里的stu.tx

温馨提示

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

评论

0/150

提交评论