浅析Alluxio写操作的四种不同方法

Alluxio是一个能够数据分析和人工智能工作负载的开源数据编排系统。像Apache Spark或Apache Hive这样的分布式应用程序可以通过Alluxio与兼容HDFS的接口访问Alluxio中的数据,而无需修改代码。我们将外部存储(如HDFS或S3)作为底层存储。Alluxio是底层存储系统之上的一个新的存储层,它不仅可以提高原始I/O的性能,还允许应用程序能够灵活地选择读、写和管理文件。本文重点描述了向Alluxio写人文件的不同方法,并分析了如何实现在性能、一致性以及与HDFS相比的容错级别方面的权衡。

给定一个应用程序(例如:一个将输出保存到外部存储的Spark作业),将输出写入到一个Alluxio节点的内存层将获得最佳的写入性能。由于内存存储数据存在易失性,当Alluxio中的一个节点宕机或重启时,该节点内存中的任何数据都会丢失。为了防止数据丢失,通过配置客户端写类型,Alluxio提供了同步或异步地将数据持久化到底层存储的能力,每种写类型都有与之相关的优点和缺点。写入Alluxio存储的应用程序应该考虑不同的写特性,并进行成本效益分析,以确定最适合应用程序需求的写类型。

可用的写类型摘要如下:
在这里插入图片描述
写类型是客户端的属性,这意味着在提交应用程序时用户可以修改它们,而无需重新启动任何Alluxio进程。例如,要在提交Spark作业时将Alluxio写类型设置为CACHE_THROUGH,可以在Spark-submit中添加以下选项:

$ spark-submit \
--conf 'spark.driver.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH' \    
--conf 'spark.executor.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH' \    

当为应用选择写类型时,以下是一些一般性的建议:

  • 对于不需要保存的临时数据或很容易重新生成的数据,可以使用MUST_CACHE直接写入Alluxio内存。随着时间的推移,它会复制副本,虽然最不安全,但性能最好。

  • 对于近期内不会使用的数据,使用THROUGH将其直接从客户端应用立即持久化到底层存储,而不缓存任何副本。这在Alluxio存储中为需要快速、频繁读取的数据留出了更多空间。

  • 对于必须在写入应用返回时被持久化,并且很快会被其它Alluxio应用使用的数据,使用CACHE_THROUGH将数据写入Alluxio和底层存储。注意,Alluxio可以根据数据访问模式在Alluxio中创建副本。

  • 对于需要持久化,并且不需要立即使用的数据,可以使用ASYNC_THROUGH直接将数据写入Alluxio,然后异步地将数据持久化到UFS。

最后,补充说明一点:Alluxio 2.0之后用户可以显式地在Alluxio内存空间中指定数据的副本数,这既能够提升写的性能,又可以利用多副本机制提升容错性。这为既追求写性能,又要求保障数据不丢失的用户提供了一种新的机制。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值