简介
hive是一个构建在Hadoop上的数据仓库工具(框架),可以将结构化的数据文件映射成一张数据表,并可以使用类sql的方式来对这样的数据文件进行读,写以及管理(包括元数据)。这套HIVE SQL 简称HQL。hive的执行引擎可以是MR、spark、tez。
如果执行引擎是MapReduce的话,hive会将Hql翻译成MR进行数据的计算。 用户可以使用命令行工具或JDBC驱动程序来连接到hive。
所以,运行hive,需要先安装hadoop
安装hive
先从本地上传Hive安装文件apache-hive-2.1.1-bin.tar.gz到/root/soft
解压hive并配置环境变量
tar -zxvf apache-hive-2.1.1-bin.tar.gz -C /usr/local
# 修改hive安装路径名,方便以后使用
mv apache-hive-2.1.1-bin/ hive
vim /etc/profile.d/my_env.sh
# 添加如下内容:
export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin:$PATH
# 让profile生效
source /etc/profile
2) 配置hive-env.sh
pwd : /usr/local/hive/conf
如果不存在,就用hive-env.sh.template复制一个(cp hive-env.sh.template hive-env.sh)
export HIVE_CONF_DIR=/usr/local/hive/conf
# 看你自己把jdk安装在哪里了
export JAVA_HOME=/usr/local/jdk
# 看你自己把hadoop安装在哪里了
export HADOOP_HOME=/usr/local/hadoop
export HIVE_AUX_JARS_PATH=/usr/local/hive/lib
3) 配置hive-site.xml
hive2.1.1中默认是没有hive-site.xml,可以把conf/hive-default.xml.template拷贝过来使用
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
# 把hive-site.xml 中所有包含 ${system:java.io.tmpdir}替换成/usr/local/hive/iotmp.
# 如果系统默认没有指定系统用户名,那么要把配置${system:user.name}替换成当前用户名root
扩展:hive-site.xml中有两个重要的配置说明
<!-- 该参数主要指定Hive的数据存储目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<!-- 该参数主要指定Hive的临时文件存储目录 -->
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
<description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description>
</property>
- 启动hadoop
start-dfs.sh
start-yarn.sh
- 初始化hive (使用hive自带默认元数据库derby来进行存储,通常用于测试)
[root@qianfeng01 hive]# schematool --initSchema -dbType derby
- 启动hive
(注:启动之前要启动hdfs sbin/start-dfs.sh 和yarn sbin/start-yarn.sh )
bin/hive
#进入后可以执行下面命令进行操作:
show dataases; #查看数据库
show tables; #查看表
quit; #退出
配合mysql
使用mysql替换derby进行元数据的存储,hive的相关进程都是在同一台机器上,即本地模式。mysql因为是独立的进程,所以mysql可以和hive在同一机器上,也可以在其他机器上。
编辑 hive-site.xml,找到下面四个属性进行修改对应的值。
<!--配置mysql的连接字符串-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://qianfeng03:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<!--配置mysql的连接驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<!--配置登录mysql的用户-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<!--配置登录mysql的密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
注意:hive的元数据在mysql库里创建的数据库hive的编码最好设置成latin1.
show variables like 'character%';
5、将mysql的驱动包mysql-connector-java-5.1.28-bin.jar上传到$HIVE_HOME/lib下(注意:驱动是jar结尾,不是tar结尾)
6、执行执行先要初始化数据库(会发现mysql多了一个数据库hive)
[root@qianfeng01 hive]# bin/schematool -initSchema -dbType mysql
7、启动hive
[root@qianfeng01 hive]# bin/hive
说明: hive命令会默认启动元数据服务项(metastore)
远程模式
hive server的配置
1) 修改 hive-site.xml
<!--hive仓库在hdfs的位置-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<!-- 该参数主要指定Hive的临时文件存储目录 -->
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
</property>
<!--连接mysql的url地址-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysql服务器ip:3306/hive?createDatabaseIfNotExist=true&characterEncoding=latin1</value>
</property>
<!--mysql的驱动类-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!--mysql的用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!--mysql的密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!--hive工作的本地临时存储空间-->
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/hive/iotmp/root</value>
</property>
<!--如果启用了日志功能,则存储操作日志的顶级目录-->
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/usr/local/hive/iotmp/root/operation_logs</value>
</property>
<!--Hive运行时结构化日志文件的位置-->
<property>
<name>hive.querylog.location</name>
<value>/usr/local/hive/iotmp/root</value>
</property>
<!--用于在远程文件系统中添加资源的临时本地目录-->
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/hive/iotmp/${hive.session.id}_resources</value>
</property>
说明:使用远程模式,需要在hadoop server的core-site.xml文件中添加一下属性(要重启Hadoop)
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
hive的两种服务说明
第一种服务:hiveserver2
1. 该服务端口号默认是10000
2. 可以单独启动此服务进程,供远程客户端连接;此服务内置metastore服务。
3. 启动方式:
方法1:
直接调用hiveserver2。会进入监听状态不退出。
方法2:
hive --service hiveserver2 & 进入后台启动
方法3:
hive --service hiveserver2 >/dev/null 2>&1 &; #信息送入黑洞。
第二种服务:metastore
1. 此服务才是真正连接元数据库的服务进程
2. 也可以让远程客户端连接
3. 启动方式:
hive进程名为:RunJar
方法1:
- hive --service metastore &
方法2:
- hive --service metastore 2>&1 >/dev/null &; #信息送入黑洞。
客户端连接metastore服务
在客户端上安装hive,以它为客户端来连接Hadoop102的hive server服务
cd hive/
cd conf/
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop102:9083</value>
</property>
</configuration>
注意: 想要连接metastore服务的客户端必须配置如下属性和属性值
<property>
<name>hive.metastore.uris</name>
<value>thrift://ip:9083</value>
</property>
解析:thrift:是协议名称
ip为metastore服务所在的主机ip地址
9083是默认端口号
然后运行hive就可以连接到远程的hive server了。