事象
Presto on EMR で JSON の外部テーブルにクエリを実行すると "deserializer does not exist: org.openx.data.jsonserde.JsonSerDe" と怒られる。
$ hive hive> CREATE EXTERNAL TABLE IF NOT EXISTS sh10.json_sales( (中略) ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://バケット名/data/json/sh10/sales/'; hive> exit; $ presto-cli presto> use hive.sh10; presto:sh10> select count(*) from json_sales limit 10; Query 20181121_173221_00003_j9ti8, FAILED, 2 nodes Splits: 473 total, 0 done (0.00%) 0:06 [0 rows, 0B] [0 rows/s, 0B/s] Query 20181121_173221_00003_j9ti8 failed: deserializer does not exist: org.openx.data.jsonserde.JsonSerDe
解決策
全て(マスター/コア/タスク)のノードで以下を実行する。
$ cd /usr/lib/presto/plugin/hive-hadoop2/ $ sudo wget http://www.congiu.net/hive-json-serde/1.3.6-SNAPSHOT/cdh5/json-serde-1.3.6-SNAPSHOT-jar-with-dependencies.jar $ sudo initctl stop presto-server $ sudo initctl start presto-server
環境
- emr-5.19.0
- Hive 2.3.3, Spark 2.3.2, Presto 0.212, Ganglia 3.7.2, Tez 0.8.4