【トラブル】【AWS】EMRでINSERTを実行した際に Fail する

■ はじめに

めちゃくちゃハマったトラブルについて、まとめる。

目次

【1】トラブル概要
 1)発生環境
 2)現象補足
【2】エラー内容
 1)EMR Step内のエラー内容
 2)Tracking URL からのエラー情報
【3】原因
【4】解決案

【1】トラブル概要

EMR 内で、INSERTの実行した際に、以下「エラー内容」が表示される。
なお、INSERT対象が、外部・内部テーブルに関わらず、Failする

INSERT文

set hive.execution.engine=mr;

INSERT OVERWRITE TABLE
  sample_db.sample_table
PARTITION (created_at='2022-05-14')
SELECT
  'x0001'
  , 'Mike'
;

1)発生環境

* EMR : v5.29.0

2)現象補足

なお、以下は可能。
~~~~
* SELECT
* CREATE/DROP TABLE
* Master ->S3間 の ファイルコピー
* Master/Slave間 の pingコマンド
~~~~

* エラー内容「BlockMissingException: Could not obtain block: BP」を
 検索した際によく出てくる「dfs.client.use.datanode.hostname=true」では
 現象は変わらなかった。

https://stackoverflow.com/questions/48107616/hadoop-blockmissingexception

【2】エラー内容

* 普通は、エラー内容をヒントに解決できるのだが
 今回は、そうではなかった。
 (だからこそ、ハマったのだが、、、)

1)EMR Step内のエラー内容

Start Job = job_xxxxx, Tracking URL = 
http://ip-xx.xx.xx.xx.us-west-1.compute.internal:20888/proxy/application_xxxx
Kill Command - /usr/lib/hadoop/bin/hadoop job
 -kill job_xxxxx
・・・略・・・
Ended Job = job_xxxxx with errors
Error during job, obtaining debuggin information...
FAILED: Execution Error, return code 2
 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
・・・略・・・
run query fail.
Command exiting with ret: '2'

2)Tracking URL からのエラー情報

Diagnostics:
org.apache.hadoop.hdfs.BlockMissingException:
 Could not obtain block: 
 BP-XXXXXX-10.3.20.155-XXXXXX:blk_XXXXXX_XXX 
file=/tmp/hadoop-yarn/staging/hadoop/.staging/job_xxxxx/libjars/aws0glue-datacatalog-hive2-client.jar
・・・略
at java.lang.Thread.run(Thread.java:XXX)

For more detailed output,
check the application tracking page: http://...
Failing the application.

補足:「Tracking URL からのエラー情報」
https://dk521123.hatenablog.com/entry/2022/05/11/135632

の「【3】EMR上で Web UI へのアクセス」を参照。
(そのため、EMRは立ち上げっぱなしにしておく必要がある)

【3】原因

* Outbound でブロッキングしていたため
 => もし、同じ現象・近しい現象だった場合、
  自身のセキュリティグループのInbound/Outboundを
  以下の公式ドキュメントの内容と比較して不備がないかを
  確認してみるといいかも

https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-man-sec-groups.html

【4】解決案

https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-man-sec-groups.html

を参考に「0.0.0.0/0:All」にした。
 => Outboundをもっと厳しくしたい場合は、
  現象発生が解決した後に、
  AWS公式ドキュメントを参考に徐々に制限していけばいい

* ちなみに、以下の関連記事も
 このトラブルを解決する一環として書いた

Amazon EMR ~ ネットワーク周り ~
https://dk521123.hatenablog.com/entry/2022/05/13/155755

関連記事

Amazon EMR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/20/230519
Amazon EMR ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/05/27/175610
Amazon EMR に関するトラブル
https://dk521123.hatenablog.com/entry/2020/08/05/144724
起動中の EMR に Session Manager を使って入る
https://dk521123.hatenablog.com/entry/2022/05/11/135632
Amazon EMR ~ ネットワーク周り ~
https://dk521123.hatenablog.com/entry/2022/05/13/155755
Hadoop ~ 基本編 / HDFS
https://dk521123.hatenablog.com/entry/2022/05/01/000000