6

Hive 形式で保存された Pig クエリを実行する方法を知りたいです。圧縮データを格納するように Hive を構成しました (このチュートリアルhttp://wiki.apache.org/hadoop/Hive/CompressedStorageを使用)。

それ以前は、Hive の区切り文字 (^A) を使用して通常の Pig ロード関数を使用していました。しかし現在、Hive は圧縮されたシーケンス ファイルにデータを格納します。どの負荷関数を使用しますか?

ここで述べたような緊密な統合は必要ないことに注意してください: Using Hive with Pig、Hive によって生成された圧縮シーケンス ファイルを読み取るために使用するロード関数だけです。

すべての答えをありがとう。

4

1 に答える 1

5

私が見つけたのは次のとおりです。データをRCFileとして保存する場合、HiveColumnarLoaderの使用は理にかなっています。これを使用してテーブルをロードするには、最初にいくつかの jar を登録する必要があります。

register /srv/pigs/piggybank.jar
register /usr/lib/hive/lib/hive-exec-0.5.0.jar
register /usr/lib/hive/lib/hive-common-0.5.0.jar

a = LOAD '/user/hive/warehouse/table' USING org.apache.pig.piggybank.storage.HiveColumnarLoader('ts int, user_id int, url string');

シーケンス ファイルからデータをロードするには、PiggyBank を使用する必要があります (前の例のように)。Piggybank の SequenceFile ローダーは、圧縮ファイルを処理する必要があります。

register /srv/pigs/piggybank.jar
DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader();
a = LOAD '/user/hive/warehouse/table' USING SequenceFileLoader AS (int, int);

これは、BytesWritable 型を読み取って Pig 型にキャストすることができず、次の例外が発生するため、Pig 0.7 では機能しません。

2011-07-01 10:30:08,589 WARN org.apache.pig.piggybank.storage.SequenceFileLoader: Unable to translate key class org.apache.hadoop.io.BytesWritable to a Pig datatype
2011-07-01 10:30:08,625 WARN org.apache.hadoop.mapred.Child: Error running child
org.apache.pig.backend.BackendException: ERROR 0: Unable to translate class org.apache.hadoop.io.BytesWritable to a Pig datatype
    at org.apache.pig.piggybank.storage.SequenceFileLoader.setKeyType(SequenceFileLoader.java:78)
    at org.apache.pig.piggybank.storage.SequenceFileLoader.getNext(SequenceFileLoader.java:132)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigRecordReader.nextKeyValue(PigRecordReader.java:142)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:448)
    at org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:639)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:315)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1063)
    at org.apache.hadoop.mapred.Child.main(Child.java:211)

piggybank のコンパイル方法については、ここで説明しています: Piggybank をビルドできません -> /home/build/ivy/lib が存在しません

于 2011-07-01T08:45:31.030 に答える