您可以通过下载压缩包来安装Hive的稳定版本,也可以下载源代码并从中构建Hive。
运行HiveServer2和Beeline
首先从一个Apache下载镜像中下载Hive的最新稳定版本(请参阅Hive版本)。
接下来,您需要对压缩包进行解压。这将导致创建一个名为hive-x.y.z的子目录(其中x.y.z是发行版号):
$ tar -xzvf hive-x.y.z.tar.gz
将环境变量HIVE_HOME设置为Hive的安装目录:
$ cd hive-x.y.z
$ export HIVE_HOME={{pwd}}
最后,将$HIVE_HOME/bin添加到您的PATH中:
$ export PATH=$HIVE_HOME/bin:$PATH
最新的Hive代码放在Hive的Git仓库中的这个地址上面:使用如下命令从Hive的Git仓库中克隆
git clone https://git-wip-us.apache.org/repos/asf/hive.git (the master branch)
所有发行版本均位于名为“ branch-0.#”或“ branch-1.#”或即将推出的“ branch-2.#”的分支中,除了发行版0.8.1是在“branch-0.8-r2”这个分支中。具有其他名称的任何分支都是进行中工作的功能分支。有关详细信息,请参见了解Hive分支。
从0.13开始,Hive使用Apache Maven构建。
要从master分支构建当前的Hive代码:
$ git clone https://git-wip-us.apache.org/repos/asf/hive.git
$ cd hive
$ mvn clean package -Pdist
$ cd packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin
$ ls
LICENSE
NOTICE
README.txt
RELEASE_NOTES.txt
bin/ (all the shell scripts)
lib/ (required jar files)
conf/ (configuration files)
examples/ (sample input and query files)
hcatalog / (hcatalog installation)
scripts / (upgrade scripts for hive-metastore)
这里,上面的{version}指的是当前的Hive版本。
如果使用Maven(mvn)构建Hive源代码,我们将把目录“/packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin”称为用于页面的其余部分。
在branch-1分支中,Hive同时支持Hadoop 1.x和2.x。您将需要通过Maven配置文件指定针对哪个版本的Hadoop。要针对Hadoop 1.x进行构建,请使用hadoop-1进行配置;对于Hadoop 2.x使用hadoop-2进行配置。例如,要针对Hadoop 1.x构建,上述mvn命令如下:
$ mvn clean package -Phadoop-1,dist
在Hive 0.13之前,Hive是使用Apache Ant构建的。要在Hadoop 0.20上构建旧版本的Hive:
$ svn co http://svn.apache.org/repos/asf/hive/branches/branch-{version} hive
$ cd hive
$ ant clean package
$ cd build/dist
# ls
LICENSE
NOTICE
README.txt
RELEASE_NOTES.txt
bin/ (all the shell scripts)
lib/ (required jar files)
conf/ (configuration files)
examples/ (sample input and query files)
hcatalog / (hcatalog installation)
scripts / (upgrade scripts for hive-metastore)
如果使用Ant进行编译的话,我们将目录“build/dist”称为。
要针对Hadoop 0.23、2.0.0或其他版本在Ant中构建Hive,请使用适当的标志进行构建;以下是一些示例:
$ ant clean package -Dhadoop.version=0.23.3 -Dhadoop-0.23.version=0.23.3 -Dhadoop.mr.rev=23
$ ant clean package -Dhadoop.version=2.0.0-alpha -Dhadoop-0.23.version=2.0.0-alpha -Dhadoop.mr.rev=23
运行Hive需要使用到Hadoop,因此:
此外,必须先使用以下HDFS命令创建/tmp
和/user/hive/warehouse
(aka hive.metastore.warehouse.dir)并将它们设置为chmod g + w,然后才能在Hive中创建表。
$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
尽管没有必要,但是您可能会发现设置HIVE_HOME会很有用:
$ export HIVE_HOME=<hive-install-dir>
要从Shell脚本中使用Hive命令行界面(CLI):
$ $HIVE_HOME/bin/hive
从Hive 2.1开始,我们需要运行以下schematool命令作为初始化步骤。例如,我们可以使用“ derby”作为数据库类型。
$ $HIVE_HOME/bin/schematool -dbType <db type> -initSchema
HiveServer2(在Hive 0.11中引入)具有自己的CLI,称为Beeline。HiveCLI现在不赞成使用Beeline,因为它缺少HiveServer2的多用户,安全性和其他功能。从shell运行HiveServer2和Beeline:
$ $HIVE_HOME/bin/hiveserver2
$ $HIVE_HOME/bin/beeline -u jdbc:hive2://$HS2_HOST:$HS2_PORT
Beeline是使用HiveServer2的JDBC URL启动的,该URL取决于启动HiveServer2的地址和端口。默认情况下,它将是(localhost:10000),因此地址看起来像jdbc:hive2://localhost:10000。
或者以相同的过程启动Beeline和HiveServer2以进行测试,以获得与HiveCLI类似的用户体验:
$ $HIVE_HOME/bin/beeline -u jdbc:hive2://
要从Hive版本0.11.0和更高版本中的Shell运行HCatalog服务,请执行以下操作:
$ $HIVE_HOME/hcatalog/sbin/hcat_server.sh
要在Hive版本0.11.0和更高版本中使用HCatalog命令行界面(CLI):
$ $HIVE_HOME/hcatalog/bin/hcat
有关更多信息,请参见HCatalog手册中的用压缩包安装HCatalog和HCatalog CLI。
要从Hive版本0.11.0和更高版本中的Shell运行WebHCat服务,请执行以下操作:
$ $HIVE_HOME/hcatalog/sbin/webhcat_server.sh
有关更多信息,请参见WebHCat手册中的WebHCat安装。
beeline> SET mapred.job.tracker=myhost.mycompany.com:50030;
beeline> SET -v;
后者显示所有当前设置。如果没有-v选项,则仅显示与基本Hadoop配置不同的变量。
Hive编译器会为大多数查询生成map-reduce作业。然后将这些作业提交到变量指示的Map-Reduce集群中:
mapred.job.tracker
尽管这通常指向具有多个节点的map-reduce集群,但是Hadoop还提供了一个不错的选择,可以在用户工作站上本地运行map-reduce作业。这对于在小型数据集上运行查询非常有用–在这种情况下,本地模式执行通常比将作业提交到大型集群要快得多。可以透明的从HDFS访问数据。相反,本地模式仅使用一个reducer运行,并且处理大型数据集的速度可能非常慢。
从版本0.7开始,Hive完全支持本地模式执行。要启用此功能,用户可以启用以下选项:
hive> SET mapreduce.framework.name=local;
另外,mapred.local.dir应该指向在本地计算机上有效的路径(例如/ tmp//mapred/local)。(否则,用户将获得分配本地磁盘空间的异常。)
从0.7版开始,Hive还支持一种以本地模式自动运行map-reduce作业的模式。相关选项为hive.exec.mode.local.auto
,hive.exec.mode.local.auto.inputbytes.max
和hive.exec.mode.local.auto.tasks.max
:
hive> SET hive.exec.mode.local.auto=false;
请注意,默认情况下禁用此功能。如果需要启用此个功能,则Hive将分析查询中每个map-reduce作业的大小,如果满足以下阈值,则可以在本地运行它:
因此,对于小数据集的查询,或者对于具有多个map-reduce作业的查询,这些作业对后续作业的输入要小得多(由于先前作业中的reduction和filtering),因此可以在本地运行作业。
请注意,Hadoop服务器节点的运行时环境和运行Hive客户端的计算机可能会有所不同(由于不同的jvm版本或不同的软件库)。在本地模式下运行时,这可能会导致意外的行为或错误。还要注意,本地模式执行是在单独的子JVM(Hive客户端的JVM)中完成的。如果用户愿意,可以通过选项hive.mapred.local.mem控制此子jvm的最大内存量。默认情况下,它设置为零,在这种情况下,Hive让Hadoop确定子jvm的默认内存限制。
Hive使用log4j进行日志记录。默认情况下,CLI不会将日志发送到控制台。对于0.13.0之前的Hive版本,默认日志记录级别为WARN。从Hive 0.13.0开始,默认日志记录级别为INFO。
/tmp/
注意:在本地模式下,在Hive 0.13.0之前,日志文件名是“ .log”而不是“ hive.log”。此Bug已在版本0.13.0中修复(请参见HIVE-5528和HIVE-5676)。
要配置其他日志位置,请在$HIVE_HOME/conf/hive-log4j.properties中设置hive.log.dir。确保目录设置了粘性位(chmod 1777 dir)。
hive.log.dir=
请注意,通过“ set”命令设置hive.root.logger不会更改日志记录属性,因为它们是在初始化时确定的。
Hive还会在每个Hive会话的基础上将查询日志存储在/tmp/
Hive在Hadoop群集上执行期间的日志记录由Hadoop配置控制。通常,Hadoop将为每个map生成一个日志文件,并将reduce存储在执行任务的集群计算机上。可以通过从Hadoop JobTracker Web UI单击“任务详细信息”页面来获取日志文件。
使用本地模式(使用mapreduce.framework.name = local)时,Hadoop或Hive执行日志在客户端计算机本身上生成。从0.6版开始,Hive使用hive-exec-log4j.properties(仅在缺失时才会使用到hive-log4j.properties)来确定这些日志的默认传递位置。默认配置文件为每个在本地模式下执行的查询生成一个日志文件,并将其存储在/tmp/
有关WebHCat错误和日志记录的信息,请参见WebHCat手册中的错误代码和响应以及日志文件。
错误日志对于调试问题非常有用。请将任何错误(其中有很多!)发送给[email protected]。
从Hive 2.1.0起(使用HIVE-13027),Hive默认使用Log4j2的异步记录器。将hive.async.log.enabled设置为false将禁用异步日志记录并回退到同步日志记录。异步日志记录可以显着提高性能,因为日志记录将在单独的线程中处理,该线程使用LMAX干扰者队列来缓冲日志消息。有关优点和缺点,请参阅此。
HiveServer2操作日志可用于从Hive 0.14开始的客户端。有关配置,请参阅HiveServer2 Logging的配置。
对于每个metastore API调用,都会从Hive Metastore服务器记录Audit Logs。
Audit logs具有记录在metastore日志文件中的功能和一些相关的功能参数。它以log4j的INFO级别记录,因此您需要确保已启用INFO级别的记录(请参阅HIVE-3505)。日志条目的名称为“ HiveMetaStore.audit”。
在Hive 0.7中添加了Audit logs以实现安全客户端连接(HIVE-1948),在Hive 0.10中添加了非安全连接(HIVE-3277;也可以参见HIVE-2797)。