前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive入门

Hive入门

作者头像
kongxx
发布2018-05-14 14:07:45
1.5K0
发布2018-05-14 14:07:45
举报

介绍

Hive 是一个基于 Hadoop 的数据仓库工具,它可以将结构化数据文件映射成一张表,然后通过类似 SQL 的查询语句来执行查询。这些查询语句在Hive中被称作HQL,这些 HQL 会被翻译成 MapReduce 作业来执行。

Hive 把表和字段转换成 HDFS 中的文件夹和文件,并将这些元数据保持在关系型数据库中,如 derby 或 mysql。

Hive 查询的数据存储在HDFS上,运行在Yarn上。

Hive 适合做离线数据分析,如:批量处理和延时要求不高场景。

安装

安装 Hadoop

由于 Hive 是基于 Hadoop 的,所以需要先准备一个 Hadoop 环境。Hadoop 的安装参考我前面的文章。

安装 Hive

首先从下面地址下载最新版本的 Hive,这里我们使用 2.3.2 版。

下载并解压安装包

代码语言:javascript
复制
$ wget -c https://dist.apache.org/repos/dist/release/hive/hive-2.3.2/apache-hive-2.3.2-bin.tar.gz
$ tar zxvf apache-hive-2.3.2-bin.tar.gz
$ cd apache-hive-2.3.2-bin

设置环境变量

代码语言:javascript
复制
$ export JAVA_HOME=/opt/jdk8
$ export HADOOP_HOME=/apps/hadoop-3.0.0
$ export HIVE_HOME=/apps/apache-hive-2.3.2-bin

初始化 Derby 数据库,Hive 默认使用 Derby 数据库来保存元数据。生产环境建议使用 Mysql。

代码语言:javascript
复制
$ bin/schematool -dbType derby -initSchema

运行 Hive

启动 Shell

通常我们使用 Hive 都是使用命令行工具来执行一些数据的更新和查询,下面命令就会启动 Hive 的命令行终端。

代码语言:javascript
复制
$ bin/hive
> hive

查看表

代码语言:javascript
复制
hive> show tables;

创建表

代码语言:javascript
复制
hive> CREATE TABLE users(id int, username string, password string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

插入查询数据

这里我们先准备一个数据文件 users.dat,内容如下:

代码语言:javascript
复制
1,user1,password1
2,user2,password2
3,user3,password3
4,user4,password4
5,user5,password5

向数据表导入数据

代码语言:javascript
复制
# 从本地文件系统导入
hive> LOAD DATA LOCAL INPATH '/tmp/users.dat' INTO TABLE users;

# 从 HDFS 导入
hive> LOAD DATA INPATH '/tmp/users.dat' INTO TABLE users;

导入数据后,使用 HQL 来查询结果

代码语言:javascript
复制
hive> select * from users;
OK
1       user1   password1
2       user2   password2
3       user3   password3
4       user4   password4
5       user5   password5

此时,我们查看一下这些数据在 HDFS 上是怎样存储的,我在查看

代码语言:javascript
复制
hive> dfs -ls /user/hive/warehouse/users
Found 1 items
-rwxr-xr-x   2 jhadmin supergroup         54 2018-02-05 00:14 /user/hive/warehouse/users/users.dat

hive> dfs -cat /user/hive/warehouse/users/users.dat
1,user1,password1
2,user2,password2
3,user3,password3
4,user4,password4
5,user5,password5

下面我们再插入一条记录看看,此时终端会出现MapReduce作业的相关信息。

代码语言:javascript
复制
hive> INSERT INTO TABLE users(id, username, password) values (6, 'user6', 'password6');
... (MapReduce Job output)
代码语言:javascript
复制
hive> select * from users;
OK
6       user6   password6
1       user1   password1
2       user2   password2
3       user3   password3
4       user4   password4
5       user5   password5

查看一下 HDFS 的文件信息,可以看到新添加了一个文件000000_0,其中保存着上面插入语句保存的数据。

代码语言:javascript
复制
hive> dfs -ls /user/hive/warehouse/users
Found 2 items
-rwxr-xr-x   2 jhadmin supergroup         22 2018-02-05 00:26 /user/hive/warehouse/users/000000_0
-rwxr-xr-x   2 jhadmin supergroup         54 2018-02-05 00:14 /user/hive/warehouse/users/users.dat

hive> dfs -cat /user/hive/warehouse/users/000000_0
6,username6,password6

从上面的结果可以看到,每次单独的 INSERT 语句都会至少产生一个文件,因此在生产环境下还是要避免这样的插入操作,而应该使用批量导入来写入数据。

上面的查询语句 “select * from users;” 太简单,以至于看不出他是不是使用的 MapReduce 作业来执行查询的,下面我们把查询语句稍微修改一下,就可以看出 Hive 会把 HQL 转换成 MapReduce 作业来执行了。

代码语言:javascript
复制
hive> select * from users order by id;
... (MapReduce Job output)
OK
1       user1   password1
2       user2   password2
3       user3   password3
4       user4   password4
5       user5   password5
6       user6   password6
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.03.01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 安装
    • 安装 Hadoop
      • 安装 Hive
      • 运行 Hive
        • 启动 Shell
          • 查看表
            • 创建表
              • 插入查询数据
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档