hive部署的3种模式,及应用差异

1、hive的技术原理

hive是基于Hadoop的数据仓库系统,可以查询、分析和存储在HDFS 分布式文件系统中的数据,将结构化的数据文件映射为一张数据库表,转换SQL语句为MapReduce任务运行,对外提供完整的SQL查询功能。

hive查询流程如下:
a.根据HDFS上的数据格式,创建hive表;
b.通过映射关系,将HDFS数据导入到hive表中;
c.此时,hive表对应的元数据信息被记录到 mysql 中,元数据可不是指HDFS上的数据,它是hive表的一些参数信息;
d.执行数据查询时,根据hive表与数据的映射关系,写对应的select查询语句;
e.执行sql查询时 ,先从元数据库中找到hive表对应的文件位置,再通过 hive 的解析器、编译器、优化器、执行器将sql语句转换成MR程序,运行在Yarn上,最终得到结果。

2、hive部署的3种模式

hive部署有内嵌模式、本地模式、远程模式等3种,客户端连接metastore元数据服务,metastore再去连接MySQL数据库进行元数据存取。

2.1、内嵌模式

该模式使用内置的Derby数据库来存储元数据,不需要额外起Metastore服务,数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的方式,解压hive安装包,执行bin/hive启动即可使用,但是一次只能一个客户端连接,不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享,仅适用于实验环境。

2.2、本地模式

该模式采用外部数据库来存储元数据,支持MySQL、Postgres、Oracle、MS SQL Server等数据库。不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务,hive根据hive.metastore.uris 参数值为空来判断本地模式。缺点是,每启动一次hive服务,都默认内置启动了一个metastore。

2.3、远程模式

该模式需要配置hive.metastore.uris 参数,指定metastore服务运行的机器ip和端口,并且单独启动metastore服务,每个客户端都连接到该metastore,metastore服务和hive运行在不同的进程里。hiveserver2是Hive的server端服务,客户端可以使用JDBC协议,通过IP+ Port的方式对其进行访问,达到并发访问的目的。

3、hive远程方式部署

在Hadoop大数据集群上,可以选择任意一个节点进行hive部署,选择mysql作为Hive的元数据存储数据库,所以在安装Hive之前,必须参照CentOS7下离线安装mysql5.7安装好mysql数据库。

1、访问hive官网http://archive.apache.org/dist/hive/,下载最新版hive安装包,如apache-hive-2.1.0-bin.tar.gz二进制安装包。

2、解压Hive安装包到/usr目录并重命名。

tar -zxvf apache-hive-2.1.0-bin.tar.gz  -C /usr
cd /usr
mv apache-hive-2.1.0-bin hive-2.1.0

3、进入hive-2.1.0/conf目录,修改hive的配置文件。

cd hive-2.1.0/conf
cp hive-env.sh.template hive-env.sh
cp hive-site.xml.template hive-site.xml

修改vim hive-env.sh文件,增加环境配置如下:

HADOOP_HOME=/usr/hadoop-2.7.5  #设置hadoop安装目录
export HIVE_CONF_DIR=/usr/hive-2.1.0/conf  #设置hive配置文件目录

修改vim hive-site.xml文件,添加MySQL连接主机、用户、密码配置如下:




 
      javax.jdo.option.ConnectionUserName
      root
 
      javax.jdo.option.ConnectionPassword
      123456
 
 
      javax.jdo.option.ConnectionURL
      jdbc:mysql://hadoop1:3306/hive?createDatabaseIfNotExist=true&useSSL=false
 
 
      javax.jdo.option.ConnectionDriverName
      com.mysql.jdbc.Driver
 
 
      hive.metastore.schema.verification
      false
 
 
      hive.metastore.uris
      thrift://hadoop1:9083
 
 
    datanucleus.schema.autoCreateAll
    true
 
 
    hive.server2.thrift.bind.host
    hadoop1
 

4、配置MySQL数据库jdbc连接驱动。
将mysql安装目录lib下,mysql-connector-java-5.1.41-bin.jar 驱动包拷贝到hive-2.1.0/lib目录下,将hive-2.1.0/jdbc/目录下的hive-jdbc-2.1.0-standalone.jar 拷贝到hive-2.1.0/lib/目录下。

5、配置hive的环境变量。
在hive安装节点hadoop1上,修改vim /etc/profile文件,添加hive的环境变量配置:

export HIVE_HOME=/usr/hive-2.1.0
export PATH=:$HIVE_HOME/bin:$PATH

4、hive的3种交互方式

4.1、bin/hive命令行交互

cd /user/hive-2.1.0/
bin/schematool -dbType mysql -initSchema   #初始化元数据
bin/hive     #启动hive命令行
#hive命令行执行sql,创建一个数据库
create database  test1;
show databases;

4.2、不进入命令行,直接执行sql语句或sql脚本交互

cd /usr/hive-2.1.0/
bin/hive -e "create database test2"

执行vim hive.sql文件,新增sql语句如下:

create database test3;
use test3;
create table stu(id int,name string);

通过hive -f来执行sql脚本文件。

bin/hive -f /user/hive-2.1.0/hive.sql  

4.3、Beeline Client客户端交互

1)在hadoop安装目录/usr/hadoop-2.7.5/etc/hadoop下,修改vim core-site.xml文件,添加以下用户代理配置:

 
    hadoop.proxyuser.root.hosts
    *
 
 
    hadoop.proxyuser.root.groups
    *
 

将修改的core-site.xml文件,分发到hadoop集群其他节点,然后重启Hadoop集群(stop-all.sh start-all.sh)。

2)在hive部署的服务器上,先启动metastore服务,再启动hiveserver2服务。

nohup /usr/hive-2.1.0/bin/hive --service metastore &  #nohup 和 & 表示后台启动
nohup /usr/hive-2.1.0/bin/hive --service hiveserver2 &

3)在node3上使用beeline客户端进行连接访问。

/usr/hive-2.1.0/bin/beeline

启动beeline后,根据提示输入:

[root@hadoop1 ~]# /usr/hive-2.1.0/bin/beeline
which: no hbase in (:/usr/hive-2.1.0/bin:/usr/hadoop-2.7.5/bin:/usr/hadoop-2.7.5/sbin:/usr/jdk1.8.0_241/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/mysql-5.7.29/bin:/root/bin)
Beeline version 2.1.0 by Apache Hive
beeline> !connect jdbc:hive2://hadoop1:10000
Connecting to jdbc:hive2://hadoop1:10000
Enter username for jdbc:hive2://hadoop1:10000: root
Enter password for jdbc:hive2://hadoop1:10000:123456

连接成功之后,可以在提示符后边输入hive sql命令。

你可能感兴趣的:(hive部署的3种模式,及应用差异)