我遇到了一个奇怪的问题,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()
方法,该方法应使数据对所有读取器可见。
我在使用hadoop的javaapi时遇到了同样的问题。除了打开fsdatainputstream和使用 skip
要手动计算文件的实际字节长度,我能做些什么吗?
1条答案
按热度按时间wlzqhblo1#
解决了的。原来spark历史服务器的writer eventlogginglister会将数据“刷新”到hdfs,但是客户端只会在分配了新块的情况下刷新。