HBase 2.3.4 における HBase HMaster の起動失敗を、"Cannot seek after EOF" エラーの解決により修正します。
症状
HBase 2.3.4 の HMaster が以下のエラーをログに出力して再起動に失敗します。
java.io.EOFException: Cannot seek after EOF
at org.apache.hadoop.hdfs.DFSInputStream.seek(DFSInputStream.java:1447)
at org.apache.hadoop.fs.FSDataInputStream.seek(FSDataInputStream.java:65)
at org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.initInternal(ProtobufLogReader.java:211)
at org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.initReader(ProtobufLogReader.java:173)
原因
HMaster サービスは、リカバリプロセス中に空(0 バイト)の write-ahead log(WAL)ファイルに遭遇したため、起動に失敗します。この問題は稀に発生します。
関連するコミュニティの課題:WAL replay should ignore 0-length files。
影響を受けるバージョン
この問題は、以下の EMR バージョンで実行されている EMR クラスター上の HBase バージョン 2.3.4 に影響します。
-
EMR-5.6.0 より前の EMR バージョン
-
EMR-4.8.0 ~ EMR-4.10.0(両端を含む)
解決方法
説明
JAR ファイルを置き換える前に、バックアップを作成してください。
-
hbase-server-2.3.4.jar をダウンロードし、HBase クラスターのマスターノード上の対応する JAR ファイルを置き換えます。
JAR ファイルは /usr/lib/hbase-current/lib/ ディレクトリにあります。
-
HMaster サービスを再起動します。
EMR コンソールで、HBase サービスのStatusページに移動します。HMaster コンポーネントの行で、操作列の再起動をクリックします。