原文链接: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服务器通信。

2. 什么是Apache Hudi

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

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

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%。

4. 问题

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

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

最新文章

  1. Python中模块安装文件的创建及使用
  2. maven导入本地jar包
  3. nodeJs中创建服务器
  4. Azure Automation (3) 定期将某个Azure订阅下的所有虚拟机开关机
  5. BeanFactory和ApplicationContext的区别
  6. Linux crontab命令的使用方法
  7. android获取string.xml的值(转)
  8. css经典布局学习
  9. Oracle的学习一:安装与卸载、sql *plus常用命令、Oracle用户管理
  10. 什么是MBR?(含图解)
  11. Nhibernate 智能提示 以及其他类库智能提示
  12. Ubuntu文件的复制、移动和删除命令
  13. Fiddler 抓包https配置 提示creation of the root certificate was not successful 证书安装不成功
  14. June.19 2018, Week 25th Tuesday
  15. 使用go语言编写IOS和Android程序
  16. IDEA中将WEB-INF\lib下的Jar包添加到项目中
  17. mybatis源码解析2---SqlSessionFactoryBuilder、SqlSessionFactory解析
  18. SCCM2012 R2实战系列之十二:解决OSD分发时间过长的问题
  19. ES6学习笔记二:各种扩展
  20. wildfly8+jpa EntityBean 简单入门

热门文章

  1. gitbub.com设置协作者提交代码步骤
  2. 为什么说String是线程安全的
  3. linux网络编程-socket(36)
  4. leetcode 力扣 两数之和
  5. js事件入门(3)
  6. 老板急坏了,公司网站的 HTTPS 过期了
  7. jupyter lab最强代码补全插件
  8. CentOS7下普通账号通过systemctl管理服务需要输入root密码问题
  9. VS2017配置PCL1.9.1 for win10
  10. Python趣味入门4:选择往往是最重要的-条件语句