[关闭]
@Lxjeng 2017-04-19T04:22:31.000000Z 字数 3099 阅读 739

Hive的安装与使用


一、简介

  • Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。

二、安装

选用MySQL作为元数据库,将mySql和Hive安装在master服务器上
统一给放到/usr/local/hadoop

(1)使用MySQL数据库的安装方式

安装mysql

  • sudo apt-get install mysql-server

启动mysql服务

  • sudo service mysql start

登录mysql 以root用户身份登录

  • mysql -uroot -ppassword

创建hive数据库,对其用户授权
(注意:mysql shell命令必须都以分号;结尾)

  • insert into mysql.user(Host,User,Password)values("localhost","hive",password("hive"));
  • create database hive;
  • grant all on hive.* to hive@'%' identified by 'hive';
  • grant all on hive.* to hive@'localhost' identified by 'hive';
  • flush privileges;

验证hive是否创建成功

  • show databases;
    此处输入图片的描述

退出mysql

  • exit

(2)安装Hive
下载hive并解压到/usr/local/hadoop

  • sudo tar -zxvf apache-hive-1.2.2-bin.tar.gz /usr/local/hadoop

重命名(非必要)

  • mv /usr/local/hadoop/apache-hive-1.2.2-bin/usr/local/hadoop/hive-1.2.2

配置环境变量

  • sudo vim /etc/profile

导入以下配置并使其生效

export HIVE_HOME=/usr/local/hadoop/apache-hive-1.2.2-bin
export PATH=HIVE_HOME/bin

  • source /etc/profile

修改hive-site.xml配置文件
(把Hive的元数据存储到MySQL中)
此处输入图片的描述

拷贝JDBC驱动包
将mysql的JDBC驱动包复制到Hive的lib目录下

  • (默认hive使用Derby数据库存放元数据,并且也集成了Derby数据库及连接驱动jar包,但此处我们换成了MySQL作为数据库,所以还必须得有MySQL的JDBC驱动包。)
  • cp mysql-connector-java.bin.jar /usr/local/hadoop/apache-hive-1.2.2-bin /lib

测试Hive
进入到Hive的安装目录,命令行:

  • cd /usr/local/hadoop/apache-hive-1.2.1-bin/bin
  • hive
    hive>show tables;

三、Hive的基本使用

(1)表操作

创建数据(文本以tab分隔)

  • vim /usr/local/data.txt

新建表

  • CREATE TABLE IF NOT EXISTS 表名(字段名 字段类型 COMMENT‘字段注释’,...);

导入数据

  • LOAD DATA LOCAL INPATH '/usr/local/data.txt' OVERWRITE INTO TABLE 表名;

删除表

  • DROP TABLE 表名;

查看表

  • show tables;

添加字段

  • ALTER TABLE 表名 ADD COLUMNS();

修改表名

  • ALTER TABLE oldName RENAME TO newName;

创建与已知表相同结构的表

  • CREATE TABLE copy_table LIKE table;

(2)表查询-与标准SQL语句类似

查询所有数据

  • SELECT * FROM 表名;

查询指定字段

  • SELECT 字段名 FROM 表名;

WHERE查询(不支持在 where 子句中的 in,exist或子查询)

  • select * from 表名 where 条件1 and 条件2;

all 和 distinct 选项

默认是 all,表示查询所有记录,distinct 表示去掉重复的记录

  • select all 字段列表 from 表名;
  • select distinct 字段列表 from 表名;

基于 Partition 的查询

点击了解更多Hive分区详情

在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念:

  • 分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。
  • 每个分区以文件夹的形式单独存在表文件夹的目录下。
  • 分区建表分为2种,一种是单分区,在表文件夹目录下只有一级文件夹目录。另外一种是多分区,表文件夹下出现多文件夹嵌套模式。

1)新建表时在后面添加PARTITIONED BY参数:

  • 单分区建表语句:create table day_table (id int, content string) partitioned by (dt string);
    单分区表,按天分区,在表结构中存在id,content,dt三列。

  • 双分区建表语句:create table day_hour_table (id int, content string) partitioned by (dt string, hour string);
    双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。

2)在已创建表上添加分区,ALTER TABLE ADD PARTITION ()
3)数据加载进分区表中

  • LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

4)查询指定分区的数据

  • SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08';

LIMIT 限制查询

限制查询的记录数,查询的结果是随机选择的

  • select * from table1 limit 5;

ORDER BY 排序查询

优化查询的速度,使用 hive.mapred.mode 属性,在strict模式下必须指定limit ,否则执行会报错

  • set hive.mapred.mode=strict;
  • select * from table order by uid limit 5;

SORT BY 查询

使用 sort by 可以指定执行的 Reduce 个数(set mapred.reduce.tasks=< number>)这样可以输出更多的数据。对输出的数据再执行归并排序,即可以得到全部结果。

(3)表插入

!! Hive 不支持用 insert 语句一条一条地进行插入操作,也不支持 update 操作。数据是以 load 的方式加载到建立好的表中。数据一旦导入就不可以修改。

创建一个表 insert_table,表结构和 table2 的结构相同,把 table2 表中的数据插入到新建的表 insert_table 中

  • hive> create table insert_table like table2;----复制表结构
  • hive> insert overwrite table insert_table select * from table2;

overwrite 关键字表示如果 insert_table 表中有数据就删除。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注