更新时间:2023-03-17 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. 下载客户端配置文件。

    • MRS 3.x之前版本,操作如下:
      1. 登录MRS Manager页面,具体请参见访问集群Manager,然后选择“服务管理”。
      2. 单击“下载客户端”

        “客户端类型”选择“仅配置文件”“下载路径”选择“服务器端”,单击“确定”开始生成客户端配置文件,文件生成后默认保存在主管理节点“/tmp/MRS-client”。

    • MRS 3.x及后续版本,操作如下:
      1. 登录FusionInsight Manager页面,具体请参见访问FusionInsight Manager(MRS 3.x及之后版本)
      2. 选择“集群 > 待操作集群的名称 > 概览 > 更多 > 下载客户端”。
      3. 下载集群客户端。

        “选择客户端类型”选择“仅配置文件”,选择平台类型,单击“确定”开始生成客户端配置文件,文件生成后默认保存在主管理节点“/tmp/FusionInsight-Client/”。

  2. 登录Manager的主管理节点。

    • MRS 3.x之前版本,操作如下:
      1. 在MRS控制台,选择“集群列表 > 现有集群”,单击集群名称,在“节点管理”页签中查看节点名称,名称中包含“master1”的节点为Master1节点,名称中包含“master2”的节点为Master2节点。

        MRS Manager的主备管理节点默认安装在集群Master节点上。在主备模式下,由于Master1和Master2之间会切换,Master1节点不一定是MRS Manager的主管理节点,需要在Master1节点中执行命令,确认MRS Manager的主管理节点。命令请参考2.d

      2. root用户使用密码方式登录Master1节点。
      3. 切换至omm用户。

        sudo su - root

        su - omm

      4. 执行以下命令确认MRS Manager的主管理节点。

        sh ${BIGDATA_HOME}/om-0.0.1/sbin/status-oms.sh

        回显信息中“HAActive”参数值为“active”的节点为主管理节点(如下例中“mgtomsdat-sh-3-01-1”为主管理节点),参数值为“standby”的节点为备管理节点(如下例中“mgtomsdat-sh-3-01-2”为备管理节点)。

        Ha mode
        double
        NodeName              HostName                      HAVersion          StartTime                HAActive             HAAllResOK           HARunPhase 
        192-168-0-30          mgtomsdat-sh-3-01-1           V100R001C01        2014-11-18 23:43:02      active               normal               Actived    
        192-168-0-24          mgtomsdat-sh-3-01-2           V100R001C01        2014-11-21 07:14:02      standby              normal               Deactived
      5. 使用root用户登录Manager的主管理节点,例如“192-168-0-30”节点。
    • MRS 3.x及后续版本,操作如下:
      1. root用户登录任意部署Manager的节点。
      2. 执行以下命令确认主备管理节点。

        sh ${BIGDATA_HOME}/om-server/om/sbin/status-oms.sh

        界面打印信息中“HAActive”参数值为“active”的节点为主管理节点(如下例中“node-master1”为主管理节点),参数值为“standby”的节点为备管理节点(如下例中“node-master2”为备管理节点)。

        HAMode 
        double 
        NodeName             HostName        HAVersion          StartTime                HAActive             HAAllResOK           HARunPhase  
        192-168-0-30         node-master1    V100R001C01        2020-05-01 23:43:02      active               normal               Actived     
        192-168-0-24         node-master2    V100R001C01        2020-05-01 07:14:02      standby              normal               Deactived 
      3. root用户登录主管理节点,并执行以下命令切换到omm用户。

        sudo su - omm

  3. 执行以下命令切换到客户端安装目录。

    提前已安装集群客户端,以下客户端安装目录为举例,请根据实际情况修改。

    cd /opt/client

  4. 执行以下命令,更新主管理节点的客户端配置。

    sh refreshConfig.sh /opt/client 客户端配置文件压缩包完整路径

    例如,执行命令:

    sh refreshConfig.sh /opt/client /tmp/FusionInsight-Client/FusionInsight_Cluster_1_Services_Client.tar

    界面显示以下信息表示配置刷新更新成功:

     ReFresh components client config is complete.
     Succeed to refresh components client config.

  5. 在Master节点使用客户端。

    1. 在已更新客户端的主管理节点,例如“192-168-0-30”节点,执行以下命令切换到客户端目录,客户端安装目录如:/opt/client。

      cd /opt/client

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

      source bigdata_env

    3. 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建Hive表的权限。如果当前集群未启用Kerberos认证,则无需执行此命令。

      kinit MRS集群用户

      例如,kinit hiveuser

    4. 直接执行Hive组件的客户端命令。

      beeline

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

    内部表的操作:

    1. 根据表1创建用户信息表user_info并添加相关数据,例如:

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

      MRS 1.x和MRS 3.x及后续版本,操作如下:

      insert into table user_info(id,name,gender,age,addr) values("12005000201","A","男",19,"A城市");

      MRS 2.x版本,操作如下:

      insert into table user_info values("12005000201","A","男",19,"A城市");

    2. 在用户信息表user_info中新增用户的学历、职称信息。

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

      alter table user_info add columns(education string,technical string);

    3. 根据用户编号查询用户姓名和地址。

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

      select name,addr from user_info where id='12005000201';

    4. 删除用户信息表。

      drop table user_info;

    外部分区表的操作:

    创建外部分区表并导入数据:

    1. 创建外部表数据存储路径:

      hdfs dfs -mkdir /hive/

      hdfs dfs -mkdir /hive/user_info

    2. 建表:

      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为数据文件的路径。

    3. 导入数据。
      1. 使用insert语句插入数据。

        insert into user_info partition(year="2018") values ("12005000201","A","男",19,"A城市");

      2. 使用load data命令导入文件数据。
        1. 根据表1数据创建文件。如,文件名为txt.log,以空格拆分字段,以换行符作为行分隔符。
        2. 上传文件至hdfs。

          hdfs dfs -put txt.log /tmp

        3. 加载数据到表中。

          load data inpath '/tmp/txt.log' into table user_info partition (year='2011');

    4. 查询导入数据。

      select * from user_info;

    5. 删除用户信息表。

      drop table user_info;

    6. 执行以下命令退出客户端。

      !q