alluxio短路读
原理
当Client和Worker在同一节点时,客户端对本地缓存数据的读写请求可以绕过RPC接口,使本地文件系统可以直接访问Worker所管理的数据,这种情况被称为短路写,速度比较快,如果该节点没有Worker在运行,则Client的读写需要通过网络访问其他节点上的Worker,速度受网络宽带的限制。
当应用程序需要读取的数据已经被缓存在本地Alluxio worker上时,即为本地缓存命中。应用程序通过Alluxio client请求数据访问后,Alluxio client会向 Alluxio master检索储存该数据的Alluxio worker位置。如果本地Alluxio worker存有该数据,Alluxio client将使用”短路读”绕过Alluxio worker,直接通过本地文件系统读取文件。短路读可避免通过TCP socket传输数据,并能提供内存级别的数据访问速度。短路读是从Alluxio读取数据最快的方式。
在默认情况下,短路读需要获得相应的本地文件系统操作权限。当Alluxio worker和client是在容器化的环境中运行时,可能会由于不正确的资源信息统计而无法实现短路读。在基于文件系统的短路读不可行的情况下,Alluxio可以基于domain socket的方式实现短路读,这时,Alluxio worker将通过预先指定的domain socket路径将数据传输到client
配置
写参数: alluxio.user.file.writetype.default
CACHE_THROUGH:数据被同步写入AlluxioWorker和底层存储
MUST_CACHE:数据被同步写入AlluxioWorker,不写底层存储
THROUGH:数据只写底层存储,不写入AlluxioWorker
ASYNC_THROUGH:数据同步写入AlluxioWorker并异步写底层存储(速度快)
读参数: alluxio.user.file.readtype.default
CACHE_PROMOTE:数据在Worker上,则被移动到Worker的最高层,否则创建副本到本地Worker
CACHE:数据不在本地Worker中时直接创建副本到本地Worker
NO_CACHE:仅读数据,不写副本到Worker