Hive整合Alluxio實操

前言

關於Alluxio的操作一定要推薦一把官網文檔,裏面官網的文檔我個人覺得是最好的,這次操作整合的目標也是把官網的例子在自己的環境中跑成功。
官網Hive整合Alluxio

環境準備

Hive針對不管是hdfs也好,還是alluxio也好其實都是一個client的操作,針對配置目標也是讓hive可以正常讀寫alluxio的路徑就行。
根據自己的環境情況,在conf/hive-env.sh設置設置client jar包:

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

本地的目標是在hive中建立一個表,需要用到數據,我下載了一個小的:

wget http://files.grouplens.org/datasets/movielens/ml-100k.zip

解壓之後如下,後面需要用到裏面的數據:

[hdfs@daas-service-01 ml-100k]$ pwd 
/home/hdfs/ml-100k
[hdfs@daas-service-01 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上:

[hdfs@daas-service-01 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 ;

再導入數據:

LOAD DATA LOCAL INPATH '/home/hdfs/ml-100k/u.user' OVERWRITE INTO TABLE u_user_3;
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中:

alter table u_user_3 set location "alluxio://daas-service-01:19998/bip/hive_warehouse/u_user_3";

我們再對這個表查詢:

select count(*) from  u_user_3;

我們再去alluxio中可以看到表數據被cache住了
在這裏插入圖片描述
我們可以在hive執行日誌中看到讀取了alluxio的數據了
在這裏插入圖片描述

alluxio表調整回hdfs

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

alter table u_user_3 set location "hdfs://daas-service-01/bip/hive_warehouse/u_user_3";

小總結

  1. alluxio操作其實挺實在的,就是路徑之間的切換,操作起來不是很困難
  2. 操作的時候需要注意查看hive輸出的日誌,對着日誌去解決問題
  3. 我測試下來數據雖然在內存,但是並沒有多大的提速,分析下來發現當前的配置僅僅讀hdfs的操作是快速,涉及mr和臨時數據耗時其實沒有變化,後續接着深入研究
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章