设为首页 加入收藏

TOP

Hadoop 复习整理(Hive-(概念))
2019-02-13 01:05:03 】 浏览:60
Tags:Hadoop 复习 整理 Hive- 概念

Hive体系结构

用户接口
CLI:Cli 启动的时候,会同时启动一个Hive 副本。
JDBC客户端:封装了Thrift,java应用程序,可以通过指定的主机和端口连接到在另一个进程中运行的hive服务器
ODBC客户端:ODBC驱动允许支持ODBC协议的应用程序连接到Hive。
WUI 接口:是通过浏览器访问Hive
Thrift服务器:
基于socket通讯,支持跨语言。Hive Thrift服务简化了在多编程语言中运行Hive的命令。绑定支持C++,Java,PHP,Python和Ruby语言。

解析器
编译器:完成HQL 语句从词法分析、语法分析、编译、优化以及执行计划的生成。
优化器:是一个化组件,当前它的规则是:列修剪,谓词下压。
执行器会顺序执行所有的Job。如果Task链不存在依赖关系,可以采用并发执行的方式执行Job。
数据库:
Hive的数据由两部分组成:数据文件和元数据。元数据用于存放Hive库的基础信息,它存储在关系数据库中,如mysql、derby。元数据包括:数据库信息、表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等

Hive也用数据库,不过只将元数据存储在数据库中,数据存储在HDFS数据仓库中。


分区
分区列并非实际存储的列数据,分区只是表目录下嵌套的目录。
可以按照各种维度对表进行分区。
分区可以缩小查询范围。
分区是在创建表的时候用PARTITION BY子句定义的。
加载数据到分区使用LOAD语句,且要显示的指定分区值。
使用SHOW PARTITIONS语句查看Hive表下有哪些分区。
使用SELECT语句中指定分区,Hive只扫描指定分区数据。

注:Hive表分区分为两种,静态分区和动态分区。静态分区和动态分区的区别在于导入数据时,是手动输入分区名称,还是通过数据来判断数据分区。对于大数据批量导入来说,显然采用动态分区更为简单方便。
动态分区需要配置:
hive.exec.dynamic.partition=true
hive.exec.dynamic.partition.mode=nostrict(允许所有的分区都为动态的)。
动态分区只能通过insert overwrite table table_nameselect …这样的语句导入数据。
静态分区可以通过多种方式导入数据:load/ITS/hdfs拷贝等。
静态分区导入不灵活,导入前要预先知道导入的分区。



桶是表上附加的额外结构,可以提高查询效率。有利于做map-side-join。
使“取样”更方便高效。
使用CLUSTER BY子句来指定划分桶所用的列和要划分桶的个数。
create table bucketed_user(id int,name string) clustered by (id) into 4 buckets;
对桶中的数据可以做排序。使用SORTED BY子句。
create table bucketed_user(id int, name string) clustered by(id) sorted by (id asc) into 4 buckets;
不建议我们自己分桶,建议让Hive划分桶。
向分桶中填充数据前,需要设置hive.enforce.bucketing设置为true。
insert overwrite table bucket_users select * from users;
实际上桶对应于MapReduce的输出文件分区:一个作业产生的桶和reduce任务个数相同。


Hive表-存储格式
Hive从两个维度对表的存储进行管理:“行格式”(row format)和“文件格式”(file format)。
行格式:一行中数据的存储格式。按照hive的术语,行格式的定义由SerDe定义,即序列化和反序列化。也就是查询数据时,SerDe将文件中字节形式的数据行反序列化为Hive内部操作数据行时使用的对象形式。Hive向表中插入数据时,序列化工具会将Hive的数据行内部表示形式序列化为字节形式并写到输出文件中去。
文件格式:最简单的文件格式是纯文本文件,但是也可以使用面向列的和面向行的二进制文件格式。二进制文件可以是顺序文件、Avro、RCFile、ORC、parquet文件。


默认存储格式-分隔的文本。
Create table …等价于create table … ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\001’
COLLECTION ITEMS TERMINATED BY ‘\002’ MAP KEYS TERMINATED BY ‘\003’ LINES TERMINATED BY ‘\n’STORED AS TEXTFILE;
Hive内部默认使用LazySimpleSerDe处理分隔文本。

Hive现有的文件格式


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hive的访问接口 | Allen's Wo.. 下一篇Sqoop   ------- 将mysql的..