(10)Hive体系结构 —— 深入浅出学Hive

来源:互联网 发布:脊柱梳理床 知乎 编辑:程序博客网 时间:2024/06/13 13:10

转自:http://sishuok.com/forum/blogPost/list/6220.html

第一部分:概念 
概念
•用户接口:用户访问Hive的入口
•元数据:Hive的用户信息与表的MetaData
•解释器:分析翻译HQL的组件
•编译器:编译HQL的组件
•优化器:优化HQL的组件
第二部分:Hive架构与基本组成
架构图
基本组成
•用户接口,包括 CLI,JDBC/ODBC,WebUI
•元数据存储,通常是存储在关系数据库如 mysql, derby 中
•解释器、编译器、优化器、执行器
•Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算
 
各组件的基本功能
•用户接口主要有三个:CLI,JDBC/ODBC和 WebUI
•CLI,即Shell命令行
•JDBC/ODBC 是 Hive 的JAVA,与使用传统数据库JDBC的方式类似
•WebGUI是通过浏览器访问 Hive
•Hive 将元数据存储在数据库中,目前只支持 mysql、derby,下一版本会支持更多的数据库。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
•解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行
•Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from table 不会生成 MapRedcue 任务)
Metastore
•Metastore是系统目录(catalog)用于保存Hive中所存储的表的元数据(metadata)信息
•Metastore是Hive被用作传统数据库解决方案(如oracle和db2)时区别其它类似系统的一个特征
•Metastore包含如下的部分:
•Database 是表(table)的名字空间。默认的数据库(database)名为‘default’
•Table 表(table)的原数据包含信息有:列(list of columns)和它们的类型(types),拥有者(owner),存储空间(storage)和SerDei信息
•Partition 每个分区(partition)都有自己的列(columns),SerDe和存储空间(storage)。这一特征将被用来支持Hive中的模式演变(schema evolution)
Compiler
•Driver调用编译器(compiler)处理HiveQL字串,这些字串可能是一条DDL、DML或查询语句
•编译器将字符串转化为策略(plan)
•策略仅由元数据操作和HDFS操作组成,元数据操作只包含DDL语句,HDFS操作只包含LOAD语句
•对插入和查询而言,策略由map-reduce任务中的具有方向的非循环图(directedacyclic graph,DAG)组成
部分:Hive运行模式 
Hive运行模式
•Hive的运行模式即任务的执行环境
•分为本地与集群两种
•我们可以通过mapred.job.tracker 来指明
•设置方式
•hive > SET  mapred.job.tracker=local
第四部分:数据类型
原始数据类型
•Integers
TINYINT - 1 byte
SMALLINT - 2 byte
INT - 4 byte
BIGINT - 8 byte
•Boolean type
BOOLEAN - TRUE/FALSE
•Floating point numbers
FLOAT –单精度
DOUBLE – 双精度
•String type
STRING - sequence of characters in a specified character set
  
复杂数据类型
•Structs: 例子  {c INT; d INT}
•Maps (key-value tuples):. 例子'group' -> gid  M['group']
•Arrays (indexable lists):  例子[‘1', ‘2', ‘3']
•TIMESTAMP  0.8版本新加属性
第五部分:Hive的元数据存储
存储方式与模式
•Hive 将元数据存储在 数据库中
•连接到数据库模式有三种
•单用户模式
•多用户模式
•远程服务器模式
 
单用户模式
此模式连接到一个 In-memory 的数据库 Derby ,一般用于 Unit Test
 
多用户模式
通过网络连接到一个数据库中,是最经常使用到的模式
 
远程服务器模式
•用于非 Java 客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用 Thrift 协议通过MetaStoreServer 访问元数据库
 
部分:Hive的数据存储
Hive数据存储的基本概念
•Hive的数据存储是建立在Hadoop HDFS之上的
•Hive没有专门的数据存储格式
•存储结构主要包括:数据库、文件、表、视图
•Hive默认可以直接加载文本文件,还支持sequence file 、RCFile
•创建表时,我们直接告诉Hive数据的列分隔符与行分隔符,Hive即可解析数据
Hive的数据模型-数据库
•类似传统数据库的DataBase
•在第三方数据库里实际是一张表
•简单示例
•命令行hive > create database test_database;
Hive的数据模型-表
•Table 内部表
•Partition  分区表
•External Table 外部表
•Bucket  Table 
内部表
•与数据库中的 Table 在概念上是类似
•每一个 Table 在 Hive 中都有一个相应的目录存储数据
•例如,一个表 test,它在 HDFS 中的路径为:/ warehouse /test
• warehouse是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录
•所有的 Table 数据(不包括 External Table)都保存在这个目录中。
•删除表时,元数据与数据都会被删除
内部表简单示例
•创建数据文件test_inner_table.txt
•创建表
•create table test_inner_table (key string)
•加载数据
•LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table
•查看数据
•select * from test_inner_table
•select count(*) from test_inner_table
•删除表 drop table test_inner_table
分区表
•Partition 对应于数据库中的 Partition 列的密集索引
•在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中
•例如:test表中包含 date 和 position 两个 Partition,则对应于 date = 20120801, position = zh 的 HDFS 子目录为:/ warehouse /test/date=20120801/ position =zh
•对应于  = 20100801, position = US 的HDFS 子目录为;/ warehouse /xiaojun/date=20120801/ position =US
分区表简单示例
•创建数据文件test_partition_table.txt
•创建表
•create table test_partition_table (key string) partitioned by (dt string)
•加载数据
•LOAD DATA INPATH ‘filepath’ INTO TABLE test_partition_table partition (dt=‘2006’)
•查看数据
•select * from test_partition_table
•select count(*) from test_partition_table
•删除表 drop table test_partition_table
外部表
•指向已经在 HDFS 中存在的数据,可以创建 Partition
•它和 内部表 在元数据的组织上是相同的,而实际数据的存储则有较大的差异
•内部表 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除
• 外部表 只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个 外部表 时,仅删除该链接
外部表简单示例
•创建数据文件test_external_table.txt
•创建表
•create external table test_external_table (key string)
•加载数据
•LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table
•查看数据
•select * from test_external_table
•select count(*) from test_external_table
•删除表 drop table test_external_table
Bucket Table
•可以将表的列通过Hash算法进一步分解成不同的文件存储
•例如:将age列分散成20个文件,首先要对AGE进行Hash计算,对应为0的写入/warehouse/test/date=20120801/postion=zh/part-00000,对应为1的写入/warehouse/test/date=20120801/postion=zh/part-00001
•如果想应用很多的Map任务这样是不错的选择
Bucket Table简单示例
•创建数据文件test_bucket_table.txt
•创建表
•create table test_bucket_table (key string)
     clustered by (key) into 20 buckets
•加载数据
•LOAD DATA INPATH ‘filepath’ INTO TABLE test_bucket_table
•查看数据
•select * from test_bucket_table
•set hive.enforce.bucketing = true;
Hive的数据模型-视图
•视图与传统数据库的视图类似
•视图是只读的
•视图基于的基本表,如果改变,指增加不会影响视图的呈现;如果删除,会出现问题
•如果不指定视图的列,会根据select语句后的生成
•示例
•create view test_view as select * from test
部分:HiveUI介绍
启动UI
•配置
•hive-site.xml 添加
  <property>
       <name>hive.hwi.war.file</name>
       <value>lib/hive-hwi-0.8.1.war</value>
  </property>
•启动Hive的UI sh $HIVE_HOME/bin/hive --service hwi

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 联系不到淘宝卖家怎么办 没货买家不退款怎么办 买到假货没有发票怎么办 淘宝买的手机发票怎么办 淘宝上的发票丢了怎么办 淘宝买的东西电子发票怎么办 发票联给错顾客怎么办 客人让多给发票怎么办 13岁早晨上学叫不醒怎么办 官换机过保坏了怎么办 官换机在保坏了怎么办 留学生美国东西寄回国怎么办便宜 淘宝东西没到收货了怎么办 在淘宝上买东西被骗怎么办 网上把钱骗走了怎么办 在淘宝上卖号被骗了怎么办 如果淘宝商家保证金不够退款怎么办 天猫账号忘记了怎么办 姨妈来了10天了怎么办 微店商品无资质被下架怎么办 微店商品无资质怎么办 淘宝买东西提前确认收货了怎么办 苹果手机王者荣耀充值充多了怎么办 买家淘宝账号出现虚拟交易怎么办 贵州通登录不上怎么办 华为手机媒体声音小怎么办 苹果七内存满了怎么办 华为p9玩王者卡怎么办 鞋放健身房丢了怎么办 京东商家搞虚假活动怎么办 淘宝买的商品出现质量问题怎么办 买了重复的东西怎么办 借记卡在atm用不了怎么办 淘宝评论视频审核不通过怎么办 京东票据丢了怎么办 开拼多多找不到低价货源怎么办 要是校花追你该怎么办 苏宁自提逾期怎么办 天猫超市有问题怎么办 买的东西质量有问题怎么办 淘宝优惠额度大做不了怎么办