概念
hive可以将hdfs上结构化的文件映射成一张表,并使用类sql的方式操作. 因为使用mapreduce是在是太麻烦了~
hive的架构
原理
- 用户写了个sql语句提交给driver
- driver中的解析器解析HQL语法,交给编译器
- 编译器取metastore获取元信息
- 编译器结合元数据,进行编译
- 优化器进行优化
- driver将计划交给执行引擎
- 执行引擎发送给yarn
- yarn提交job并执行
- 执行引擎接收返回的结果
- 结果通过drive返回给用户接口
关键的一步就是sql语句如何转化为mapredeuce程序,这个就是HIve完成的工作.
安装与配置
[root@mypc01 local]# tar -zxvf apache-hive-2.1.1-bin.tar.gz -C /usr/local
[root@mypc01 local]# mv apache-hive-2.1.1-bin/ hive
[root@mypc01 local]# vi /etc/profile
# 添加如下内容:
export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin:$PATH
#让profile生效
[root@mypc01 local]# source /etc/profile
配置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和yarn,因为mr需要用到
[root@mypc01 hadoop]# start-dfs.sh
[root@mypc01 hadoop]# start-yarn.sh
启动hive
hive
配置hive的元数据库为mysql
为了数据安全,可以单独设置hive存储元数据的数据库,比如mysql
安装mysql过程略
设置hive的元数据库为mysql,需要修改hive-site.xml配置文件,如下
其中3306 是mysql提供服务的端口号
[root@mypc01 ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1031 mysql 21u IPv6 20809 0t0 TCP *:mysql (LISTEN)
<!--配置mysql的连接字符串-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mypc01: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>
另外,要将
将mysql的驱动包mysql-connector-java-5.1.28-bin.jar上传到$HIVE_HOME/lib下.
之后初始化
bin/schematool -initSchema -dbType mysql