更新时间:2025-06-10 GMT+08:00

快速使用Hive进行数据分析

操作场景

Hive是基于Hadoop的一个数据仓库工具,可将结构化的数据文件映射成一张数据库表,并提供类SQL的功能对数据进行分析处理,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,适合用于数据仓库的统计分析。

背景信息

假定用户开发一个应用程序,用于管理企业中的使用A业务的用户信息,使用Hive客户端实现A业务操作流程如下:

普通表的操作:

  • 创建用户信息表user_info
  • 在用户信息中新增用户的学历、职称信息。
  • 根据用户编号查询用户姓名和地址。
  • A业务结束后,删除用户信息表。
表1 用户信息

编号

姓名

性别

年龄

地址

12005000201

A

19

A城市

12005000202

B

23

B城市

12005000203

C

26

C城市

12005000204

D

18

D城市

12005000205

E

21

E城市

12005000206

F

32

F城市

12005000207

G

29

G城市

12005000208

H

30

H城市

12005000209

I

26

I城市

12005000210

J

25

J城市

操作步骤

  1. 以客户端安装用户,登录安装客户端的节点,客户端安装详细操作请参见安装客户端(3.x及之后版本)
  2. 执行以下命令切换到客户端目录,客户端安装目录如:/opt/client

    cd /opt/client

  3. 执行以下命令配置环境变量。

    source bigdata_env

  4. 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建Hive表的权限,具体请参见创建角色配置拥有对应权限的角色,参考创建用户为用户绑定对应角色。如果当前集群未启用Kerberos认证,则无需执行此命令。

    kinit MRS集群用户

    例如,kinit hiveuser

  5. 运行Hive客户端命令,实现A业务。

    • 内部表操作
      1. 执行以下命令登录Hive客户端命令行:
        beeline
      2. 根据表1创建用户信息表user_info并添加相关数据,例如:

        创建表user_info

        create table user_info(id string,name string,gender string,age int,addr string);

        向表user_info中插入数据:

        insert into table user_info(id,name,gender,age,addr) values("12005000201","A","男",19,"A城市");
      3. 在用户信息表user_info中新增用户的学历、职称信息。

        以增加编号为12005000201的用户的学历、职称信息为例,其他用户类似。

        alter table user_info add columns(education string,technical string);
      4. 根据用户编号查询用户姓名和地址。

        以查询编号为12005000201的用户姓名和地址为例,其他用户类似。

        select name,addr from user_info where id='12005000201';
      5. 删除用户信息表。
        drop table user_info;
      6. 执行以下命令退出Hive客户端。
        !q
    • 外部分区表操作
      1. 可使用insert语句直接向外部表中插入数据,也可以使用load data命令导入HDFS中的文件数据到外部表中。如果需要使用load data命令导入文件数据,需执行以下操作:
        1. 根据表1数据创建文件。例如,文件名为“txt.log”,以空格拆分字段,以换行符作为行分隔符。
        2. 执行以下命令上传文件至HDFS中,例如“/tmp”目录下。
          hdfs dfs -put txt.log /tmp
      2. 执行以下命令创建外部表数据存储路径:

        创建“/hive”目录:

        hdfs dfs -mkdir /hive/

        创建“/hive/user_info”目录:

        hdfs dfs -mkdir /hive/user_info
      3. 执行以下命令登录Hive客户端命令行:
        beeline
      4. 执行以下命令创建表:
        create external table user_info(id string,name string,gender string,age int,addr string) partitioned by(year string) row format delimited fields terminated by ' ' lines terminated by '\n' stored as textfile location '/hive/user_info';

        其中:

        • fields terminated:表示分隔的字符,如按空格分隔,则值为' '。
        • lines terminated:表示分行的字符,如按换行分隔,则值为'\n'。
        • /hive/user_info:存储表user_info数据的HDFS路径。
      5. 导入数据。
        • 使用insert语句插入数据,以插入编号为12005000201的用户相关信息为例,其他用户类似。
          insert into user_info partition(year="2018") values ("12005000201","A","男",19,"A城市");
        • 使用load data命令导入文件数据。
          load data inpath '/tmp/txt.log' into table user_info partition (year='2011');

          其中,“/tmp/txt.log”为5.a上传至HDFS的数据文件。

      6. 执行以下命令查询导入数据。
        select * from user_info;
      7. 执行以下命令删除用户信息表。
        drop table user_info;
      8. 执行以下命令退出Hive客户端。
        !q