Spark事件记录HDFS一致性

时间:2019-03-06 00:16:20

标签: apache-spark hadoop hdfs

我遇到了一个奇怪的问题,即Spark事件日志的长度未正确更新。例如,我们将查看文件application_1551818805190_0006_1.inprogress

使用hdfs dfs -ls /var/log/spark/apps/时,我看到文件只有309个字节:

[hadoop ~]$ hdfs dfs -ls hdfs:///var/log/spark/apps
-rwxrwx---   2 hadoop spark  138180350 2019-03-05 22:47 hdfs:///var/log/spark/apps/application_1551818805190_0004_1
-rwxrwx---   2 hadoop spark  138184198 2019-03-05 22:57 hdfs:///var/log/spark/apps/application_1551818805190_0005_1
-rwxrwx---   2 hadoop spark        309 2019-03-05 23:59 hdfs:///var/log/spark/apps/application_1551818805190_0006_1.inprogress

但是,当我从HDFS(hdfs dfs -get)获取文件并在本地文件系统上执行ls时,文件长度实际上是85695488字节!我很困惑,因为Spark EventLoggingListener使用了.hflush()方法,该方法应该使数据对所有读者可见。

当我将Java API用于Hadoop时遇到相同的问题。除了打开FSDataInputStream并使用skip手动计算文件的实际字节长度外,我还能做些什么吗?

1 个答案:

答案 0 :(得分:0)

已解决。事实证明,Spark历史记录服务器的编写器EventLoggingListener会将数据“刷新”到HDFS,但是客户端只有在分配了新块后才会刷新。