分布式数据仓库 Hive

分布式数据仓库 Hive

7.1 Hive 概述

Hive 基于Hadoop

OLAP
OLTP

7.1.1 Hive 的定义

  1. Hive是基于Hadoop的一个数据仓库工具,将结构化数据文件映射为一张数据库表,提供简单的SQL查询功能,将SQL语句转化为MapReduce任务进行运行,适合数据仓库的统计分析。
  2. Hive的最佳使用场合是大数据集的批处理作业
  3. Hive用来进行数据提取转化加载,定义了简单的类SQL查询语言(Hive QL,简称HQL)

7.1.2 Hive 的设计特征

Hive不支持对数据的改写和添加,特点如下:

  1. 不同的存储类型,例如纯文本文件、HBase中的文件;
  2. 将元数据保存在关系数据库中,可大大减少在查询过程中执行语义检查的时间;
  3. 直接使用存储在Hadoop文件系统中的数据;
  4. 内置大量函数,支持用户扩展UDF函数来完成内置函数无法实现的操作
  5. 类SQL的查询方式,将SQL查询转化为MapReduce的job在Hadoop集群上执行

分布式数据仓库 Hive

; 7.1.3 Hive 的体系结构

  1. USER INTERFACES
    用户接口
  2. Hive QL Process Engine
    Hive QL 处理引擎
  3. Meta Store
    元存储
  4. Execution Engine
    执行引擎
  5. HDFS or HBase Data Storage
    HDFS或HBase数据存储

7.2 Hive 的伪分布式安装

7.2.1 安装 Hive 的前提条件

  • Hadoop已经安装并成功启动
    *注意 Hive的版本和Hadoop的版本必须匹配
jps  //查看hadoop的进程

分布式数据仓库 Hive

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

分布式数据仓库 Hive
分布式数据仓库 Hive

密码简单会提示错误error
MySQL完整的初始密码规则可以通过如下命令查看:

mysql> SHOW VARIABLES LIKE 'validate_password%';

分布式数据仓库 Hive

初始情况下第一个的值是ON,validate_password_length是8。可以通过如下命令修改:

mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;

分布式数据仓库 Hive

此时密码就可以设置的很简单,例如1234之类的。到此数据库的密码设置就完成了。

 ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

分布式数据仓库 Hive

但此时还有一个问题,就是因为安装了Yum Repository,以后每次yum操作都会自动更新,需要把这个卸载掉:

[root@localhost ~]# yum -y remove mysql57-community-release-el7-10.noarch

分布式数据仓库 Hive

7.创建用户

mysql> create user 'hive1'@'%' identified by 'Lang1210!!';

分布式数据仓库 Hive

8.授权

mysql>grant all privileges on  *.* to 'hive1'@'%' identified by 'Lang1210!!';

分布式数据仓库 Hive
mysql>grant all privileges on  *.* to 'root'@'%' identified by 'Lang1210!!';

分布式数据仓库 Hive

9.刷新权限

mysql>flush privileges;

分布式数据仓库 Hive

10.配置默认密码
修改 /etc/my.cnf 配置文件,在[mysqld]下添加编码配置

[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'

分布式数据仓库 Hive

11.重新启动MySQL服务

systemctl restart mysqld

分布式数据仓库 Hive

以上步骤完成则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

分布式数据仓库 Hive
分布式数据仓库 Hive

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

分布式数据仓库 Hive

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/

分布式数据仓库 Hive
分布式数据仓库 Hive

3.$在HIVE_HOME/ 下新建tmp临时目录

mkdir /usr/hadoop/hive-2.3.7/tmp

分布式数据仓库 Hive

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>

分布式数据仓库 Hive

5.配置$HIVE_HOME/conf的hive-site.xml

&#x66FF;&#x6362;&#x5168;&#x90E8;&#x7684; ${system:Java.io.tmpdir} &#x4E3A; /usr/hadoop/hive/tmp

&#x5171;4&#x5904;

分布式数据仓库 Hive
分布式数据仓库 Hive
&#x914D;&#x7F6E;$HIVE_HOME/conf&#x7684;hive-site.xml &#x66FF;&#x6362;&#x5168;&#x90E8;&#x7684; ${system:user.name} &#x4E3A; root

&#x5171;3&#x5904;

分布式数据仓库 Hive
分布式数据仓库 Hive

7.2.5 验证 Hive

1. 数据库初始化

schematool -dbType mysql -initScheam

分布式数据仓库 Hive

2.启动 Hive 客户端

shell# hive   //&#x542F;&#x52A8;Hive&#x5BA2;&#x6237;&#x7AEF;&#x547D;&#x4EE4;&#x5DE5;&#x5177;

分布式数据仓库 Hive
3.输入 show databases
hive>show databases;

分布式数据仓库 Hive

4.输入 show tables

hive>show tables;

分布式数据仓库 Hive

7.3 Hive QL 的基础功能

7.3.1 操作数据库

&#x4F7F;&#x7528; Hive QL &#x521B;&#x5EFA;&#x3001;&#x663E;&#x793A;&#x3001;&#x6253;&#x5F00;&#x3001;&#x5220;&#x9664;&#x6570;&#x636E;&#x5E93;

hive>create database student;
// &#x67E5;&#x770B;database &#x4FE1;&#x606F;
hive>describe database lang; or hive>desc database lang

分布式数据仓库 Hive

&#x65B0;&#x5EFA;&#x7684;&#x6570;&#x636E;&#x5E93;&#x5728;HDFS&#x4E0A;&#x7684;&#x5B58;&#x50A8;&#x8DEF;&#x5F84;&#x4E3A;&#x4E0E;hdfs://master:9000/user/hive/warehose/student.db&#x76EE;&#x5F55; &#x6539;&#x53D8;&#x9ED8;&#x8BA4;&#x6570;&#x636E;&#x5E93;&#x547D;&#x4EE4;

hive>use student;
//&#x5220;&#x9664;&#x6570;&#x636E;&#x5E93;
hive>drop database student;
//&#x518D;&#x91CD;&#x65B0;&#x521B;&#x5EFA;&#x6570;&#x636E;&#x5E93;
create databae student;

分布式数据仓库 Hive

7.3.2 创建表

hive> use student

hive> create table emp (ename string, deptid int,degree int)
row format delimited fields terminated by '|'&#xFF1B;

分布式数据仓库 Hive
hive>load data local inpath '/usr/hadoop/hive-2.3.7/examples/files/emp.txt' into table emp;

分布式数据仓库 Hive
hive>create table dept (deptid int,dname string) row format  delimited fields terminated by '|'&#xFF1B;

分布式数据仓库 Hive
hive>load data local inpath '/usr/hadoop/hive-2.3.7/examples/files/dept.txt' into table dept;

分布式数据仓库 Hive

&#x67E5;&#x770B;&#x8868;

hive>show tables;
//or
hive>show tables in lang;
//or
hive>show tables 'em*'

分布式数据仓库 Hive

查看表结构

hive>describe student.emp;
// or
hive>desc student.emp
//&#x67E5;&#x770B;&#x6570;&#x636E;&#x5E93;&#x82E6;
hive>show databases;
//&#x67E5;&#x770B;&#x6570;&#x636E;&#x5E93;&#x4FE1;&#x606F;
hive>describe database student;
//or
desc database student;

分布式数据仓库 Hive

&#x8FDB;&#x4E00;&#x6B65;&#x4F7F;&#x7528;hadoop fs &#x547D;&#x4EE4;&#x67E5;&#x770B;

hadoop fs -ls -R hdfs://master:9000/user/hive/warehouse/student.db
//or
hadoop fs -ls -R hdfs://master:9000/user/hive/warehouse

分布式数据仓库 Hive

7.3.3 数据准备

&#x5BB6;&#x5728;&#x6570;&#x636E;&#xFF0C;local &#x8868;&#x793A;&#x672C;&#x673A;&#x76EE;&#x5F55;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x52A0;&#x5219;&#x8868;&#x793A;&#x662F;HDSF&#x4E0A;&#x7684;&#x76EE;&#x5F55; overwrite &#x5173;&#x952E;&#x5B57;&#x8868;&#x793A;&#x5220;&#x9664;&#x76EE;&#x6807;&#x76EE;&#x5F55;&#xFF0C;&#x6CA1;&#x6709;&#x65F6;&#x5219;&#x4FDD;&#x7559;&#xFF0C;&#x4F46;&#x4F1A;&#x8986;&#x76D6;&#x540C;&#x540D;&#x65E7;&#x76EE;&#x5F55;

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;

分布式数据仓库 Hive
连续执行多次加载数据操作,结果如下

分布式数据仓库 Hive

用overwrite 第三次重新加载数据

 load data local inpath '/usr/hadoop/hive-2.3.7/examples/files/dept.txt' overwrite into table dept;

分布式数据仓库 Hive
分布式数据仓库 Hive
接下来我们创建一个与dept结构一样的表dept2
create table dept2 (deptid int,dname string) row format  delimited fields terminated by '|'&#xFF1B;

分布式数据仓库 Hive
将dept的数据导入dept2

查看dept2中的数据

再次将dept 的数据导入到dept2

查看dept2中的数据

&#x53D1;&#x73B0;&#x6570;&#x636E;&#x91CD;&#x590D;

Original: https://www.cnblogs.com/lang12/p/15361027.html
Author: Aurora*
Title: 分布式数据仓库 Hive

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/565849/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球