在Alluxio上运行Apache Hive

Slack Docker Pulls GitHub edit source

该文档介绍如何运行Apache Hive,以能够在不同存储层将Hive的表格存储到Alluxio当中。

前期准备

开始之前你需要安装好Java,同时使用本地模式集群模式构建好Alluxio。

接着下载Hive

配置

在Hadoop MapReduce上运行Hive之前,请按照在Alluxio上运行MapReduce的指示来确保MapReduce可以运行在Alluxio上。

Hive用户可以创建外部表,令其指向Alluxio中的特定位置,而使其他表的存储不变,或者使用Alluxio作为默认的文件系统。下面我们将介绍两种在Alluxio上使用Hive的方法。

创建位于Alluxio上的外部表

Hive可以创建存储在Alluxio上的外部表。设置很直接,并且独立于其他的Hive表。一个示例就是将频繁使用的Hive表存在Alluxio上,从而通过直接从内存中读文件获得高吞吐量和低延迟。

配置Hive

在shell中或conf/hive-env.sh下设置HIVE_AUX_JARS_PATH

export HIVE_AUX_JARS_PATH=/<PATH_TO_ALLUXIO>/client/alluxio-1.5.0-client.jar:${HIVE_AUX_JARS_PATH}

###Hive 命令示例

这里有一个示例展示了在Alluxio上创建Hive的外部表。你可以从http://grouplens.org/datasets/movielens/下载数据文件(如:ml-100k.zip)。然后接下该文件,并且将文件u.user上传到Alluxio的ml-100k/下:

bin/alluxio fs mkdir /ml-100k
bin/alluxio fs copyFromLocal /path/to/ml-100k/u.user alluxio://master_hostname:port//ml-100k

然后创建外部表:

hive> CREATE EXTERNAL TABLE u_user (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
OW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
LOCATION 'alluxio://master_hostname:port/ml-100k';

Alluxio作为默认文件系统

Apache Hive也可以使用Alluxio,只需通过一个一般的文件系统接口来替换Hadoop文件系统使用Alluxio。这种方式下,Hive使用Alluxio作为其默认文件系统,它的元数据和中间结果都将存储在Alluxio上。

配置 Hive

添加以下配置项到你的Hive安装目下的conf目录里的hive-site.xml中:

<property>
   <name>fs.defaultFS</name>
   <value>alluxio://master_hostname:port</value>
</property>

若要启用容错模式,将Alluxio模式设置为alluxio-ft

<property>
   <name>fs.defaultFS</name>
   <value>alluxio-ft:///</value>
</property>

添加额外Alluxio配置到Hive中

如果你有其他需要对Hive指定的Alluxio配置属性,将它们添加到每个结点的Hadoop配置目录下core-site.xml中。例如,将alluxio.user.file.writetype.default 属性由默认的MUST_CACHE修改成CACHE_THROUGH

<property>
<name>alluxio.user.file.writetype.default</name>
<value>CACHE_THROUGH</value>
</property>

在Alluxio上运行Hive

在Alluxio中为Hive创建相应目录:

./bin/alluxio fs mkdir /tmp
./bin/alluxio fs mkdir /user/hive/warehouse
./bin/alluxio fs chmod 775 /tmp
./bin/alluxio fs chmod 775 /user/hive/warehouse

接着你可以根据Hive documentation来使用Hive了。

Hive命令行示例

在Hive中创建表并且将本地文件加载到Hive中:

依然使用来自http://grouplens.org/datasets/movielens/的数据文件ml-100k.zip

hive> CREATE TABLE u_user (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE;

hive> LOAD DATA LOCAL INPATH '/path/to/ml-100k/u.user'
OVERWRITE INTO TABLE u_user;

在浏览器中输入http://master_hostname:port以访问Alluxio Web UI,你可以看到相应文件夹以及Hive创建的文件:

HiveTableInAlluxio

hive> select * from u_user;

你可以在命令行中看到相应查询结果:

HiveQueryResult