私は、Hive を使用して Web ログを分析する問題に対処しようとしています。多くの例を見てきましたが、この特定の問題を抱えている人を見つけることができないようです。
これが現在の状況です: AWS ElasticMapReduce クラスターをセットアップし、ログインできるようになり、Hive を起動しました。必ずadd jar hive-contrib-0.8.1.jar
ロードすると表示されます。event_log_raw
いくつかの文字列列と正規表現を含む というテーブルを作成します。load data inpath '/user/hadoop/tmp overwrite into table event_log_raw
、そして私はレースに出かけます。select * from event_log_raw
動作します (マップ% を取得せず、% 出力を減らすため、ローカルで考えます)、サンプル データから 10 レコードを取得し、正しく解析しました。すべて問題ありません。 select count(*) from event_log_raw
同様に動作しますが、今回は mapreduce ジョブが作成されています。
request_url
フィールドをマップに変換したいので、次を実行します。
select elr.view_time as event_time, elr.ip as ip,
str_to_map(split(elr.request_url," ")[1],"&","=") as params
from event_log_raw elr
Mapreduce が起動し、待って、待って...失敗しました。
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask
MapReduce Jobs Launched:
Job 0: Map: 1 HDFS Read: 0 HDFS Write: 0 FAIL
タスク トラッカーの syslog を確認すると、特に次のことがわかります。
java.lang.RuntimeException: Error in configuring object
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
<snip>
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.RegexSerDe
at org.apache.hadoop.hive.ql.exec.MapOperator.setChildren(MapOperator.java:406)
at org.apache.hadoop.hive.ql.exec.ExecMapper.configure(ExecMapper.java:90)
... 22 more
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.RegexSerDe
私はこれをグーグルで検索しましたが、私のグーグルフーはうまくいかないと思います。私が見つけたものはすべて、これに問題があり、add jar
コマンドを実行して解決する人々を示しています。私はそれを試しました、私はそれを私のに追加しようとしました、私hive-site.xml
はそれをローカルに持ってみました、jarをs3バケットに入れてみました. ブートストラップ フェーズ (災害) 中に追加するブートストラップ ステップを追加しようとしました。
a.)タスクノードがRegexSerDeを見つけられない理由、およびb.)これを機能させる方法を理解するのを手伝ってくれる人はいますか? 単に実行しているだけでなく、何かを明らかにする可能性がある場合は、リンクも歓迎しますadd jar
。
前もって感謝します!