简介
1、hive:数据仓库平台
2、facebook 2008年捐献给Apache
3、HiveQL类sql的语言 具有ETL 功能(抽取转换加载)不支持更新、索引、事物
4、可以看成是SQL到MapReduce的映射器
5、提供Hive Shell 、JDBC/ODBC、Thrift客户端、Web管理接口
适用环境:
1、不能提供排序和查询cache功能,不能提供在线事务处理,不提供实时查询和记录级的更新
2、Hive能很好的处理不变的大规模数据集上的批量任务
3、可扩展性和延展性
4、容错和低约束的数据输入格式
Hive的组成
1、用户接口:Hive shell、thrift客户端、web
2、thrift服务器
3、元数据库:Derby、Mysq
4、解析器:解释器、编译器、优化器、执行器。查询计划由Mapreduce调用执行
5、Hadoop:数据仓库和查询计划存储在HDFS上,计算过程由MapReduce执行
Hive体系:
架构图:
Hive安装
一、内嵌模式:元数据保持在内嵌的Derby模式,只允许一个会话连接
1、环境变量:HIVE_HOME
2、$ cp hive-default.xml.template hive-site.xml
$cp hive-log4j.properties.template hive-log4j.properties
3、配置${HIVE_HOME}/bin/hive-config.sh
添加如下配置到文件末尾:
export HIVE_HOME=/home/admin/app/hive-0.13.1
export HADOOP_HOME=/home/admin/hadoop-2.2.0
export JAVA_HOME=/usr/java/jdk1.6.0
二、本地独立模式:在本地安装Mysql,把元数据放到Mysql内
在内嵌模式基础上继续安装
安装Mysql并启动服务
在Mysql中为hive建立账号,并授予足够的权限,例如hive账号,授予all privileges
用上述账号登陆mysql,然后创建数据库,比如名叫hive,用于存放hive的元数据
在本地安装mysql客户端
配置hive-site.xml文件,指出使用本地Mysql数据库,已经连接协议,账号、口令等
把mysql-connector-java-x.x.x.jar复制到hive的lib目录下
启动hive能进入shell表示安装成功
1、用root用户安装Mysql数据库
默认的密码在:
2、安装mysql client和mysql devel
3、启动mysql服务
4、登陆重置密码
5、本地连接测试
6、开放客户端连接(允许任何IP地址的客户端用mysql账户来访问)
7、创建hadoop相关用户并授权
mysql> create user 'hadoop' identified by '123456';
mysql> grant all on *.* to hadoop@'%' with grant option;
用hadoop用户登录mysql并创建Hive专用数据库
# mysql -uhadoop -p123456
mysql> create database hive;
8、配置hive_site.xml文件:
9、把JDBC驱动包解压后拷贝到${HIVE_HOME}/lib下
10、测试连接
三、远程模式:元数据放置在远程的Mysql数据库
远程模式安装是把metastore配置到远程机器
在独立模式基础上进行如下配置:
修改hive-site.xml的javax.jdo.option.ConnectionURL参数,调整主机名为远程机的主机名
配置hive.metastore.uris参数
<property>
<name>hive.metastore.uris</name>
<value>thrift://remoteHost:9083</value>
<description>Thrift uri for the remote metastore. Used by metastore client to connect to remote metastore.
</description>
</property>
Hive 的服务
默认的服务,提供命令行接口,可直接编写HiveQL语句并执行、执行HiveQL语句
hive> select * from table_name;
设置和查看临时变量:
导入jar包(jar包存在)
hive> add jar hivejar.jar
创建函数(类存在)
hive> create temporary function udfTest as ‘com.cstore.udfExample’
也可以在本地系统的命令行运行Hive的shell
$ hive –e ‘select * from table_name;’(执行HiveQL语句)
$ hive –-config /hive/conf (重新载入新的配置文件)
$ hive –-service hiveserver (启动服务)
JDBC/ODBC支持
Hive允许支持JDBC协议的应用程序连接到Hive
当Hive启动了hiveserver服务后,客户端通过Java的Thrift和Hive服务器进行通信,连接过程如下:
开启hiveserver服务:
$ hive –-service hiveserver 50000(端口号)
建立与Hive的连接
Class.forName(“org.apache.hadoop.hive.jdbc.HiveDriver”);
Connection con = DriverManager.getConnection(“jdbc:hive://<host_name>:50000/default”,”hive”,”123456”);
支持ODBC的应用程序也可以连接到Hive服务端,连接机制与JDBC类似
Thrift服务
Hive的Thrift是一种跨语言服务的可伸缩软件框架
Thrift结合了强大的软件堆栈的代码生成引擎,可以无缝地与C++、C#、Java、Python、PHP和Ruby结合
Thrift允许用户简单地定义文件中的数据类型和服务接口,编译器生成代码来实现RPC客户端和服务器之间的通信
Hive内部集成了Thrift服务,支持在多种编译语言中使用Hive命令
元数据服务
元数据保存了表的属性和服务信息
元数据存储在RDBMS中,比如MySQL、Derby
Web接口
Hive Web Interface(hwi)是Hive提供的Web接口
通过Web接口,可以方便地执行与Hive shell上的命令具有功能相同的操作
开启Hive的web服务
$ nohup hive --service hwi >hwi.log &
在浏览器中输入地址
http://192.168.136.101:9999/hwi
hive0.13.1没有hwi.war包。
去源码中找到hwi/web/包。
先用zip 打包成.zip文件,然后在修改后缀名。
hwi/web 打包成.zip文件
修改配置文件:hive-site.xml 增加如下三个参数项:
<property>
<name>hive.hwi.listen.host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hive.hwi.listen.port</name>
<value>9999</value>
</property>
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi-0.13.1.war</value>
</property>
hive --service hwi
如有下报错:
Problem accessing /hwi/. Reason:
Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/usr/java/jdk1.7.0_55/jre"
解决办法:
cp /usr/java/jdk1.7.0_55/lib/tools.jar /usr/local/hive/lib/
hive --service hwi 重启即可。