marcelmay / hadoop-hdfs-fsimage-exporter

Exports Hadoop HDFS content statistics to Prometheus
Apache License 2.0
152 stars 46 forks source link

Error for Hadoop version 3.3.5/3.3.6 #211

Closed Bunakov-IA closed 3 months ago

Bunakov-IA commented 3 months ago

We are trying to run the exporter for our Hadoop 3.3.6 fsimage. Environment:

We are getting this error: 2024-08-28 13:04:57,227 [pool-3-thread-1] ERROR de.m3y.prometheus.exporter.fsimage.FsImageUpdateHandler - Can not load FSImage /opt/hadoop/monitoring/fsimage_0000000000000684498 java.lang.IllegalStateException: Can not load fsimage section STRING_TABLE at de.m3y.hadoop.hdfs.hfsa.core.FsImageLoader.loadSection(FsImageLoader.java:270) at de.m3y.hadoop.hdfs.hfsa.core.FsImageLoader.load(FsImageLoader.java:293) at de.m3y.prometheus.exporter.fsimage.FsImageUpdateHandler.loadFsImage(FsImageUpdateHandler.java:207) at de.m3y.prometheus.exporter.fsimage.FsImageUpdateHandler.onFsImageChange(FsImageUpdateHandler.java:185) at de.m3y.prometheus.exporter.fsimage.FsImageWatcher.run(FsImageWatcher.java:64) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: java.lang.NullPointerException at org.apache.hadoop.io.compress.DefaultCodec.createInputStream(DefaultCodec.java:91) at org.apache.hadoop.io.compress.CompressionCodec$Util.createInputStreamWithCodecPool(CompressionCodec.java:160) at org.apache.hadoop.io.compress.DefaultCodec.createInputStream(DefaultCodec.java:83) at org.apache.hadoop.hdfs.server.namenode.FSImageUtil.wrapInputStreamForCompression(FSImageUtil.java:91) at de.m3y.hadoop.hdfs.hfsa.core.FsImageLoader.loadSection(FsImageLoader.java:263) ... 10 more

@marcelmay, here is the configuration for dfs.image.compression.codec:


<property>
    <name>dfs.image.compress</name>
    <value>true</value>
</property>

<property>
    <name>dfs.image.compression.codec</name>
    <value>org.apache.hadoop.io.compress.DefaultCodec</value>
</property>

If you set the compression configuration to disabled, parsing works successfully:


<property>
    <name>dfs.image.compress</name>
    <value>false</value>
</property>

However, everything functions on an uncompressed image. How can we overcome this issue?

marcelmay commented 3 months ago

Hi @Bunakov-IA, thanks for the report and I will try to reproduce it in the next 1-2 days by generating a compressed fsimage.

marcelmay commented 3 months ago

@Bunakov-IA FYI: Just released 1.4.9 including this fix.

Bunakov-IA commented 3 months ago

@marcelmay , thank you. Release 1.4.9 is okay.