对Hive使用的归纳。
Hive理解
在使用hadoop时,开发MapReduce成本较大。为了降低开发成本,引入Hive作为媒介操控MapReduce。类似于汇编语言开发成本高,引入高级语言进行开发,编译执行时转化为汇编语言。
Hive模块结构
从上图看 Hive整体上可以分为三大块: 用户接口、元数据存储和Driver。
- 用户接口:包括 CLI、JDBC/ODBC、WebGUI。
- CLI(command line interface)为 shell 命令行
- JDBC/ODBC 是 Hive 的 JAVA 实现,与传统数据库JDBC 类似
- WebGUI 是通过浏览器访问 Hive。
- HiveServer2基于Thrift, 允许远程客户端使用多种编程语言如Java、Python向Hive提交请求
- 元数据存储:通常是存储在关系数据库如 mysql/derby 中。
- Hive 将元数据存储在数据库中。
- Hive 中的元数据包括
- 表的名字
- 表的列
- 分区及其属性
- 表的属性(是否为外部表等)
- 表的数据所在目录等。
- Driver:HQL 查询语句生成查询计划交由MapReduce执行。包括解释器、编译器、优化器、执行器,完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后由 MapReduce 调用执行。
Hive的使用
创建表
1 | CREATE TABLE student(classNo string, stuNo string, score int) row format delimited fields terminated by ','; |
说明:需要通过row format delimited fields terminated by ‘,’指定列的分隔符。
表创建完毕后,加载数据使用load命令。
1 | load data local inpath '文件名.txt' overwrite into table student; |
其中,文件名是放在执行hive命令的相对目录下。
内部表与外部表
数据由Hive自身管理,是内部表(managed table)。
1
CREATE TABLE 表名(字段名 字段类型,)row format delimited fields terminated by ',';
数据由HDFS管理,为外部表(external table)。创建时,使用external修饰。
1
CREATE External TABLE 表名(字段名 字段类型,)row format delimited fields terminated by ',' location '数据在hdfs上的路径';
区别:
- 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
- 删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
- 对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)
分区表
分区表实际上就是在表的目录下创建的子目录。通过指定某个分区从而减少查询范围。
创建
1 | create table 表名 (字段名,字段类型....) partitioned by (分区字段名 分区字段类型) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile; |
存储数据
1 | load data local inpath '/home/hadoop/tmp/employee.txt' into table 表名 partition(分区字段名字='分区的具体值'); |
添加分区
1 | alter table 表名 add if not exists partition(分区字段名字='分区的具体值'); |
动态分区
插入数据的时候指定分区的字段,会自动帮助创建分区所对应的文件夹。
1 | set hive.exec.dynamic.partition.mode=nonstrict; |
函数的使用
lateral view explode
explode函数 把复杂数据类型 array map 拆开 一行变多行
lateral view 和explode函数 配合使用 创建虚拟视图 可以把explode的结果和其它列一起查询
1
2select article_id,kw from articles
lateral view outer explode(key_words) t as kw
还有其他函数,可以通过以下命令查看函数说明。
- show functions; 显示所有函数
- desc function 函数名;
- desc function extended 函数名;
参考&致谢
https://blog.csdn.net/qq_36743482/article/details/78393678