天天看點

Hive整合Alluxio實操

前言

關于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整合Alluxio實操

建立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實操

我們可以在hive執行日志中看到讀取了alluxio的資料了

Hive整合Alluxio實操

alluxio表調整回hdfs

這個其實是一個逆操作,隻需要把表的location調整回去就好了

小總結

  1. alluxio操作其實挺實在的,就是路徑之間的切換,操作起來不是很困難
  2. 操作的時候需要注意檢視hive輸出的日志,對着日志去解決問題
  3. 我測試下來資料雖然在記憶體,但是并沒有多大的提速,分析下來發現目前的配置僅僅讀hdfs的操作是快速,涉及mr和臨時資料耗時其實沒有變化,後續接着深入研究

繼續閱讀