Я сталкиваюсь с этой странной проблемой, когда длины журналов событий 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()
, который должен сделать данные видимыми для всех читателей.
Я сталкиваюсь с той же проблемой, когда использую API-интерфейсы Java для Hadoop. Помимо открытия FSDataInputStream и использования skip
для ручного вычисления фактической длины файла в байтах, что я могу сделать?