0%

Hive使用

对Hive使用的归纳。

Hive理解

在使用hadoop时,开发MapReduce成本较大。为了降低开发成本,引入Hive作为媒介操控MapReduce。类似于汇编语言开发成本高,引入高级语言进行开发,编译执行时转化为汇编语言。

Hive模块结构

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上的路径';
  • 区别:

    1. 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
    2. 删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
    3. 对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(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
    2
    select 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

觉得不错?