Spark从ADLS gen1读取文件

时间:2019-10-14 16:35:25

标签: azure apache-spark azure-data-lake

我有一个将(覆盖现有文件)写入ADLS Gen1目录的进程,然后是另一个启动火花作业以读取最新覆盖文件的进程。

似乎大多数时候火花不读取最新的更新文件。在为第二个进程读取文件建立了一些延迟(30s-60s)之后,它似乎可以正常工作。

在不引入任何延迟的情况下解决此问题的最佳方法是什么?

赞赏反馈。

1 个答案:

答案 0 :(得分:1)

基于我搜索的documents HDFS,writer锁定不会阻止其他客户端读取。请参阅以下语句:

  

作者必须先获得文件的排他锁,然后才能使用   允许在这些文件中写入/追加/截断数据。值得注意的是   此排他锁不会阻止其他客户端读取   文件,(这样客户端可以同时写文件   另一个可能正在读取同一文件)。

所以,我的看法是,如果当前将某些内容写入文件需要一段时间,则不可避免地会延迟读取一致性。


如果您确实要确保强读取一致性(不希望客户端读取滞后数据),请尝试在此处提供一种变通办法,以供您参考:在读写之前添加Redis数据库!

无论您何时进行读取或写入操作,首先请判断Redis数据库中是否存在特定密钥。如果不是,则将一组键值写入Redis。然后进行业务逻辑处理。最后,不要忘记删除密钥。

尽管这可能有点麻烦或影响性能,但我认为它可以满足您的需求。顺便说一句,考虑到业务逻辑可能会失败或崩溃,以致永不释放密钥,您可以在创建密钥时添加TTL设置来避免这种情况。