Embed presentation
Copyright © 2016 NTT DATA Corporation 2016年2月8日 NTTデータ 鯵坂 明 サポートメンバは見た! Hadoopバグワースト10 Hadoop Conference Japan 2016 ライトニングトーク
Copyright © 2016 NTT DATA Corporation 2016年2月8日 NTTデータ 鯵坂 明 サポートメンバは見た! Hadoopバグワースト7 10 Hadoop Conference Japan 2016 ライトニングトーク
3Copyright © 2016 NTT DATA Corporation 過去5年にわたるNTTデータのHadoopサポートサービスにおい て、問題になったHadoopのバグをおおよそ時系列順に紹介 対象バージョン 詳細 確認方法 "バージョンアップ以外の"対策 関連するJIRAの番号 - https://issues.apache.org/jira/browse/<JIRAの番号> 新しいバージョンではほぼ全てfixされている 略称一覧 NN(NameNode), DN(DataNode), SNN(SecondaryNameNode), NM(NodeManager), JT(JobTracker) まえがき
4Copyright © 2016 NTT DATA Corporation 対象: 2.0.3-alpha以前 詳細: HDFSのファイル名に🐱(U+1F4131)のような、UTF-8において4バ イトで表現される文字が含まれる場合、チェックポイント処理に失 敗し続け、editsが肥大化する NNを再起動できなくなる 確認: Edits viewerで多バイト文字が含まれるファイルを探す 対策: ファイル名に多バイト文字を避ける HiveのDynamic Partitionで、テーブルの中身からHDFSのファイル 名が自動生成される場合に注意 関連: HADOOP-9103 1. UTF-8の4バイト文字が正しくデコードできない
5Copyright © 2016 NTT DATA Corporation 対象: 2.8.0以前 (現在のリリースバージョン全て) 詳細: Hiveでは、クエリの先頭(コメント含む)を使って最大50文字になる ようジョブ名を自動生成する JobHistoryのファイル名には、URLエンコードされたジョブ名が含 まれる ジョブ名にマルチバイト文字が含まれる場合、URLエンコードされ ることでファイル名がOSの制限(255文字)を超える 確認: JT/MRAppMasterログ 2. MapReduceのJobHistoryFileが作成できない 20XX-XX-XX XX:XX:XX,XXX ERROR org.apache.hadoop.mapred.JobHistory: Failed creating job history log file for job job_201510291126_147769 java.io.FileNotFoundException: /var/log/hadoop-0.20- mapreduce/history/job_2015XXXXXXXX_XXXXXX_XXXXXXXXXX_XXXXXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (ファイル名が長すぎます) at java.io.FileOutputStream.open(Native Method)
6Copyright © 2016 NTT DATA Corporation 対策: Hiveクエリの先頭(コメント含む)にマルチバイト文字(ひらがなカタ カナ漢字)を使わない Hiveのプロパティ "hive.jobname.length" をデフォルトの50より 小さい値にする 関連: MAPREDUCE-6616 2. MapReduceのJobHistoryFileが作成できない
7Copyright © 2016 NTT DATA Corporation 対象: 2.1.0-beta以前の2系 詳細: pipeline recovery時にDNがdeadlockする可能性がある NNとheartbeat通信できなくなり、HDFSクラスタから切り離される 確認: DNのスタックトレース 明にdeadlockと表示されないことに注意 3. DataNodeがdeadlockする "DataXceiver for client DFSClient_NONMAPREDUCE_1090577789_1 at /XXX.XXX.XXX.XXX:48891 [Receiving block BP-195048853-127.0.0.1- 1351858280084:blk_170845781886878002_707423606]" daemon prio=10 tid=0x0000000042d34800 nid=0x5282 in Object.wait() [0x00007efed39b5000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Thread.join(Thread.java:1186) - locked <0x0000000761939bf8> (a org.apache.hadoop.util.Daemon) at java.lang.Thread.join(Thread.java:1239) at org.apache.hadoop.hdfs.server.datanode.ReplicaInPipeline.stopWriter(ReplicaInPipeline.java:157) at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.recoverRbw(FsDatasetImpl.java:706) - locked <0x0000000750413dd0> (a org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl) "DataXceiver for client DFSClient_NONMAPREDUCE_591891114_1 at /XXX.XXX.XXX.XXX:48889 [Receiving block BP-195048853-127.0.0.1- 1351858280084:blk_-1426412348578625507_707423594]" daemon prio=10 tid=0x000000004190c000 nid=0x527c waiting for monitor entry [0x00007efed49c5000] java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.recoverRbw(FsDatasetImpl.java:692) - waiting to lock <0x0000000750413dd0> (a org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl)
8Copyright © 2016 NTT DATA Corporation 対策: Deadlockが発生したDNを再起動する 関連: HDFS-4851, HDFS-5016 Cloudera blog: http://www.cloudera.co.jp/blog/understanding-hdfs- recovery-processes-part-2-ja.html 3. DataNodeがdeadlockする
9Copyright © 2016 NTT DATA Corporation 対象: 2.3.0以前 詳細: append APIを実行すると、ブロックの世代が新しくなる このタイミングでover replicatedの状態になると、excess blockと して新しいブロックが消されることがある 運悪く新しいブロックが全て消されると、残った古いblockが corrupt扱い → missing block 確認: auditログから、appendを実行していたかどうか確認する 詳細を見るには、NNとDNログを追いかけるしかない 対策: HDFS append APIをなるべく使わない (hflush/hsyncがある) 特に、close直後のappendを避ける - close直後はover replicatedになりやすい (HDFS-1172) 関連: HDFS-5438 4. HDFSでMissingBlockが発生する
10Copyright © 2016 NTT DATA Corporation 対象: 2.7.0以前 詳細: HDFSのチェックポイント処理中にタイムアウトした場合、転送途 中のfsimageが消されずに残る - NN/SNNのディスク容量が圧迫される 確認: NN/SNNのfsimage保存領域に、名前に".ckpt"を含むファ イルがある 対策: 手動で中間ファイルを消す 関連: HDFS-7373 5. HDFSのcheckpoint失敗時に転送途中のfsimageが消えない # ls -l /data/hdfs1/dfs/name/current/ -rw-r--r-- 1 hdfs hadoop 915 6月 11 19:03 2014 edits_0000000005216326417-0000000005216326429 -rw-r--r-- 1 hdfs hadoop 2538168320 6月 11 18:31 2014 fsimage.ckpt_0000000005216326414 -rw-r--r-- 1 hdfs hadoop 3251730168 6月 11 18:37 2014 fsimage_0000000005216326416 -rw-r--r-- 1 hdfs hadoop 62 6月 11 18:37 2014 fsimage_0000000005216326416.md5
11Copyright © 2016 NTT DATA Corporation 対象: 2.6.4/2.7.2より前の2系 詳細: 1. Excess Blockが発生 (replication数を変化させるなどで) 2. NNが該当ブロックを消去するようDNに依頼 3. DNが該当ブロックを消去して、NNにIncrementalBlockReportを 送り、NNがそれを処理する前に該当ブロックを含むファイル自体 が消去される 4. ExcessBlocksメトリクスとそのブロックを管理している Map(excessReplicateMap)がリセットされない メモリリーク 確認: fsckを実行したときのover-replicated blockの値と、メト リクスExcessBlocksの値がずれている 対策: NameNodeをF/Oもしくは再起動する 関連: HDFS-6945 6. メトリクスExcessBlocksの値が正しくない
12Copyright © 2016 NTT DATA Corporation 対象: 2.7.0, 2.7.1 詳細: ContainerMetricsの取得時にdeadlockすることがある Metricsが取得できない (そのためWebUIも見れない) ただしジョブは動作している 確認: NMのスタックトレース 7. NodeManager WebUIにアクセスできない Found one Java-level deadlock: ============================= "1193752357@qtp-907815246-22238": waiting to lock monitor 0x0000000005e20a18 (object 0x00000000f6afa048, a org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainerMetrics), which is held by "2107307914@qtp-907815246-19994" "2107307914@qtp-907815246-19994": waiting to lock monitor 0x0000000001a000a8 (object 0x00000000d4f1e1f8, a org.apache.hadoop.metrics2.impl.MetricsSystemImpl), which is held by "Timer for 'NodeManager' metrics system" "Timer for 'NodeManager' metrics system": waiting to lock monitor 0x00000000027ade88 (object 0x00000000f6582df0, a org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainerMetrics), which is held by "1530638165@qtp-907815246-19992" "1530638165@qtp-907815246-19992": waiting to lock monitor 0x0000000001a000a8 (object 0x00000000d4f1e1f8, a org.apache.hadoop.metrics2.impl.MetricsSystemImpl), which is held by "Timer for 'NodeManager' metrics system"
13Copyright © 2016 NTT DATA Corporation 対策: ContainerMetricsを利用しない "yarn.nodemanager.container-metrics.enable"をfalseにする 関連: YARN-3619, YARN-4563 7. NodeManager WebUIにアクセスできない
14Copyright © 2016 NTT DATA Corporation HDFSのBlockが消える話 「本当にあったHadoopの恐い話〜 Blockはどこへきえた?」 にて詳しく紹介!
Copyright © 2011 NTT DATA Corporation Copyright © 2016 NTT DATA Corporation