Hcatalog-loader-and-storer

提供:Dev Guides
移動先:案内検索

HCatalog-ローダーとストアー

*HCatLoader* および *HCatStorer* APIはPigスクリプトで使用され、HCatalog管理テーブルのデータを読み書きします。 これらのインターフェースには、HCatalog固有のセットアップは必要ありません。

この章をよりよく理解するには、Apache Pigスクリプトに関する知識が必要です。 詳細については、リンク:/apache_pig/index [Apache Pig]チュートリアルをご覧ください。

HCatloader

HCatLoaderは、HCatalogが管理するテーブルからデータを読み取るためにPigスクリプトとともに使用されます。 次の構文を使用して、HCatloaderを使用してHDFSにデータをロードします。

A = LOAD 'tablename' USING org.apache.HCatalog.pig.HCatLoader();

テーブル名を一重引用符で指定する必要があります: LOAD 'tablename' 。 デフォルト以外のデータベースを使用している場合、入力を ' dbname.tablename' として指定する必要があります。

Hiveメタストアを使用すると、データベースを指定せずにテーブルを作成できます。 この方法でテーブルを作成した場合、データベース名は 'default' であり、HCatLoaderのテーブルを指定するときは不要です。

次の表には、HCatloaderクラスの重要なメソッドと説明が含まれています。

Sr.No. Method Name & Description
1

public InputFormat<?,?> getInputFormat()throws IOException

HCatloaderクラスを使用して、読み込みデータの入力形式を読み取ります。

2

public String relativeToAbsolutePath(String location, Path curDir) throws IOException

  • 絶対パス*の文字列形式を返します。
3

public void setLocation(String location, Job job) throws IOException

ジョブを実行できる場所を設定します。

4

public Tuple getNext() throws IOException

ループから現在のタプル(キー*および*値)を返します。

HCatStorer

HCatStorerはPigスクリプトとともに使用され、HCatalog管理のテーブルにデータを書き込みます。 格納操作には次の構文を使用します。

A = LOAD ...
B = FOREACH A ...
...
...
my_processed_data = ...

STORE my_processed_data INTO 'tablename' USING org.apache.HCatalog.pig.HCatStorer();

テーブル名を一重引用符で指定する必要があります: LOAD 'tablename' 。 Pigスクリプトを実行する前に、データベースとテーブルの両方を作成する必要があります。 デフォルト以外のデータベースを使用している場合、入力を 'dbname.tablename' として指定する必要があります。

Hiveメタストアを使用すると、データベースを指定せずにテーブルを作成できます。 この方法でテーブルを作成した場合、データベース名は 'default' であり、 store ステートメントでデータベース名を指定する必要はありません。

*USING* 句には、パーティションのキー/値のペアを表す文字列引数を指定できます。 これは、パーティションテーブルに書き込みを行い、パーティション列が出力列にない場合の必須引数です。 パーティションキーの値は引用符で囲まないでください。

次の表には、HCatStorerクラスの重要なメソッドと説明が含まれています。

Sr.No. Method Name & Description
1

public OutputFormat getOutputFormat() throws IOException

HCatStorerクラスを使用して、保存されたデータの出力形式を読み取ります。

2

public void setStoreLocation (String location, Job job) throws IOException

この store アプリケーションを実行する場所を設定します。

3

public void storeSchema (ResourceSchema schema, String arg1, Job job) throws IOException

スキーマを保存します。

4

public void prepareToWrite (RecordWriter writer) throws IOException

RecordWriterを使用して特定のファイルにデータを書き込むのに役立ちます。

5

public void putNext (Tuple tuple) throws IOException

タプルデータをファイルに書き込みます。

HCatalogでPigを実行する

PigはHCatalog jarを自動的にピックアップしません。 必要なjarを取り込むには、Pigコマンドでフラグを使用するか、以下で説明するように環境変数 PI​​G_CLASSPATH および PIG_OPTS を設定します。

HCatalogで作業するための適切なjarファイルを取り込むには、単に次のフラグを含めます-

pig –useHCatalog <Sample pig scripts file>

実行のためのCLASSPATHの設定

以下のCLASSPATH設定を使用して、HCatalogをApache Pigと同期します。

export HADOOP_HOME = <path_to_hadoop_install>
export HIVE_HOME = <path_to_hive_install>
export HCAT_HOME = <path_to_hcat_install>

export PIG_CLASSPATH = $HCAT_HOME/share/HCatalog/HCatalog-core*.jar:\
$HCAT_HOME/share/HCatalog/HCatalog-pig-adapter*.jar:\
$HIVE_HOME/lib/hive-metastore-*.jar:$HIVE_HOME/lib/libthrift-*.jar:\
$HIVE_HOME/lib/hive-exec-*.jar:$HIVE_HOME/lib/libfb303-*.jar:\
$HIVE_HOME/lib/jdo2-api-*-ec.jar:$HIVE_HOME/conf:$HADOOP_HOME/conf:\
$HIVE_HOME/lib/slf4j-api-*.jar

次の内容のファイル student_details.txt がHDFSにあると仮定します。

*student_details.txt*
001, Rajiv,    Reddy,       21, 9848022337, Hyderabad
002, siddarth, Battacharya, 22, 9848022338, Kolkata
003, Rajesh,   Khanna,      22, 9848022339, Delhi
004, Preethi,  Agarwal,     21, 9848022330, Pune
005, Trupthi,  Mohanthy,    23, 9848022336, Bhuwaneshwar
006, Archana,  Mishra,      23, 9848022335, Chennai
007, Komal,    Nayak,       24, 9848022334, trivendram
008, Bharathi, Nambiayar,   24, 9848022333, Chennai

同じHDFSディレクトリに sample_script.pig という名前のサンプルスクリプトもあります。 このファイルには、以下に示すように、 student 関係で操作と変換を実行するステートメントが含まれています。

student = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING
   PigStorage(',') as (id:int, firstname:chararray, lastname:chararray,
   phone:chararray, city:chararray);

student_order = ORDER student BY age DESC;
STORE student_order INTO 'student_order_table' USING org.apache.HCatalog.pig.HCatStorer();
student_limit = LIMIT student_order 4;
Dump student_limit;
  • スクリプトの最初のステートメントは、 student_details.txt という名前のファイルのデータを student という名前の関係としてロードします。
  • スクリプトの2番目のステートメントは、関係のタプルを年齢に基づいて降順に並べ、 student_order として保存します。
  • 3番目のステートメントは、処理されたデータ student_order を保存し、 student_order_table という名前の別のテーブルを作成します。
  • スクリプトの4番目のステートメントは、 student_order の最初の4つのタプルを student_limit として保存します。
  • 最後に、5番目のステートメントはリレーション student_limit の内容をダンプします。

次に示すように、 sample_script.pig を実行します。

$./pig -useHCatalog hdfs://localhost:9000/pig_data/sample_script.pig

次に、出力(part_0000、part_0001)の出力ディレクトリ(hdfs:user/tmp/hive)を確認します。