分布式数据仓库 Hive
- 7.1 Hive 概述
- 7.1.1 Hive 的定义
- 7.1.2 Hive 的设计特征
- 7.1.3 Hive 的体系结构
- 7.2 Hive 的伪分布式安装
- 7.2.1 安装 Hive 的前提条件
- 7.2.2 解压并配置环境变量
- 7.2.3 安装MySQL
- 7.2.4 配置Hive
- 7.2.5 验证 Hive
- 7.3 Hive QL 的基础功能
- 7.3.1 操作数据库
- 7.3.2 创建表
- 7.3.3 数据准备
7.1 Hive 概述
Hive 基于Hadoop
OLAP
OLTP
7.1.1 Hive 的定义
- Hive是基于Hadoop的一个数据仓库工具,将结构化数据文件映射为一张数据库表,提供简单的SQL查询功能,将SQL语句转化为MapReduce任务进行运行,适合数据仓库的统计分析。
- Hive的最佳使用场合是大数据集的批处理作业
- Hive用来进行数据提取转化加载,定义了简单的类SQL查询语言(Hive QL,简称HQL)
7.1.2 Hive 的设计特征
Hive不支持对数据的改写和添加,特点如下:
- 不同的存储类型,例如纯文本文件、HBase中的文件;
- 将元数据保存在关系数据库中,可大大减少在查询过程中执行语义检查的时间;
- 直接使用存储在Hadoop文件系统中的数据;
- 内置大量函数,支持用户扩展UDF函数来完成内置函数无法实现的操作
- 类SQL的查询方式,将SQL查询转化为MapReduce的job在Hadoop集群上执行
7.1.3 Hive 的体系结构
- USER INTERFACES
用户接口 - Hive QL Process Engine
Hive QL 处理引擎 - Meta Store
元存储 - Execution Engine
执行引擎 - HDFS or HBase Data Storage
HDFS或HBase数据存储
7.2 Hive 的伪分布式安装
7.2.1 安装 Hive 的前提条件
- Hadoop已经安装并成功启动
*注意 Hive的版本和Hadoop的版本必须匹配
jps //查看hadoop的进程
7.2.2 解压并配置环境变量
1.解压
tar -xvf apache-hive-2.3.7-bin.tar.gz
2.配置环境变量
mv apache-hive-2.3.7-bin /usr/hadoop/hive-2.3.7
vi /etc/profile
export HIVE_HOME=/usr/hadoop/hive-2.3.7
export PATH=$PATH:$HIVE_HONE/bin
3.使环境变量立即生效
source /etc/profile
7.2.3 安装MySQL
- 修改hive的存储引擎为MySQL
由于MySQL采用在线安装,所以必须先要配置谷歌域名服务器
vi /etc/resolv.conf
// 添加 nameserver 8.8.8.8 nameserver 8.8.4.4
1.下载MySQL源安装包
wget -i -c http://dev.mysql.com/get/mysql157-community-release-e17-10.noarch.rmp
2.安装MySQL源
yum -y install mysql157-community-release-e17-10.noarch.rmp
安装MySQL
yum -y install mysql-community-server
4.启动MySQL服务
systemctl start mysqld.service
5.设为开机启动
systemctl enable mysqld
systemctl daemon-reload
6.修改root本地登录密码
grep 'temporary password' /var/log/mysqld.log
// 登录修改密码
mysql -uroot -p
密码简单会提示错误error
MySQL完整的初始密码规则可以通过如下命令查看:
mysql> SHOW VARIABLES LIKE 'validate_password%';
初始情况下第一个的值是ON,validate_password_length是8。可以通过如下命令修改:
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
此时密码就可以设置的很简单,例如1234之类的。到此数据库的密码设置就完成了。
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
但此时还有一个问题,就是因为安装了Yum Repository,以后每次yum操作都会自动更新,需要把这个卸载掉:
[root@localhost ~]# yum -y remove mysql57-community-release-el7-10.noarch
7.创建用户
mysql> create user 'hive1'@'%' identified by 'Lang1210!!';
8.授权
mysql>grant all privileges on *.* to 'hive1'@'%' identified by 'Lang1210!!';
允许远程连接到MySQL
mysql>grant all privileges on *.* to 'root'@'%' identified by 'Lang1210!!';
9.刷新权限
mysql>flush privileges;
10.配置默认密码修改 /etc/my.cnf 配置文件,在[mysqld]下添加编码配置
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
11.重新启动MySQL服务
systemctl restart mysqld
以上步骤完成则MySQL安装完成
7.2.4 配置Hive
切换到hive的配置目录 /usr/hadoop/hive-2.3.7/conf 将hive-env.sh.template 重命名为 hive-env.sh ,将 hive-default.xml.template 重命名为 hive-site.xml
mv hive-env.sh.template hive-env.sh
mv hive-default.xml.template hive-site.xml
1.配置 $HIVE_HOME/bin 的 hive-config.sh
export JAVA_HOME=/usr/java
export HADOOP_HOME=/usr/hadoop/hadoop-2.10.0
export HIVE_HOME=/usr/hadoop/hive-2.3.7
2.复制MySQL驱动下载MySQL的JDBC驱动包 mysql-cnnector-Java-5.1.45-bin.jar 并复制移动到$HIVE_HOME/bin 目录下
cp mysql-connector-Java-5.1.23-bin.jar /usr/hadoop/hive-2.3.7/lib/
3.$在HIVE_HOME/ 下新建tmp临时目录
mkdir /usr/hadoop/hive-2.3.7/tmp
4.配置$HIVE_HOME/conf的 hive-site.xml 支持MySQL修改 ConnectionURL、ConnectionDriverName、ConnectionUserName、ConnectionPassword 4个属性
// j将默认Derby数据库的连接配置改成MySQL数据库的连接配置,具体配置如下。
<property>
<name>Javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>Javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>Javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>Javax.jdo.option.ConnectionPassword</name>
<value>Lang1210!!</value>
</property>
5.配置$HIVE_HOME/conf的hive-site.xml
替换全部的 ${system:Java.io.tmpdir} 为 /usr/hadoop/hive/tmp
共4处
配置$HIVE_HOME/conf的hive-site.xml 替换全部的 ${system:user.name} 为 root
共3处
7.2.5 验证 Hive
1. 数据库初始化
schematool -dbType mysql -initScheam
2.启动 Hive 客户端
shell# hive //启动Hive客户端命令工具
3.输入 show databases
hive>show databases;
4.输入 show tables
hive>show tables;
7.3 Hive QL 的基础功能
7.3.1 操作数据库
使用 Hive QL 创建、显示、打开、删除数据库
hive>create database student;
// 查看database 信息
hive>describe database lang; or hive>desc database lang
新建的数据库在HDFS上的存储路径为与hdfs://master:9000/user/hive/warehose/student.db目录 改变默认数据库命令
hive>use student;
//删除数据库
hive>drop database student;
//再重新创建数据库
create databae student;
7.3.2 创建表
hive> use student
hive> create table emp (ename string, deptid int,degree int)
row format delimited fields terminated by '|';
hive>load data local inpath '/usr/hadoop/hive-2.3.7/examples/files/emp.txt' into table emp;
hive>create table dept (deptid int,dname string) row format delimited fields terminated by '|';
hive>load data local inpath '/usr/hadoop/hive-2.3.7/examples/files/dept.txt' into table dept;
查看表
hive>show tables;
//or
hive>show tables in lang;
//or
hive>show tables 'em*'
查看表结构
hive>describe student.emp;
// or
hive>desc student.emp
//查看数据库苦
hive>show databases;
//查看数据库信息
hive>describe database student;
//or
desc database student;
进一步使用hadoop fs 命令查看
hadoop fs -ls -R hdfs://master:9000/user/hive/warehouse/student.db
//or
hadoop fs -ls -R hdfs://master:9000/user/hive/warehouse
7.3.3 数据准备
家在数据,local 表示本机目录,如果不加则表示是HDSF上的目录 overwrite 关键字表示删除目标目录,没有时则保留,但会覆盖同名旧目录
hive>load data local inpath '/usr/hadoop/hive-2.3.7/examples/files/dept.txt' into table dept;
hive>load data local inpath '/usr/hadoop/hive-2.3.7/examples/files/dept.txt' into table dept;
连续执行多次加载数据操作,结果如下
发现数据重复
用overwrite 第三次重新加载数据
load data local inpath '/usr/hadoop/hive-2.3.7/examples/files/dept.txt' overwrite into table dept;
结果发现重复数据会删除
接下来我们创建一个与dept结构一样的表dept2
create table dept2 (deptid int,dname string) row format delimited fields terminated by '|';
将dept的数据导入dept2
查看dept2中的数据
再次将dept 的数据导入到dept2
查看dept2中的数据
发现数据重复