1

私は、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

前もって感謝します!

4

3 に答える 3

5

これを修正する最も簡単な方法は、これらすべての jar をすべてのタスク トラッカーの hadoop の lib ディレクトリに追加することです。

scp library.jar task-tracker-1:~/<HADOOP_HOME>/lib/

または、ブートストラップ スクリプトで EMR を使用する場合:

s3cmd get s3://path/to/lib.jar /home/hadoop/lib/

EMR を使用したとき、hadoop lib ディレクトリに同期する jar でいっぱいの s3 ディレクトリがありました。

s3cmd sync s3://static/jars/ /home/hadoop/jars
cp jars/*.jar lib/

oozie を使用する場合は、jar ファイルを oozie.share.lib ディレクトリに配置することもできます。

于 2012-06-13T15:09:16.633 に答える
0

serde jar ファイルを

hadoop/lib

ディレクトリを削除し、hadoop (またはサーバー) を再起動して実際に機能させました。

于 2014-08-27T06:36:55.313 に答える
-1

HIVE_AUX_JARS_PATH必要なのは、このjarファイルを変数に追加することだけだと思います

あなたhive-contrib-0.8.1.jar/usr/hive/lib 実行している場合

export HIVE_AUX_JARS_PATH=/usr/hive/lib/hive-contrib-0.8.1.jar:$HIVE_AUX_JARS_PATH

またはHIVE_AUX_JARS_PATH存在しない場合は、実行するだけです

export HIVE_AUX_JARS_PATH=/usr/hive/lib/hive-contrib-0.8.1.jar.

その後、ハイブ セッションを開始すると、すべてが正常に機能することがわかります。

この変数が必要な場合は、これを.profileファイルに永続的に入れるか.bash_profile、オペレーティングシステムに基づいてください

于 2015-12-10T12:54:01.210 に答える