公开课回放地址:https://www.bilibili.com/video/BV1FQ4y137nx
1.hive介绍
Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据。它是Facebook 2008年8月开源的一个数据仓库框架,提供了类似于SQL语法的HQL(hiveSQL)语句作为数据访问接口。
1.1 hive架构
服务端组件:
Driver组件:该组件包括Complier(编译)、Optimizer(优化)和Executor(执行),它的作用是将HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的MapReduce计算框架。
Metastore组件:元数据服务组件,这个组件存取Hive的元数据,Hive的元数据存储在关系数据库里,Hive支持的关系数据库有Derby和Mysql。作用是:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。
HiveServer2服务:HiveServer2是Facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,Hive集成了该服务,能让不同的编程语言调用Hive的接口。还可以做权限管理。
客户端组件:
CLI:Command Line Interface,命令行接口。
JDBC/ODBC:Hive架构的JDBC和ODBC接口是建立在HiveServer2客户端之上。
WEBGUI:Hive客户端提供了一种通过网页的方式访问Hive所提供的服务。这个接口对应Hive的HWI组件(Hive Web Interface),使用前要启动HWI服务
2.hive本地模式部署
2.1 配置metastore服务
hive metastore服务端配置
<!-- 数据库 start -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysql1-96456:3306/hive_meta</value>
<description>mysql连接</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>mysql驱动</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>数据库使用用户名</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>12345678</value>
<description>数据库密码</description>
</property>
hive在hdfs数据存放目录
<!-- HDFS start -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value>
<description>hive使用的HDFS目录</description>
</property>
测试CLI命令行接口方式进行连接,创建 hainiu 数据库,发现可以成功创建
打开远程桌面,使用Dberver连接mysql,观察元数据是否存储成功
使用beeline测试连接,beeline连接走的是jdbc协议,需要开启Hiveserver2服务
2.2 配置hiveserver2服务
hiveserver2配置
<!-- hiveserver start -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hive1-96456</value>
<description>hive开启的thriftServer地址</description>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
<description>hive开启的thriftServer端口</description>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
</property>
启动hiveserver2服务
nohup hiveserver2 >/dev/null 2>&1 &
测试beeline连接
beeline -u jdbc:hive2://hive1-96456:10000 -n hadoop
2.3 用op机充当hive端进行连接
修改op机hive配置文件
<!-- 数据库 start -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysql1-96456:3306/hive_meta</value>
<description>mysql连接</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>mysql驱动</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>数据库使用用户名</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>12345678</value>
<description>数据库密码</description>
</property>
<!-- HDFS start -->
<!-- HDFS start -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value>
<description>hive使用的HDFS目录</description>
</property>
beeline连接测试
3.hive远程模式部署
怎么判断是否是本地模式还是远程模式,看配置文件中是否配置metastore客户端参数,如果配了,则是远程模式,如果没有配则是本地模式。
hive metastore客户端配置
<property>
<name>hive.metastore.uris</name>
<value>thrift://hive1-96456:9083</value>
</property>
测试,将op机看成客户端,hive机器看成服务端,修改op机hive的配置文件,删除metastore服务端配置,只保留客户端配置
测试连接:
hive连接
metastore服务单独启动:
nohup hive --service metastore > /dev/null 2>&1 &
测试:正常连接
4.hive高可用模式部署
4.1 测试将hiveserver2 服务停掉
连接被拒绝
4.2 将metastore服务停掉
发现报错
4.3 添加新机器,启动备用的hiveserver2服务和metastore服务
将hive,hadoop,jdk安装包,远程传输到新的机器
scp -r * linux-95950:/opt/
修改环境变量
export JAVA_HOME=/opt/jdk1.8.0_144
export HADOOP_HOME=/opt/hadoop-2.7.3
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:/usr/lib64
export HIVE_HOME=/opt/apache-hive-2.1.1-bin
export HIVE_CONF_DIR=$HIVE_HOME/conf
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:
export PATH
修改配置文件,将hiveserver2的服务和metastore客户端的配置ip进行修改
hiveserver2服务如果想要启动高可用,可以将hiveserver2服务记录到zookeeper中,使用zookeeper实现了Hive Server2的HA功能,Client端可以通过指定一个nameSpace来连接HiveServer2,而不是传统的指定某一个host和port
<property>
<name>hive.server2.support.dynamic.service.discovery</name>
<value>true</value>
</property>
<property>
<name>hive.server2.zookeeper.namespace</name>
<value>hiveserver2_zk</value>
</property>
<property>
<name>hive.zookeeper.quorum</name>
<value>nn1-40247:2181,nn2-40247:2181,s1-40247:2181</value>
</property>
<property>
<name>hive.zookeeper.client.port</name>
<value>2181</value>
</property>
启动metastore服务和hiveserver2服务
nohup hive --service metastore > /dev/null 2>&1 &
nohup hiveserver2 >/dev/null 2>&1 &
配置op连接多个metestore设置
<property>
<name>hive.metastore.uris</name>
<value>thrift://hive1-96456:9083,thrift://linux-95950:9083</value>
</property>
hive连接客户端查看元数据正常:
停掉metastore服务:
查看元数据依然可以查看:
通过指定一个nameSpace来连接hiveserver2
beeline -u "jdbc:hive2://nn1-40247:2181,nn2-40247:2181,s1-40247:2181/;serviceDiscoveryMode=zookeeper;zooKeeperNamespace=hiveserver2_zk"
建表成功
停掉一个hiverserver2服务
重启客户端: