Apache Hive数据仓库

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级的查询检索。


hadoop hive

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加到你的系统环境变量中:

    1
    2
    3
    $ cd hive-2.1.1
    $ export HIVE_HOME=
    $ export PATH=$HIVE_HOME/bin:$PATH

通过编译安装

你也可以在主机上编译Hive来进行安装稍微麻烦一些:

  • 从主分支构建当前Hive代码:

    1
    2
    3
    4
    5
    $ 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
    这里,{version}指的是当前的Hive版本2.1.1。

  • 如果使用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:

1
$ export HADOOP_HOME = <hadoop-install-dir>

此外,您必须使用以下HDFS命令创建/tmp和/user/hive/warehouse并将其设置为chmod g+w,然后才能在Hive中创建表。

1
2
3
4
$ $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:

1
$ export HIVE_HOME=<hive-install-dir>

通过在shell中使用Hive命令行界面(CLI)来运行:

1
$ $HIVE_HOME/bin/hive

运行HiveServer2和Beeline: 从Hive 2.1开始,我们需要运行下面的schematool命令作为初始化步骤。例如,我们可以使用“derby”作为db类型。

1
$ $HIVE_HOME/bin/schematool -dbType <db type> -initSchema

HiveServer2(在Hive 0.11中引入)有自己的CLI,命名为Beeline。 HiveCLI现在已经不再支持Beeline,因为它缺少HiveServer2的多用户,安全和其他功能。从shell运行HiveServer2:

1
$ $HIVE_HOME/bin/hiveserver2

Beeline是从HiveServer2的JDBC URL开始的,这取决于HiveServer2启动的地址和端口。默认情况下,它将是(localhost:10000),所以地址看起来像jdbc:hive2://localhost:10000。或者为了测试目的在同一进程中启动Beeline和HiveServer2,为HiveCLI提供类似的用户体验:

1
$ $HIVE_HOME/bin/beeline -u jdbc:hive2://localhost:10000

运行HCatalog,要从Hive版本0.11.0和更高版本的shell运行HCatalog服务器:

1
$ $HIVE_HOME/hcatalog/sbin/hcat_server.sh

要在Hive版本0.11.0和更高版本中使用HCatalog命令行界面(CLI):

1
$ $HIVE_HOME/hcatalog/bin/hcat

运行WebHCat,要从Hive版本0.11.0和更高版本的shell运行WebHCat服务器:

1
$ $HIVE_HOME/hcatalog/sbin/webhcat_server.sh

配置

Hive默认配置文件是/conf/hive-default.xml。例如可以通过设置HIVE_CONF_DIR环境变量来更改Hive配置目录的位置。

也可以通过在/conf/hive-site.xml中重新定义配置变量来更改配置变量,如Log4j对应的配置在/conf/hive-log4j.properties中。

Hive配置是建立在Hadoop之上的,它默认继承Hadoop配置变量。Hive配置可以通过编辑hive-site.xml并在其中定义任何所需的变量(包括Hadoop变量)如将HIVE_OPTS环境变量设置为“--hiveconf x1 = y1 --hiveconf x2 = y2”。

DDL操作

Hive DDL操作在Hive数据定义语言中记录。

  • 创建Hive表,创建一个名为pokes的表,有两列,第一个是整数,另一个是字符串。

    1
    hive> CREATE TABLE pokes(foo INT,bar STRING);
  • 创建一个名为invites的表,具有两列和一个名为ds的分区列。分区列是一个虚拟列。它不是数据本身的一部分,而是从特定数据集加载到的分区派生。默认情况下,表假定为文本输入格式,分隔符假定为^A(ctrl-a)。

    1
    hive> CREATE TABLE invites(foo INT,bar STRING)PARTITIONED BY(ds STRING);
  • 浏览表。

    1
    hive> SHOW TABLES;
  • 列出所有表,列出以“s”结尾的所有表。模式匹配遵循Java正则表达式。

    1
    hive> SHOW TABLES'。* s';
  • 显示列的列表。

    1
    hive> DESCRIBE invites;
  • 更改和删除表,可以更改表名称,并可以添加或替换列。注意,REPLACE COLUMNS替换所有现有列,只更改表的模式,而不是数据。该表必须使用本机SerDe格式。REPLACE COLUMNS也可用于从表的模式中:

    1
    2
    3
    4
    hive> 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');
  • 删除列:

    1
    hive> ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column');
  • 删除表:

    1
    hive> DROP TABLE pokes;

更多内容访问:

https://cwiki.apache.org/confluence/display/Hive/Home

分享(#share)