文章目录

  • 一、Hive 安装
  • 1.1 Hive 安装部署
  • 1.2 将本地文件导入 Hive
  • 1.3 MySql 安装
  • 1.4 Hive 元数据配置到 MySql
  • 1.5 HiveJDBC 访问
  • 1.6 Hive 常用交互命令
  • 1.7 Hive 常见属性配置
  • 二、Hive 数据类型
  • 2.1 基本数据类型
  • 2.2 集合数据类型
  • 2.3 类型转化


一、Hive 安装

1.1 Hive 安装部署

  1. Hive 安装及配置
    把 apache-hive-1.2.1-bin.tar.gz 上传到 linux的/opt/software 目录下
    解压 apache-hive-1.2.1-bin.tar.gz 到 /opt/module/ 目录下面
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/

修改 apache-hive-1.2.1-bin.tar.gz 的名称为 hive

mv apache-hive-1.2.1-bin/ hive

修改 /opt/module/hive/conf 目录下的 hive-env.sh.template 名称为 hive-env.sh

mv hive-env.sh.template hive-env.sh

配置 hive-env.sh 文件

// 配置 HADOOP_HOME 路径
export HADOOP_HOME=/opt/module/hadoop-2.7.2
// 配置 HIVE_CONF_DIR 路径
export HIVE_CONF_DIR=/opt/module/hive/conf
  1. Hadoop 集群配置
    启动 hdfs 和 yarn
sbin/start-dfs.sh
sbin/start-yarn.sh

在 HDFS 上创建 /tmp和/user/hive/warehouse 两个目录并修改他们的同组权限可写

bin/hadoop fs -mkdir /tmp
bin/hadoop fs -mkdir -p /user/hive/warehouse
bin/hadoop fs -chmod g+w /tmp
bin/hadoop fs -chmod g+w /user/hive/warehouse
  1. Hive 基本操作
// 运行 hive 的 bin 目录下 hive 命令即可及启动 hive
[maben996@hadoop102 hive]$ bin/hive

1.2 将本地文件导入 Hive

// 启动 hive 
bin/hive
// 显示数据库
show databases;
// 使用 default 数据库
use default;
// 显示 default 数据库中的表
show tables;
// 创建 student 表, 并声明文件分隔符"\t"
create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
// 加载 /opt/module/datas/student.txt 文件到 student 数据库表中
load data local inpath '/opt/module/datas/student.txt' into table student;
// Hive 查询结果
hive> select * from student;
OK
1001	zhangshan
1002	lishi
1003	zhaoliu
Time taken: 0.266 seconds, Fetched: 3 row(s)

再打开一个客户端窗口启动 hive,会产生 java.sql.SQLException 异常。

Metastore 默认存储在自带的 derby 数据库中,而 derby 数据库只允许单用户登录,推荐使用 MySQL 存储 Metastore

1.3 MySql 安装

  1. 安装包准备
    查看 mysql 是否安装,如果安装了,卸载 mysql
[maben996@hadoop102 ~]# rpm -qa|grep -i mysql
mysql-libs-5.1.73-7.el6.x86_64
// 卸载
rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64

解压 mysql-libs.zip 文件到当前目录

unzip mysql-libs.zip
// 解压后进入 文件夹可查看如下到3个文件,分别为客户端、驱动、服务端
MySQL-client-5.6.24-1.el6.x86_64.rpm
mysql-connector-java-5.1.27.tar.gz
MySQL-server-5.6.24-1.el6.x86_64.rpm
  1. 安装 MySql 服务器
    安装 mysql 服务端
rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm

查看产生的随机密码

cat /root/.mysql_secret
OEXaQuS8IWkG19Xs

查看 mysql 状态

service mysql status

启动 mysql

service mysql start
  1. 安装 MySql 客户端
    安装 mysql 客户端
rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm

链接 mysql

mysql -u root -pOEXaQuS8IWkG19Xs

修改密码

SET PASSWORD=PASSWORD('maben996');

退出 mysql

exit
  1. MySql 中 user 表中主机配置
    配置只要是 root 用户+密码,在任何主机上都能登录 MySQL 数据库。
    进入 mysql
mysql -u root -p maben996

显示数据库

show databases;

使用 mysql 数据库

use mysql;

展示 mysql 数据库中的所有表

show tables;

展示 user 表的结构

desc user;

查询 user 表

select User, Host, Password from user;

修改 user 表,把 Host 表内容修改为 %

update user set host='%' where host='localhost';

删除 root 用户的其他 host

delete from user where Host != 'hadoop102';

刷新

flush privileges;

退出

quit

1.4 Hive 元数据配置到 MySql

  1. 驱动拷贝
    在 /opt/software/mysql-libs 目录下解压 mysql-connector-java-5.1.27.tar.gz 驱动包
tar -zxvf mysql-connector-java-5.1.27.tar.gz

拷贝 mysql 驱动 mysql-connector-java-5.1.27-bin.jar 到 /opt/module/hive/lib/

cp mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/
  1. 配置 Metastore 到 MySql
    在 /opt/module/hive/conf 目录下创建一个 hive-site.xml
[maben996@hadoop102 conf]$ vi hive-site.xml

根据官方文档配置参数,拷贝数据到 hive-site.xml 文件中

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<property>
	  <name>javax.jdo.option.ConnectionURL</name>
	  <value>jdbc:mysql://hadoop102:3306/metastore?createDatabaseIfNotExist=true</value>
	  <description>JDBC connect string for a JDBC metastore</description>
	</property>

	<property>
	  <name>javax.jdo.option.ConnectionDriverName</name>
	  <value>com.mysql.jdbc.Driver</value>
	  <description>Driver class name for a JDBC metastore</description>
	</property>

	<property>
	  <name>javax.jdo.option.ConnectionUserName</name>
	  <value>root</value>
	  <description>username to use against metastore database</description>
	</property>

	<property>
	  <name>javax.jdo.option.ConnectionPassword</name>
	  <value>maben996</value>
	  <description>password to use against metastore database</description>
	</property>
</configuration>
  1. 多窗口启动 Hive 测试
    先启动 MySQL
mysql -u root -p maben996

查看有几个数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql             |
| performance_schema |
| test               |
+--------------------+

再次打开多个窗口,分别启动 hive

bin/hive

启动 hive 后,回到 MySQL 窗口查看数据库,显示增加了 metastore 数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| metastore          |
| mysql             |
| performance_schema |
| test               |
+--------------------+

1.5 HiveJDBC 访问

  1. 启动 hiveserver2 服务
[maben996@hadoop102 hive]$ bin/hiveserver2
  1. 启动 beeline
[maben996@hadoop102 hive]$ bin/beeline
Beeline version 1.2.1 by Apache Hive
beeline>
  1. 连接 hiveserver2
beeline> !connect jdbc:hive2://hadoop102:10000(回车)
Connecting to jdbc:hive2://hadoop102:10000

Enter username for jdbc:hive2://hadoop102:10000: maben996(回车)

Enter password for jdbc:hive2://hadoop102:10000: (直接回车)

Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
// 查看数据库
0: jdbc:hive2://hadoop102:10000> show databases;
+----------------+--+
| database_name  |
+----------------+--+
| default        |
| hive_db2       |
+----------------+--+

1.6 Hive 常用交互命令

“-e”不进入 hive 的交互窗口执行 sql 语句

bin/hive -e "select id from student;"

“-f”执行脚本中sql语句

// 文件中写入正确的 sql 语句 select * from student;
bin/hive -f /opt/module/datas/hivef.sql
// 执行文件中的 sql 语句并将结果写入文件中
bin/hive -f /opt/module/datas/hivef.sql  > /opt/module/datas/hive_result.txt

在 hive cli 命令窗口中查看 hdfs 文件系统

dfs -ls /;

在 hive cli 命令窗口中查看本地文件系统

! ls /opt/module/datas;	# 该情况在 beeline 模式下无效

查看在 hive 中输入的所有历史命令

// 进入到当前用户的根目录 /root 或 /home/maben996 查看 .hivehistory

1.7 Hive 常见属性配置

  1. Hive数据仓库位置配置
    Default 数据仓库的最原始位置是在 hdfs 上的:/user/hive/warehouse 路径下。
    在仓库目录下,没有对默认的数据库 default 创建文件夹。如果某张表属于 default 数据库,直接在数据仓库目录下创建一个文件夹。
    修改 default 数据仓库原始位置(将 hive-default.xml.template 如下配置信息拷贝到 hive-site.xml 文件中)。
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>

配置同组用户有执行权限

bin/hdfs dfs -chmod g+w /user/hive/warehouse
  1. 查询后信息显示配置
    在 hive-site.xml 文件中添加如下配置信息,就可以实现显示当前数据库,以及查询表的头信息配置。
<property>
	<name>hive.cli.print.header</name>
	<value>true</value>
</property>

<property>
	<name>hive.cli.print.current.db</name>
	<value>true</value>
</property>

重新启动 hive,再次查询会看到表头。

  1. Hive 运行日志信息配置
    Hive 的 log 默认存放在 /tmp/maben996/hive.log 目录下(当前用户名下)
    修改 hive 的 log 存放日志到 /opt/module/hive/logs
// 修改 /opt/module/hive/conf/hive-log4j.properties.template 文件名称为 hive-log4j.properties
mv hive-log4j.properties.template hive-log4j.properties
// 在 hive-log4j.properties 文件中修改 log 存放位置
hive.log.dir=/opt/module/hive/logs
  1. 参数配置方式
    查看当前所有的配置信息
hive> set
  1. 配置文件方式

默认配置文件:hive-default.xml

用户自定义配置文件:hive-site.xml (用户自定义配置会覆盖默认配置)

  1. 命令行参数方式
// 启动 Hive 时,可以在命令行添加 -hiveconf param=value 来设定参数
// 本次启动 hive ,关闭库名显示
bin/hive -hiveconf hive.cli.print.current.db=false;
  1. 参数声明方式
// 启动 Hive 以后,使用 SET 关键字设定参数
// 打开 库名显示
hive> set hive.cli.print.current.db=ture;

上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。

二、Hive 数据类型

2.1 基本数据类型

Hive数据类型

Java数据类型

长度

例子

TINYINT

byte

1byte有符号整数

20

SMALINT

short

2byte有符号整数

20

INT

int

4byte有符号整数

20

BIGINT

long

8byte有符号整数

20

BOOLEAN

boolean

布尔类型,true或者false

TRUE FALSE

FLOAT

float

单精度浮点数

3.14159

DOUBLE

double

双精度浮点数

3.14159

STRING

string

可以指定字符集。

‘now is the time’ “for all good men”

TIMESTAMP

时间类型

BINARY

字节数组

Hive 的 String 类型相当于数据库的 varchar 类型,该类型是一个可变的字符串,理论上它可以存储 2GB 的字符数。

2.2 集合数据类型

数据类型

描述

语法示例

STRUCT

和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。

struct()

MAP

MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素。

map()

ARRAY

数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。

Array()

// 创建本地测试文件 test.txt
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing

MAP,STRUCT 和 ARRAY 里的元素间关系都可以用同一个字符表示,这里用“_”。

Hive 上创建测试表 test

create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';

字段解释:

row format delimited fields terminated by ‘,’ – 列分隔符

collection items terminated by ‘_’ --MAP STRUCT 和 ARRAY 的分隔符(数据分割符号)

map keys terminated by ‘:’ – MAP中的key与value的分隔符

lines terminated by ‘\n’; – 行分隔符

导入文本数据到测试表

load data local inpath ‘/opt/module/datas/test.txt’into table test

访问三种集合列里的数据,以下分别是 ARRAY,MAP,STRUCT 的访问方式

select friends[1],children['xiao song'],address.city from test where name="songsong";
_c0     _c1     city
lili    18      beijing

2.3 类型转化

Hive 的原子数据类型是可以进行隐式转换的,类似于 Java 的自动类型提升,也可以使用 CAST 进行强制类型转换。

可以使用 CAST 操作显示进行数据类型转换

例:CAST(‘1’ AS INT) 将把字符串’1’ 转换成整数1;如果强制类型转换失败,如执行 CAST(‘X’ AS INT),表达式返回空值 NULL。