Hive搭建记录

411 阅读3分钟

简介

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}/&lt;username&gt; is created, with ${hive.scratch.dir.permission}.</description>
  </property>
  1. 启动hadoop
 start-dfs.sh
 start-yarn.sh
  1. 初始化hive (使用hive自带默认元数据库derby来进行存储,通常用于测试)
 [root@qianfeng01 hive]# schematool --initSchema -dbType derby
  1. 启动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)

远程模式

远程模式.jpg

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&amp;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了。