预编译查询hive
‘壹’ 我想学习hive,请问安装hive之前,必须安装centos、hadoop、java这些吗
安装需要
java 1.6,java 1.7或更高版本。
Hadoop 2.x或更高, 1.x. Hive 0.13 版本也支持 0.20.x, 0.23.x
linux,mac,windows操作系统。以下内容适用于linux系统。
安装打包好的hive
需要先到apache下载已打包好的hive镜像,然后解压开该文件
$ tar -xzvf hive-x.y.z.tar.gz
设置hive环境变量
$ cd hive-x.y.z$ export HIVE_HOME={{pwd}}
设置hive运行路径
$ export PATH=$HIVE_HOME/bin:$PATH
编译Hive源码
下载hive源码
此处使用maven编译,需要下载安装maven。
以Hive 0.13版为例
编译hive 0.13源码基于hadoop 0.23或更高版本
$cdhive$mvncleaninstall-Phadoop-2,dist$cdpackaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin$lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore)
编译hive 基于hadoop 0.20
$cdhive$antcleanpackage$cdbuild/dist#lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore)
运行hive
Hive运行依赖于hadoop,在运行hadoop之前必需先配置好hadoopHome。
export HADOOP_HOME=<hadoop-install-dir>
在hdfs上为hive创建\tmp目录和/user/hive/warehouse(akahive.metastore.warehouse.dir) 目录,然后你才可以运行hive。
在运行hive之前设置HiveHome。
$ export HIVE_HOME=<hive-install-dir>
在命令行窗口启动hive
$ $HIVE_HOME/bin/hive
若执行成功,将看到类似内容如图所示
‘贰’ hive的Hive 体系结构
主要分为以下几个部分:
用户接口
用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是 CLI,Cli 启动的时候,会同时启动一个 Hive 副本。Client 是 Hive 的客户端,用户连接至 Hive Server。在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server。 WUI 是通过浏览器访问 Hive。
元数据存储
Hive 将元数据存储在数据库中,如 mysql、derby。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器、编译器、优化器、执行器
解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后由 MapRece 调用执行。
Hadoop
Hive 的数据存储在 HDFS 中,大部分的查询由 MapRece 完成(包含 * 的查询,比如 select * from tbl 不会生成 MapRece 任务)。
‘叁’ 如何编译hive_hbase-handler.jar
之前上传了一个文档:http://wenku..com/view/faec57fb04a1b0717fd5dd00.html?st=1你可以看看。
‘肆’ Apache Hive的工作原理是什么
Hadoop处理完全依赖于MapRece框架,这要求用户了解Java编程的高级样式,以便成功查询数据。Apache Hive背后的动机是简化查询,并将Hadoop非结构化数据开放给公司中更广泛的用户群。
Hive有三个主要功能:数据汇总,查询和分析。它支持名为HiveQL或HQL的语言表达的查询,HQL是一种声明性的类SQL语言,在其第一个版本中,它自动将SQL样式的查询转换为在Hadoop平台上执行的MapRece。此外,HiveQL支持自定义MapRece脚本,以便查询。
当通过Hive提交SQL查询时,它们最初由创建会话句柄的驱动程序组件接收,通过Java数据库连接/开放数据库连接接口将请求转发给编译器,随后转发作业以供执行。Hive支持数据序列化/反序列化,并通过包含名为Hive-Metastore的系统目录来提高模式设计的灵活性。
‘伍’ hive的安装配置
你可以下载一个已打包好的hive稳定版,也可以下载源码自己build一个版本。
安装需要 java 1.6,java 1.7或更高版本。 Hadoop 2.x或更高, 1.x. Hive 0.13 版本也支持 0.20.x, 0.23.x Linux,mac,windows操作系统。以下内容适用于linux系统。 安装打包好的hive
需要先到apache下载已打包好的hive镜像,然后解压开该文件 $tar-xzvfhive-x.y.z.tar.gz设置hive环境变量 $cdhive-x.y.z$exportHIVE_HOME={{pwd}}设置hive运行路径 $exportPATH=$HIVE_HOME/bin:$PATH编译Hive源码
下载hive源码
此处使用maven编译,需要下载安装maven。
以Hive 0.13版为例 编译hive 0.13源码基于hadoop 0.23或更高版本
$cdhive$mvncleaninstall-Phadoop-2,dist$cdpackaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin$lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore) 编译hive 基于hadoop 0.20
$cdhive$antcleanpackage$cdbuild/dist#lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore) 运行hive
Hive运行依赖于hadoop,在运行hadoop之前必需先配置好hadoopHome。 exportHADOOP_HOME=<hadoop-install-dir>在hdfs上为hive创建 mp目录和/user/hive/warehouse(akahive.metastore.warehouse.dir) 目录,然后你才可以运行hive。
在运行hive之前设置HiveHome。 $exportHIVE_HOME=<hive-install-dir>在命令行窗口启动hive $$HIVE_HOME/bin/hive若执行成功,将看到类似内容如图所示
‘陆’ hive批量处理配置
利用选项2, 先打通Hive对HBase指定表的全表访问, 再建立一个新的空表, 把查询出来的数据全部导入到新表当中, 以后的所有数据分析操作在新表中完成。
说干就干, 让我们试一个简单的例子。
首先在HBase里面建一个表, 名为 student, 包含 id 和 name 两个column.
hbase shell
create 'student', 'id', 'name'
向表中插入两行数据
put 'student', 'row1', 'id:val', '1'
put 'student', 'row1', 'name:val', 'Tony'
put 'student', 'row2', 'id:val', '2'
put 'student', 'row2', 'name:val', 'Mike'
注意:在插入数据的时候一定要指定column (如id:val, name:value) 直接使用column family (如 id, name) 去存数据会导致后面Hive 建表的时候有问题。
扫描此表, 确定数据已经插入
‘柒’ Hive是什么
此外,hive也支持熟悉map-rece的开发者使用map-rece程序对数据做更加复杂的分析。 hive可以很好的结合thrift和控制分隔符,也支持用户自定义分隔符。 hive基于hadoop,hadoop是批处理系统,不能保存低延迟,因此,hive的查询也不能保证低延迟。 hive的工作模式是:提交一个任务,等到任务结束时被通知,而不是实时查询。相对应的是,类似于Oracle这样的系统当运行于小数据集的时候,响应非常快,可当处理的数据集非常大的时候,可能需要数小时。需要说明的是,hive即使在很小的数据集上运行,也可能需要数分钟才能完成。 低延迟不是hive追求的首要目标。
‘捌’ 怎么查看hive支持的jdk版本
在这里我说一个我原来的解决办法:
在eclipse里面写了一个简单的tpch查询语句,但是一直连接不上hiveserver2,一直显示httpClient或者Cookie之类的找不到类的错误,但是所有相关的jar都已经打进去了;
折腾了很久之后,把eclipse里面的jdk从1.8换成了1.7,同时把编译器的版本从1.8降到1.7,再次执行就可以完美连接了;
这在本地行得通,但我需要把本地的程序打成jar包放到远程节点上去跑,远程节点只有命令行没有eclipse,节点上编译的所有的东西都是基于jdk1.8的,然后怎么办呢;
发现linux下面可以暂时更改某一个shell里面的环境变量,在关闭shell后环境变量就会恢复原样;
把打好的jar包放到节点上之后,打开一个新的shell,输入:
export JAVA_HOME=下载的1.7版本的jdk的路径
export PATH=下载的1.7版本的jdk的路径/bin
然后再用java指令在这个shell里面运行打好的jar包,就好啦。
‘玖’ hive自定义udf函数,在udf函数内怎么读取hive表数据
最近感受了hive的udf函数的强大威力了,不仅可以使用很多已经有的udf函数,还可以自己定义符合业务场景的udf函数,下面就说一下如何写udf/udaf/udtf函数,算是一个入门介绍吧。
First, you need to create a new class that extends UDF, with one or more methods named evaluate.
package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public final class Lower extends UDF {
public Text evaluate(final Text s) {
if (s == null) { return null; }
return new Text(s.toString().toLowerCase());
}
}
After compiling your code to a jar, you need to add this to the hive classpath.
add jar my_jar.jar;
Once hive is started up with your jars in the classpath, the final step is to register your function
create temporary function my_lower as 'com.example.hive.udf.Lower';
上面主要描述了实现一个udf的过程,首先自然是实现一个UDF函数,然后编译为jar并加入到hive的classpath中,最后创建一个临时变量名字让hive中调用。转载,仅供参考。
‘拾’ 程序中的Hive具体是干什么用的呢
Hive是基于Hadoop平台的数仓工具,具有海量数据存储、水平可扩展、离线批量处理的优点,解决了传统关系型数仓不能支持海量数据存储、水平可扩展性差等问题,但是由于Hive数据存储和数据处理是依赖于HDFS和MapRece,因此在Hive进行数据离线批量处理时,需将查询语言先转换成MR任务,由MR批量处理返回结果,所以Hive没法满足数据实时查询分析的需求。
Hive是由FaceBook研发并开源,当时FaceBook使用Oracle作为数仓,由于数据量越来越大,Oracle数仓性能越来越差,没法实现海量数据的离线批量分析,因此基于Hadoop研发Hive,并开源给Apacha。
由于Hive不能实现数据实时查询交互,Hbase可提供实时在线查询能力,因此Hive和Hbase形成了良性互补。Hbase因为其海量数据存储、水平扩展、批量数据处理等优点,也得到了广泛应用。
Pig与HIVE工具类似,都可以用类sql语言对数据进行处理。但是他们应用场景有区别,Pig用于数据仓库数据的ETL,HIVE用于数仓数据分析。
从架构图当中,可看出Hive并没有完成数据的存储和处理,它是由HDFS完成数据存储,MR完成数据处理,其只是提供了用户查询语言的能力。Hive支持类sql语言,这种SQL称为Hivesql。用户可用Hivesql语言查询,其驱动可将Hivesql语言转换成MR任务,完成数据处理。
【Hive的访问接口】
CLI:是hive提供的命令行工具
HWI:是Hive的web访问接口
JDBC/ODBC:是两种的标准的应用程序编程访问接口
Thrift Server:提供异构语言,进行远程RPC调用Hive的能力。
因此Hiv具备丰富的访问接口能力,几乎能满足各种开发应用场景需求。
【Driver】
是HIVE比较核心的驱动模块,包含编译器、优化器、执行器,职责为把用户输入的Hivesql转换成MR数据处理任务
【Metastore】
是HIVE的元数据存储模块,数据的访问和查找,必须要先访问元数据。Hive中的元数据一般使用单独的关系型数据库存储,常用的是Mysql,为了确保高可用,Mysql元数据库还需主备部署。
架构图上面Karmasphere、Hue、Qubole也是访问HIVE的工具,其中Qubole可远程访问HIVE,相当于HIVE作为一种公有云服务,用户可通过互联网访问Hive服务。
Hive在使用过程中出现了一些不稳定问题,由此发展出了Hive HA机制,