这里面我主要讲述的是我个人在项目开发过程中的简要总结。作者水平有限,仅供参考!我的Hive版本是hive2.0.0
一、Hive
1. Hive简介
(1)Hive是建立在Hadoop HDFS上的数据仓库基础架构
(2)Hive定义了简单的类似SQL查询语言,称为HQL它允许熟悉SQL的用户查询数据。
(3)Hive的SQL解析引擎,它将SQL语句转移成M/R Job然后在Hadoop上执行。
(4)Hive的表其实就是HDFS的目录/文件。
(5)Hive允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理內建mapper和reducer无法完成的复杂的分析工作。
2. 元数据
Hive将元数据存储在数据库中(metastore),支持mysql、derby、oracle等传统数据库,默认为derby。 Hive中元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在的目录等。 元数据被默认创建在derby数据库中,以表的形式保存数据。表的元信息、列元信息。
3. HQL执行流程
解析器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
过程:HQL语句——解析器:词法分析——编译器:生成HQL的执行计划——优化器:生成最优执行计划——执行。
4. Hive体系结构
(1)hadoop –用HDFS进行存储,利用mapreduce进行计算。
(2)元数据存储(metastroe) 通常存储在关系数据库中,如mysql,derby。
(3) Hive Driver:驱动,包括编译器、解析器、优化器。
访问接口:
①CLI:Command Line Interface;
②通过JDBC/ODBC连接Thrift Server在连接驱动;
③Web Console 控制台(只能查询)
5. Hive管理
(1)进入CLI方式
* 配置Hive的环境变量
* 输入命令: hive --service cli 或是直接输入 hive
(2)web界面
因为我的这个hive2.0.0的版本没有hwi的war包,所以需要自己下载hive2.0.0的源码包,然后进行打包。
解压源码包后,进入hwi/web下,执行下面的命令
jar cvf hive-hwi-2.0.0.war ./*
【提示】war包的名字最好要与版本一致
把生成的war包拷贝到hive的lib目录下。
上述两步完事之后,编辑hive-site.xml文件
<property>
<name>hive.hwi.listen.host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hivehwi.listen.port</name>
<value>9999</value>
</property>
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi.war</value>
</property>
文件编辑好之后,拷贝jiar包
cp ${JAVA_HOME}/lib/tools.jar ${HIVE_HOME}/lib
上面的4步完成之后,就此结束!
启动web界面方式: hive –-service hwi
【提示】多刷新几次!
(3)远程连接
在hive服务的安装节点的hive-site.xml配置文件中添加以下配置
<property>
<name>hive.server2.thrift.client.user</name>
<value>root</value>
<description>Username to use against thrift client</description>
</property>
<property>
<name>hive.server2.thrift.client.password</name>
<value>123456</value>
<description>Password to use against thrift client</description>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>服务器IP</value>
</property>
在hadoop的hdfs 的配置文件core-site.xml中加入如下配置
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
重新启动hadoop!
上述两步完成之后,启动hiveserver2!
前提是配置了hive的环境变量,输入下面的命令启动服务
hive --service hive2 或是直接输入hiveserver2
【提示】该服务启动的是10000端口
远程连接测试
直接输入beeline
beeline> !connect jdbc:hive2://Master:10000
用户名 root
密码 123456