弹性 MapReduce Hive 基础操作

这篇演示如何使用 EMR 上的 Hive 创建库表、导入数据、执行查询等基础操作。

相关产品
弹性 MapReduce 产品页,含版本规格、价格与购买入口。

一、开发准备

·确认你已经开通了腾讯云,并且创建了一个 EMR 集群,详情参考创建集群。

·在创建 EMR 集群时在软件配置界面选择 Hive 组件。

·示例中存在需要访问腾讯云对象存储 COS 的可选内容,可参考 创建存储桶 在 COS 中创建一个存储桶(Bucket),并于 EMR 控制台 实例信息 页面开启对象存储授权。

注意:说明:

二、准备样例数据

登录到 Master 节点,在 EMR 命令行使用以下命令切换到 hadoop 用户,并进入 Hive 文件夹:

su hadoopcd /usr/local/service/hive

新建一个 bash 脚这篇件 gen_data.sh,在其中添加以下代码:

#!/bin/bashMAXROW=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;OKdefaultTime taken: 0.26 seconds, Fetched: 1 row(s)

使用 CREATE DATABASE 语法创建一个数据库 test:

hive> create database if not exists test; OKTime taken: 0.176 seconds

使用 USE 语法转到刚刚创建的 test 数据库下:

hive> use test; OKTime 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, 并指定列分割符为','OKTime taken: 0.204 seconds

最后可用 SHOW TABLES 语法查看表是否创建成功:

hive> show tables;OKhive_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;OK30847 "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;OK1000000Time 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/CurrentOKTime taken: 2.327 seconds

使用 DROP DATABASE 语法来删除 Hive 库:

hive> drop database if exists test;OKTime taken: 0.531 seconds

赞 (0)
上一篇 4天前
下一篇 4天前