Hive整合Alluxio实操

简介: 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和临时数据耗时其实没有变化,后续接着深入研究
目录
相关文章
|
SQL 分布式计算 Hadoop
hive中删除操作及HDFS回收站管理腾出空间的实操
删除hive数据时,首先明确你使用删除数据还是连同表结构也要删除,如果只是要删除数据可以选择truncate来清空表中的数据,如果要对表进行删除,首先要考虑该表是内部表还是外部表。如果是外部表要确认数据是否还需要使用,如果不需要使用了可以直接使用HDFS命令对目录进行删除。
1098 0
|
2月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
138 1
|
9月前
|
SQL Java 大数据
Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互
Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互
343 1
|
2月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
143 0
|
9月前
|
SQL 分布式计算 大数据
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 入门
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 入门
109 0
|
2月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
146 0
|
2月前
|
SQL 存储 分布式计算
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
561 0
|
9月前
|
SQL 存储 大数据
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 语法与概念
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 语法与概念
100 0
|
25天前
|
SQL 数据采集 数据可视化
基于Hive的招聘网站的大数据分析系统
基于Hive的招聘网站的大数据分析系统
|
25天前
|
SQL 关系型数据库 MySQL
基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)
基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)