(十六)Hive的认识以及安装部署与简单操作

一、Hive的介绍

1、什么是Hive

Hive 是建立在 Hadoop 上的数据仓库基础构架。

       它提供了一系列的工具,可以用来进行数据提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 QL ,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。
Hive的表其实就是HDFS的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据。

2、Hive的系统架构

2.1、Hive 的结构可以分为以下几部分:

  • 用户接口:包括 CLI, Client, WUI
  • 元数据存储。通常是存储在关系数据库如 mysql, derby 中
  • 解释器、编译器、优化器、执行器
  • Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算
  1. 用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是 CLI,Cli 启动的时候,会同时启动一个 Hive 副本。Client 是 Hive 的客户端,用户连接至 Hive Server。在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server。 WUI 是通过浏览器访问Hive。
  2. Hive 将元数据存储在数据库中,如 mysql、derby。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
  3. 解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
  4. Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from tbl 不会生成 MapRedcue 任务)。 

2.2、Hive 构建在 Hadoop 之上

  • HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的
  • 所有的数据都是存储在 Hadoop 中
  • 查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(有些查询没有 MR 任务,如:select * from table)
  • Hadoop和Hive都是用UTF-8编码的

2.3、Hive 和普通关系数据库的异同

2.4、HIVE的数据存储

       首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

       其次,Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:Table,External Table,Partition,Bucket。

  1. Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 htduan,它在 HDFS 中的路径为:/ warehouse /htduan,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的 Table 数据(不包括 External Table)都保存在这个目录中。 
  2. Partition 对应于数据库中的 Partition 列的密集索引,但是 Hive 中 Partition 的组织方式和数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:htduan 表中包含 dt 和 city 两个 Partition,则对应于 dt = 20100801, ctry = US 的 HDFS 子目录为:/ warehouse /htduan/dt=20100801/ctry=US;对应于 dt = 20100801, ctry = CA 的 HDFS 子目录为;/ warehouse /htduan/dt=20100801/ctry=CA
  3. Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。将 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/ warehouse /htduan/dt =20100801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/ warehouse /htduan/dt =20100801/ctry=US/part-00020
  4. External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。 
  5. Table 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。 

 

3、为什么选择Hive?

  1. 基于Hadoop的大数据的计算/扩展能力
  2. 支持SQL like查询语言
  3. 统一的元数据管理
  4. 简单编程

二、Hive的本地安装与部署

前言:因为Hive 构建在 Hadoop 之上,所以确保你的Hadoop集群正常运行

Hive的三种安装模式

  • 内嵌模式:元数据保持在内嵌的derby模式,只允许一个会话连接
  • 本地独立模式:在本地安装Mysql,把元数据放到mySql内
  • 远程模式:元数据放置在远程的Mysql数据库

1、Hive的下载

下载地址http://www.apache.org/dyn/closer.cgi/hive/

这里我用的版本是apache-hive-2.3.4-bin.tar.gz 

我使用的有关Hadoop生态圈的压缩包已经放在菜单栏工具中,可根据需要自行下载

2、Hive的安装

将下载好的Hive传输到你的Linux中,解压解压并且修改文件名

tar -zxvf ./apache-hive-2.3.4-bin.tar.gz -C /usr/local/
cd /usr/local/
sudo mv apache-hive-1.2.1-bin hive     #将文件夹名改为hive

3、Hive的配置

3.1、配置环境变量

vim ~/.bashrc

source ~/.bashrc   #重启文件

3.2、修改/usr/local/hive/conf下的hive-site.xml

cd /usr/local/hive/conf
mv hive-default.xml.template hive-default.xml

       上面命令是将hive-default.xml.template重命名为hive-default.xml;
然后,使用vim编辑器新建一个配置文件hive-site.xml,命令如下:

cd /usr/local/hive/conf
vim hive-site.xml

在hive-site.xml中添加如下配置信息:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?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>123456</value>
    <description>password to use against metastore database</description>
  </property>
</configuration>

4、安装并配置mysql

这里我们采用MySQL数据库保存Hive的元数据,而不是采用Hive自带的derby来存储元数据。

4.1、安装mysql

具体安装可看https://blog.csdn.net/Ares_song/article/details/81221709

sudo apt-get update  #更新软件源
sudo apt-get install mysql-server  #安装mysql

安装过程会提示设置mysql root用户的密码,设置完成后等待自动安装即可。默认安装完成就启动了mysql。

4.2、启动mysql

service mysql start

4.3、检验mysql

sudo netstat -tap | grep mysql

4.4、进入mysql shell界面

mysql -u root -p

4.5、下载mysql jdbc包

下载地址:https://dev.mysql.com/downloads/connector/j/

或者使用命令下载驱动

wget http://downloads.mysql.com/archives/mysql-connector-java-5.0/mysql-connector-java-5.0.8.tar.gz

将下载的驱动包加压缩并拷贝到hive的lib目录下

tar -zxvf mysql-connector-java-5.0.8.tar.gz   #解压缩

cp mysql-connector-java-5.0.8/mysql-connector-java-5.0.8-bin.jar /usr/local/hive/lib 

4.6、启动并登陆mysql shell

service mysql start #启动mysql服务
 mysql -u root -p  #登陆shell界面

4.7、 新建hive数据库

create database hive;    
#这个hive数据库与hive-site.xml中localhost:3306/hive的hive对应,用来保存hive元数据

4.8、配置mysql允许hive接入

mysql> grant all on *.* to root@localhost identified by '123456';   
#将所有数据库的所有表的所有权限赋给hive用户,后面的hive是配置hive-site.xml中配置的连接密码
mysql> flush privileges;  #刷新mysql系统权限关系表

5、启动hive

启动hive之前,请先启动hadoop集群。

start-all.sh #启动hadoop
hive  #启动hive

        在启动Hive时,有可能会出现Hive metastore database is not initialized的错误,这里给出解决方案。
解决Hive启动,Hive metastore database is not initialized的错误。出错原因:以前曾经安装了Hive或MySQL,重新安装Hive和MySQL以后,导致版本、配置不一致。解决方法是,使用schematool工具。Hive现在包含一个用于 Hive Metastore 架构操控的脱机工具,名为 schematool.此工具可用于初始化当前 Hive 版本的 Metastore 架构。此外,其还可处理从较旧版本到新版本的架构升级。所以,解决上述错误,你可以在终端执行如下命令:

schematool -dbType mysql -initSchema

执行后,再启动Hive,应该就正常了。

6、测试Hive

6.1、打开Navicat远程连接linux中的mysql

可以看到Hive数据库中的表

6.2、在Hive命令行中输入命令

create table test1(tid int,tname string);

在mysql中TBLS表中可以看到新增的信息

6.3、此时元数据连接Mysql成功

远程连接其实跟本地连接一样,只是配置文件中将Master改成远程mysql的ip地址

三、Hive的简单操作

在linux中输入hive进入hive的命令行

静默模式输入命令 hive -S

1、常用的CLI命令

1、清屏    ctrl+L或者!clear

2、查看数据仓库中的表  show tables;

3、查看数据仓库中的内置的函数   show functions;

4、查看表结构 desc [表名]

5、查看HDFS上的文件     dfs -ls /

6、执行操作系统的命令 !命令

7、执行HQL语句   select *** from ***

8、执行SQL的脚本   source SQL文件

不进入命令行 可以使用命令 hive -e  ‘命令’

2、Hive的Web界面管理

启动方式

hive --service hwi &

端口号 9999

访问地址:<IP>:9999/hwi

这个Web界面还需要hwi的包。。这里知道就行了

3、Hive的表处理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值