生态 | Apache Hudi集成Alluxio实践

原文链接:https://mp.weixin.qq.com/s/sT2-KK23tvPY2oziEH11Kw

1. 什么是Alluxio

Alluxio为数据驱动型应用和存储系统构建了桥梁, 将数据从存储层移动到距离数据驱动型应用更近的位置从而能够更容易被访问。这还使得应用程序能够通过一个公共接口连接到许多存储系统。Alluxio内存至上的层次化架构使得数据的访问速度能比现有方案快几个数量级。

对于用户应用程序和计算框架,Alluxio提供了快速存储,促进了作业之间的数据共享和局部性。当数据位于本地时,Alluxio可以以内存速度提供数据;当数据位于Alluxio时,Alluxio可以以计算集群网络的速度提供数据。第一次访问数据时,只从存储系统上读取一次数据。为了得到更好的性能,Alluxio推荐部署在计算集群上。

对于存储系统,Alluxio弥补了大数据应用与传统存储系统之间的差距,扩大了可用的数据工作负载集。当同时挂载多个数据源时,Alluxio可以作为任意数量的不同数据源的统一层。

Alluxio可以被分为三个部分:masters、workers以及clients。一个典型的设置由一个主服务器、多个备用服务器和多个worker组成。客户端用于通过Spark或MapReduce作业、Alluxio命令行等与Alluxio服务器通信。

img

2. 什么是Apache Hudi

Apache Hudi使得您能在hadoop兼容的存储之上存储大量数据,同时它还提供两种原语,使得除了经典的批处理之外,还可以在数据湖上进行流处理。这两种原语分别是:

  • Update/Delete记录:Hudi使用细粒度的文件/记录级别索引来支持Update/Delete记录,同时还提供写操作的事务保证。查询会处理最后一个提交的快照,并基于此输出结果。
  • 变更流:Hudi对获取数据变更提供了一流的支持:可以从给定的时间点获取给定表中已updated/inserted/deleted的所有记录的增量流,并解锁新的查询姿势(类别)

img

3. 步骤

3.1 环境准备

参考官网安装搭建alluxio环境:https://www.alluxio.io/

3.2 执行

在hudi可以加载到的cores-site.xml 文件里面追加此配置

<property>
  <name>fs.alluxio.impl</name>
  <value>alluxio.hadoop.FileSystem</value>
</property>

将此依赖添加进工程pom.xml

<dependency>
  <groupId>org.alluxio</groupId>
  <artifactId>alluxio-shaded-client</artifactId>
  <version>2.2.1</version>
</dependency>

用户可以把jar包放在spark可以加载的地方或者通过以下方式引入

--jars alluxio-shaded-client-2.2.1.jar

这时只需要把数据写入alluxio即可,使用deltastreamer的使用需要如下配置

--target-base-path alluxio://........

完成上述步骤就已经完成了把hudi数据写入了alluxio的工作。事实上这个时候数据还未从hdfs加载到alluxio,需要查询一次即可;查询不同的hudi视图方式

  • 可以使用hive sql查询。使用命令查询hive表结构发现loaction已经指向了alluxio
  • 可以使用spark sql查询。spark.read.format("org.apache.hudi").option(xxx).load("alluxio://")

3.3 验证

验证在未进行查询的时候数据不会加载进alluxio,in-alluxio是0%,当进行一次查询之后数据从hdfs加载进alluxio,in-alluxio大于0%。

img

4. 问题

4.1 能否做到Alluxio与Hudi完全可拔插?

目前Hudi与开源版本alluxio无法完全做到可拔插。因为hudi依赖hive表进行某些视图的查询,然而要把hive表的数据源从alluxio指向hdfs需要修改hive表的loaction,但是生产环境我们一般无法进行在线修改hive表的操作。如果想不修改location可以使用alluxio企业版本

posted @ 2020-07-20 20:51  leesf  阅读(1247)  评论(0编辑  收藏  举报