tencent cloud

文档反馈

Hive 基础操作

最后更新时间:2024-10-30 11:25:38
    本文为您演示如何使用 EMR 上的 Hive 创建库表、导入数据、执行查询等基础操作。

    开发准备

    确认您已经开通了腾讯云,并且创建了一个 EMR 集群,详情参考创建集群
    在创建 EMR 集群时在软件配置界面选择 Hive 组件。
    示例中存在需要访问腾讯云对象存储 COS 的可选内容,可参考 创建存储桶 在 COS 中创建一个存储桶(Bucket),并于 EMR 控制台 实例信息 页面开启对象存储授权。
    说明:
    登录 EMR 节点的方式可参考登录 Linux 实例。在集群详情页中选择 集群资源 > 资源管理,单击对应节点资源 ID 进入云服务器列表,单击右侧登录,即可使用 WebShell 登录实例。
    登录 Linux 实例用户名默认为 root,密码为创建 EMR 时用户自己输入的密码。输入正确后,即可进入命令行界面。
    本文操作均是以 hadoop 用户进行,请在登录命令行界面后切换用户身份。

    准备样例数据

    登录到 Master 节点,在 EMR 命令行使用以下命令切换到 hadoop 用户,并进入 Hive 文件夹:
    su hadoop
    cd /usr/local/service/hive
    新建一个 bash 脚本文件 gen_data.sh,在其中添加以下代码:
    #!/bin/bash
    MAXROW=1000000 #指定生成数据行数
    for((i = 0; i < $MAXROW; i++))
    do
    echo $RANDOM, \\"$RANDOM\\"
    done
    并按如下方式赋权并执行脚本,该脚本文件会生成 1000000 个随机数对,并且保存到文件 hive_test.data 中:
    chmod +x 脚本名称
    ./gen_data.sh > hive_test.data
    使用如下命令把生成的测试数据先上传到 HDFS 中,其中 ${hdfspath} 为 HDFS 上的您存放文件的路径:
    hdfs dfs -put ./hive_test.data /${hdfspath}
    也可以使用 COS 上面的数据。将数据上传到 COS 中,如果数据在本地,那么可以使用 COS 控制台来上传数据。如果数据在 EMR 集群,那么使用如下命令来上传数据,其中 ${bucketname} 为您创建的 COS 桶名:
    hdfs dfs -put ./hive_test.data cosn://${bucketname}/

    Hive 基础操作

    登录 EMR 集群的 Master 节点,切换 hadoop 用户并通过 Hive 客户端进入 Hive 命令行:
    hive

    创建库表

    使用 SHOW 语法展示当前所有数据库:
    hive> show databases;
    OK
    default
    Time taken: 0.26 seconds, Fetched: 1 row(s)
    使用 CREATE DATABASE 语法创建一个数据库 test:
    hive> create database if not exists test;
    OK
    Time taken: 0.176 seconds
    使用 USE 语法转到刚刚创建的 test 数据库下:
    hive> use test;
    OK
    Time taken: 0.176 seconds
    使用 CREATE TABLE语法在 test 数据库下创建一个新的名为 hive_test 的内部表:
    hive> create table hive_test (a int, b string)
    hive> ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
    -- 创建数据表 hive_test, 并指定列分割符为','
    OK
    Time taken: 0.204 seconds
    最后可用 SHOW TABLES 语法查看表是否创建成功:
    hive> show tables;
    OK
    hive_test
    Time taken: 0.176 seconds, Fetched: 1 row(s)

    导入数据

    对于存放在 HDFS 中的数据,使用如下指令来将其导入表中:
    hive> load data inpath "/${hdfspath}/hive_test.data" into table hive_test;
    对于存放在 COS 中的数据,使用如下指令来将其导入表中:
    hive> load data inpath "cosn://${bucketname}/hive_test.data" into table hive_test;
    
    也可以将存放在 EMR 集群本地的数据导入到 Hive 中,使用如下指令:
    hive>load data local inpath "/${localpath}/hive_test.data" into table hive_test;
    说明:
    其中 ${hdfspath} 为 HDFS 上的您存放文件的路径,${bucketname} 为您的 COS 桶名, ${localpath} 为您的 EMR 集群本地存放数据的路径。导入完成后,源数据会被删除。

    执行查询

    查询表中前10个元素:
    hive> select * from hive_test limit 10;
    OK
    30847 "31583"
    14887 "32053"
    19741 "16590"
    8104 "20321"
    29030 "32724"
    27274 "5231"
    10028 "22594"
    924 "32569"
    10603 "27927"
    4018 "30518"
    Time taken: 2.133 seconds, Fetched: 10 row(s)
    统计表中一共有多少行数据:
    hive> select count(*) from hive_test;
    OK
    1000000
    Time taken: 18.504 seconds, Fetched: 1 row(s)

    删除库表

    使用 DROP TABLE 语法来删除 Hive 表:
    hive> drop table if exists hive_test;
    Moved: 'hdfs://HDFS/usr/hive/warehouse/hive_test' to trash at: hdfs://HDFS/user/hadoop/.Trash/Current
    OK
    Time taken: 2.327 seconds
    使用 DROP DATABASE 语法来删除 Hive 库:
    hive> drop database if exists test;
    OK
    Time taken: 0.531 seconds
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持