Azure Spark从ADLS gen1读取文件
我有一个将(覆盖现有文件)写入ADLS Gen1目录的进程,然后是另一个启动spark作业以读取最新覆盖文件的进程 看起来spark大部分时间都没有读取最新更新的文件。在为第二个进程读取文件建立了一些延迟(30秒-60秒)之后,它似乎正在工作 在不造成任何延误的情况下,解决这一问题的最佳办法是什么 感谢您的反馈。根据我搜索的HDFS,writer锁不会阻止其他客户端读取。请参阅以下语句: 写入程序必须先获得文件的独占锁,然后才能 允许在这些文件中写入/追加/截断数据。尤其是 此独占锁不会阻止其他客户端读取 文件,(这样客户机就可以在编写文件的同时 另一个可能正在读取相同的文件) 所以,我的观点是,如果当前文件中写入的内容需要一段时间,那么读取一致性的延迟是不可避免的Azure Spark从ADLS gen1读取文件,azure,apache-spark,azure-data-lake,Azure,Apache Spark,Azure Data Lake,我有一个将(覆盖现有文件)写入ADLS Gen1目录的进程,然后是另一个启动spark作业以读取最新覆盖文件的进程 看起来spark大部分时间都没有读取最新更新的文件。在为第二个进程读取文件建立了一些延迟(30秒-60秒)之后,它似乎正在工作 在不造成任何延误的情况下,解决这一问题的最佳办法是什么 感谢您的反馈。根据我搜索的HDFS,writer锁不会阻止其他客户端读取。请参阅以下语句: 写入程序必须先获得文件的独占锁,然后才能 允许在这些文件中写入/追加/截断数据。尤其是 此独占锁不会阻止其他
如果您确实希望确保强读取一致性(不希望客户端读取滞后数据),我尝试在这里提供一个解决方案供您参考:在写入和读取之前添加Redis数据库 无论何时进行读写操作,首先请判断Redis数据库中是否有特定的密钥。否则,将一组键值写入Redis。然后进行业务逻辑处理。最后,别忘了删除密钥
虽然这可能有点麻烦或影响性能,但我认为它可以满足您的需要。顺便说一句,考虑到业务逻辑可能会失败或崩溃,因此密钥永远不会被释放,您可以在创建密钥时添加设置以避免这种情况。看起来文件在spark会话中被缓存。修改为通过查看文件来刷新会话更新的时间戳和工作时间。