apache-spark - Spark 事件日志 HDFS 一致性
问题描述
我遇到了这个奇怪的问题,即 Spark 事件日志的长度没有正确更新。例如,我们将查看 file 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 的 Java API 时,我遇到了同样的问题。除了打开 FSDataInputStream 并使用skip
手动计算文件的实际字节长度之外,我还能做些什么吗?
解决方案
解决了。事实证明,Spark History Server 的编写器 EventLoggingListener 会将数据“刷新”到 HDFS,但客户端仅在分配了新块时才会刷新。
推荐阅读
- java - RecyclerView 不显示任何项目并且不调用任何自定义适配器的函数
- corda - CordaRPCClient 在连接到在 Docker 容器内运行的节点时抛出错误
- scikit-learn - ValueError 在 Scikit 中找到最佳超参数时使用 GridSearchCV 学习 LogisticRegression
- java - 如何在 MSSQL 中使用 Java 生成 SQL 插入语句
- typescript - 将 Angular 7 应用程序连接到 google Fit APi
- javascript - NodeJS Mail listener2 正在将电子邮件签名图像作为附件下载到 Outlook 中,如何阻止它?
- java - org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.web.servlet.HandlerMapping]:没有设置 ServletContext
- exception - 在 Groovy 中为异常或错误添加更多上下文
- javascript - Jsdoc 不排除路径
- selenium - 哪个 firefox 版本与 selenium webdriver 3.6.0 兼容?