前言
關于Alluxio的操作一定要推薦一把官網文檔,裡面官網的文檔我個人覺得是最好的,這次操作整合的目标也是把官網的例子在自己的環境中跑成功。
官網Hive整合Alluxio
環境準備
Hive針對不管是hdfs也好,還是alluxio也好其實都是一個client的操作,針對配置目标也是讓hive可以正常讀寫alluxio的路徑就行。
根據自己的環境情況,在conf/hive-env.sh設定設定client jar包:
本地的目标是在hive中建立一個表,需要用到資料,我下載下傳了一個小的:
wget http://files.grouplens.org/datasets/movielens/ml-100k.zip
解壓之後如下,後面需要用到裡面的資料:
[[email protected] ml-100k]$ pwd
/home/hdfs/ml-100k
[[email protected] ml-100k]$ ll
total 15776
-rwxr-x--- 1 hdfs hdfs 716 Jul 20 2000 allbut.pl
-rwxr-x--- 1 hdfs hdfs 643 Jul 20 2000 mku.sh
-rw-r----- 1 hdfs hdfs 6750 Jan 30 2016 README
-rw-r----- 1 hdfs hdfs 1586544 Mar 9 2001 u1.base
-rw-r----- 1 hdfs hdfs 392629 Mar 9 2001 u1.test
-rw-r----- 1 hdfs hdfs 1583948 Mar 9 2001 u2.base
-rw-r----- 1 hdfs hdfs 395225 Mar 9 2001 u2.test
-rw-r----- 1 hdfs hdfs 1582546 Mar 9 2001 u3.base
-rw-r----- 1 hdfs hdfs 396627 Mar 9 2001 u3.test
-rw-r----- 1 hdfs hdfs 1581878 Mar 9 2001 u4.base
-rw-r----- 1 hdfs hdfs 397295 Mar 9 2001 u4.test
-rw-r----- 1 hdfs hdfs 1581776 Mar 9 2001 u5.base
-rw-r----- 1 hdfs hdfs 397397 Mar 9 2001 u5.test
-rw-r----- 1 hdfs hdfs 1792501 Mar 9 2001 ua.base
-rw-r----- 1 hdfs hdfs 186672 Mar 9 2001 ua.test
-rw-r----- 1 hdfs hdfs 1792476 Mar 9 2001 ub.base
-rw-r----- 1 hdfs hdfs 186697 Mar 9 2001 ub.test
-rw-r----- 1 hdfs hdfs 1979173 Jul 20 2000 u.data
-rw-r----- 1 hdfs hdfs 202 Jul 20 2000 u.genre
-rw-r----- 1 hdfs hdfs 36 Jul 20 2000 u.info
-rw-r----- 1 hdfs hdfs 236344 Jul 20 2000 u.item
-rw-r----- 1 hdfs hdfs 193 Jul 20 2000 u.occupation
-rw-r----- 1 hdfs hdfs 22628 Jul 20 2000 u.user
建立Hive内部表關聯alluxio
建立内部表的操作實作的是hive的表直接關聯到alluxio上,這個的效果是相當于一張記憶體表,需要做的操作是把表的LOCATION指向alluxio即可:
執行指令,把資料複制到alluxio上:
[[email protected] alluxio]$ ./bin/alluxio fs copyFromLocal /home/hdfs/ml-100k/u.user alluxio://daas-service-01:19998/ml-100k
Copied file:///home/hdfs/ml-100k/u.user to alluxio://daas-service-01:19998/ml-100k
我們檢視alluxio ui:

建立hive表,把路徑關聯上即可,和hdfs上的表操作差不多
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
> LOCATION 'alluxio://daas-service-01:19998/ml-100k';
OK
Time taken: 3.485 seconds
建立Hive外部表關聯alluxio操作
外部表關聯就是表和資料隻是關聯關系,調整location就行
hive> CREATE EXTERNAL TABLE u_user_2 (
> userid INT,
> age INT,
> gender CHAR(1),
> occupation STRING,
> zipcode STRING)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY '|'
> STORED AS TEXTFILE
> LOCATION 'alluxio://daas-service-01:19998/ml-100k';
OK
其實隻要指定location就行,其他的話和以前沒啥差別~
調整原有hdfs上的表讀取alluxio
場景是以前的hive表是直接讀取hdfs的,現在需要調整為alluxio,這個場景帶來的效果是,第一次讀取表的時候還是讀取hdfs,但是讀取完成時候,資料hdfs上加載到alluxio上,這個操作的前提是alluxio的根路徑需要和hdfs的根路徑關聯,這個需要補充的是這裡隻要實作hdfs的路徑和alluxio是重疊的,alluxio可以感覺到路徑被讀取了,需要調整配置,重新開機alluxio
alluxio.master.mount.table.root.ufs=hdfs://daas-service-01/
接下來的是表的操作,首先是建立一張普通表:
CREATE TABLE u_user_3 (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE ;
再導入資料:
Time taken: 0.196 seconds, Fetched: 5 row(s)
hive> desc formatted u_user_3;
OK
# col_name data_type comment
userid int
age int
gender char(1)
occupation string
zipcode string
# Detailed Table Information
Database: default
Owner: hdfs
CreateTime: Sun Mar 29 09:07:06 CST 2020
LastAccessTime: UNKNOWN
Retention: 0
Location: hdfs://daas-service-01/bip/hive_warehouse/u_user_3
......
這裡隻是普通操作,資料還是存儲在hdfs中,接下來需要修改表的存儲路徑到alluxio中:
我們再對這個表查詢:
我們再去alluxio中可以看到表資料被cache住了
我們可以在hive執行日志中看到讀取了alluxio的資料了
alluxio表調整回hdfs
這個其實是一個逆操作,隻需要把表的location調整回去就好了
小總結
- alluxio操作其實挺實在的,就是路徑之間的切換,操作起來不是很困難
- 操作的時候需要注意檢視hive輸出的日志,對着日志去解決問題
- 我測試下來資料雖然在記憶體,但是并沒有多大的提速,分析下來發現目前的配置僅僅讀hdfs的操作是快速,涉及mr和臨時資料耗時其實沒有變化,後續接着深入研究