我有一个将(覆盖现有文件)写入ADLS Gen1目录的进程,然后是另一个启动火花作业以读取最新覆盖文件的进程。
似乎大多数时候火花不读取最新的更新文件。在为第二个进程读取文件建立了一些延迟(30s-60s)之后,它似乎可以正常工作。
在不引入任何延迟的情况下解决此问题的最佳方法是什么?
赞赏反馈。
答案 0 :(得分:1)
基于我搜索的documents HDFS,writer锁定不会阻止其他客户端读取。请参阅以下语句:
作者必须先获得文件的排他锁,然后才能使用 允许在这些文件中写入/追加/截断数据。值得注意的是 此排他锁不会阻止其他客户端读取 文件,(这样客户端可以同时写文件 另一个可能正在读取同一文件)。
所以,我的看法是,如果当前将某些内容写入文件需要一段时间,则不可避免地会延迟读取一致性。
如果您确实要确保强读取一致性(不希望客户端读取滞后数据),请尝试在此处提供一种变通办法,以供您参考:在读写之前添加Redis数据库!
无论您何时进行读取或写入操作,首先请判断Redis数据库中是否存在特定密钥。如果不是,则将一组键值写入Redis。然后进行业务逻辑处理。最后,不要忘记删除密钥。
尽管这可能有点麻烦或影响性能,但我认为它可以满足您的需求。顺便说一句,考虑到业务逻辑可能会失败或崩溃,以致永不释放密钥,您可以在创建密钥时添加TTL设置来避免这种情况。