Apache Hive是Apache软件基金会志愿者开发的一个开源项目。以前,它是Apache®Hadoop®的子项目,但现在已经毕业,成为一个独立的顶级项目。
Apache Hive™是一个数据仓库软件。它使用SQL便于读取,写入和管理驻留在分布式存储系统中的大型数据集。它的结构可以投影到已经存储的数据上,而且提供命令行工具和JDBC驱动程序以便用户可以连接到Hive上。
Hive基于Apache Hadoop™构建,提供以下功能:
- 可使用SQL访问数据的工具,来实现数据仓库任务,如提取/转换/加载(ETL),报告和数据分析。
- 可以兼容各种数据格式。
- 访问直接存储在Apache HDFS™或其他数据存储系统(如Apache HBase™)中的文件。
- 通过Apache Tez™,Apache Spark™或MapReduce查询执行。
- 使用HPL-SQL的过程语言。
- 通过Hive LLAP,Apache YARN和Apache Slider进行Sub-second级的查询检索。
Hive提供标准SQL功能,还包括了许多用于分析的最新的SQL:2003和SQL:2011功能。
Hive的SQL还可以通过用户定义的函数(UDF),用户定义的聚合函数(UDAF)和用户定义的表生成函数(UDTF)来扩展用户代码。
没有一个单独的必须存储数据的“Hive格式”。Hive自带了用于逗号和制表符分隔值(CSV/TSV)文本文件,Apache Parquet™,Apache ORC™和其他格式的内置连接器。用户可以使用其他格式的连接器扩展Hive。
Hive不是为在线事务处理(OLTP)工作负载而设计的。它最适合用于传统的数据仓库任务。
Hive旨在实现最大化的可扩展性(扩展到更多的机器动态添加到Hadoop集群),提高性能,容错性和松耦合、多样的输入格式。
Hive的组件包括HCatalog和WebHCat。
- HCatalog是Hive的一个组件。它是Hadoop的表和存储管理层,使用户能够使用不同的数据处理工具(包括Pig和MapReduce)轻松地在网格上读取和写入数据。
- WebHCat提供了一种服务,可以使用它来运行Hadoop MapReduce(或YARN),Pig,Hive作业或使用HTTP(REST样式)接口执行Hive元数据操作。
安装
我们可以通过下载tarball安装稳定的Hive版本,也可以下载源代码并从中构建Hive。
环境要求:
- Java 1.7。Hive 1.2以上版本需要Java 1.7或更高版本。Hive版本0.14到1.1也使用Java 1.6。强烈建议用户开始使用Java 1.8
- Hadoop 2.x(首选),1.x(Hive 2.0.0及更高版本不支持)。Hive版本高于0.13的还支持Hadoop 0.20.x,0.23.x.
- Hive通常部署在Linux和Windows环境中。Mac更多时候只用于开发环境。
我们来看看Ubuntu 14.04上如何安装。
首先从Apache下载镜像之一下载最新的Hive的稳定版本。 http://mirrors.hust.edu.cn/apache/hive/stable-2/apache-hive-2.1.1-bin.tar.gz
接下来你需要解压,解压后会产生一个名为hive-2.1.1的子目录:
1$ tar -xzvf hive-x.y.z.tar.gz将环境变量HIVE_HOME设置为安装目录,然后把$HIVE_HOME/bin加到你的系统环境变量中:
123$ cd hive-2.1.1$ export HIVE_HOME=$ export PATH=$HIVE_HOME/bin:$PATH
通过编译安装
你也可以在主机上编译Hive来进行安装稍微麻烦一些:
从主分支构建当前Hive代码:
这里,{version}指的是当前的Hive版本2.1.1。12345$ 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如果使用Maven(mvn)构建Hive源,我们将引用目录“/packaging/ target/apache-hive-2.1.1-SNAPSHOT-bin/apache-hive-2.1.1-SNAPSHOT-bin”作为安装目录。
编译分支-1上的Hive,在分支1中,Hive支持Hadoop 1.x和2.x. 您需要通过Maven配置文件指定要构建的Hadoop版本。要构建对Hadoop 1.x使用配置文件hadoop-1; 对于Hadoop 2.x使用hadoop-2。例如,针对Hadoop 1.x构建,上述mvn命令变为:
1$ mvn clean package -Phadoop-1,dist
运行Hive
Hive使用Hadoop,所以我们还必须在你的环境变量中设置一下Hadoop:
此外,您必须使用以下HDFS命令创建/tmp和/user/hive/warehouse并将其设置为chmod g+w,然后才能在Hive中创建表。
你可能会发现它有用,虽然没有必要,设置HIVE_HOME:
通过在shell中使用Hive命令行界面(CLI)来运行:
运行HiveServer2和Beeline:
从Hive 2.1开始,我们需要运行下面的schematool命令作为初始化步骤。例如,我们可以使用“derby”作为db类型。
HiveServer2(在Hive 0.11中引入)有自己的CLI,命名为Beeline。 HiveCLI现在已经不再支持Beeline,因为它缺少HiveServer2的多用户,安全和其他功能。从shell运行HiveServer2:
Beeline是从HiveServer2的JDBC URL开始的,这取决于HiveServer2启动的地址和端口。默认情况下,它将是(localhost:10000),所以地址看起来像jdbc:hive2://localhost:10000。或者为了测试目的在同一进程中启动Beeline和HiveServer2,为HiveCLI提供类似的用户体验:
运行HCatalog,要从Hive版本0.11.0和更高版本的shell运行HCatalog服务器:
要在Hive版本0.11.0和更高版本中使用HCatalog命令行界面(CLI):
运行WebHCat,要从Hive版本0.11.0和更高版本的shell运行WebHCat服务器:
配置
Hive默认配置文件是
也可以通过在
Hive配置是建立在Hadoop之上的,它默认继承Hadoop配置变量。Hive配置可以通过编辑hive-site.xml并在其中定义任何所需的变量(包括Hadoop变量)如将HIVE_OPTS环境变量设置为“--hiveconf x1 = y1 --hiveconf x2 = y2”。
DDL操作
Hive DDL操作在Hive数据定义语言中记录。
创建Hive表,创建一个名为pokes的表,有两列,第一个是整数,另一个是字符串。
1hive> CREATE TABLE pokes(foo INT,bar STRING);创建一个名为invites的表,具有两列和一个名为ds的分区列。分区列是一个虚拟列。它不是数据本身的一部分,而是从特定数据集加载到的分区派生。默认情况下,表假定为文本输入格式,分隔符假定为^A(ctrl-a)。
1hive> CREATE TABLE invites(foo INT,bar STRING)PARTITIONED BY(ds STRING);
浏览表。
1hive> SHOW TABLES;列出所有表,列出以“s”结尾的所有表。模式匹配遵循Java正则表达式。
1hive> SHOW TABLES'。* s';显示列的列表。
1hive> DESCRIBE invites;
更改和删除表,可以更改表名称,并可以添加或替换列。注意,REPLACE COLUMNS替换所有现有列,只更改表的模式,而不是数据。该表必须使用本机SerDe格式。REPLACE COLUMNS也可用于从表的模式中:
1234hive> ALTER TABLE events RENAME TO 3koobecaf;hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');hive> ALTER TABLE invites REPLACE COLUMNS (foo INT, bar STRING, baz INT COMMENT 'baz replaces new_col2');删除列:
1hive> ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column');删除表:
1hive> DROP TABLE pokes;
更多内容访问: