Hcatalog-quick-guide
HCatalog-はじめに
HCatalogとは何ですか?
HCatalogは、Hadoop用のテーブルストレージ管理ツールです。 Hiveメタストアの表形式データを他のHadoopアプリケーションに公開します。 さまざまなデータ処理ツール(Pig、MapReduce)を使用するユーザーがグリッドにデータを簡単に書き込むことができます。 これにより、ユーザーはデータが保存されている場所や形式を気にする必要がなくなります。
HCatalogはHiveの重要なコンポーネントのように機能し、ユーザーがデータを任意の形式と構造で保存できるようにします。
HCatalogを選ぶ理由
適切なジョブに適切なツールを有効にする
Hadoopエコシステムには、Hive、Pig、MapReduceなどのデータ処理用のさまざまなツールが含まれています。 これらのツールはメタデータを必要としませんが、メタデータが存在する場合でもメタデータを活用できます。 また、メタデータストアを共有すると、ツール間でユーザーがデータをより簡単に共有できるようになります。 MapReduceまたはPigを使用してデータをロードおよび正規化し、Hiveを介して分析するワークフローは非常に一般的です。 これらすべてのツールが1つのメタストアを共有している場合、各ツールのユーザーは別のツールで作成されたデータにすぐにアクセスできます。 ロードまたは転送の手順は必要ありません。
処理状態をキャプチャして共有を有効にします
HCatalogは分析結果を公開できます。 そのため、他のプログラマは「REST」経由で分析プラットフォームにアクセスできます。 あなたが公開しているスキーマは、他のデータサイエンティストにも役立ちます。 他のデータサイエンティストは、あなたの発見を後続の発見への入力として使用します。
Hadoopをすべてと統合する
処理およびストレージ環境としてのHadoopは、企業に多くの機会をもたらします。ただし、採用を促進するには、既存のツールと連携して機能を強化する必要があります。 Hadoopは、分析プラットフォームへの入力として機能するか、運用データストアおよびWebアプリケーションと統合する必要があります。 組織は、まったく新しいツールセットを学ぶ必要なく、Hadoopの価値を享受する必要があります。 RESTサービスは、使い慣れたAPIとSQLに似た言語で企業にプラットフォームを提供します。 エンタープライズデータ管理システムはHCatalogを使用して、Hadoopプラットフォームとより深く統合します。
HCatalogアーキテクチャ
次の図は、HCatalogの全体的なアーキテクチャを示しています。
HCatalogは、 SerDe (serializer-deserializer)を書き込むことができる任意の形式のファイルの読み取りと書き込みをサポートしています。 デフォルトでは、HCatalogはRCFile、CSV、JSON、SequenceFile、およびORCファイル形式をサポートしています。 カスタム形式を使用するには、InputFormat、OutputFormat、およびSerDeを提供する必要があります。
HCatalogはHiveメタストアの上に構築され、HiveのDDLを組み込みます。 HCatalogは、PigおよびMapReduceの読み取りおよび書き込みインターフェイスを提供し、Hiveのコマンドラインインターフェイスを使用して、データ定義およびメタデータ探索コマンドを発行します。
HCatalog-インストール
Hive、Pig、HBaseなどのすべてのHadoopサブプロジェクトは、Linuxオペレーティングシステムをサポートしています。 したがって、システムにLinuxフレーバーをインストールする必要があります。 HCatalogは、2013年3月26日にHive Installationと統合されます。 バージョンHive-0.11.0以降、HCatalogにはHiveがインストールされています。 そのため、以下に示す手順に従ってHiveをインストールすると、システムにHCatalogが自動的にインストールされます。
ステップ1:JAVAインストールの確認
Hiveをインストールする前に、Javaをシステムにインストールする必要があります。 次のコマンドを使用して、システムにJavaがすでにインストールされているかどうかを確認できます-
Javaがすでにシステムにインストールされている場合、次の応答が表示されます-
システムにJavaがインストールされていない場合は、以下の手順に従う必要があります。
ステップ2:Javaのインストール
次のリンクhttp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260l[[[1]] oracle.com/]
次に、 jdk-7u71-linux-x64.tar.gz がシステムにダウンロードされます。
通常、ダウンロードしたJavaファイルは、ダウンロードフォルダーにあります。 それを確認し、次のコマンドを使用して jdk-7u71-linux-x64.gz ファイルを抽出します。
Javaをすべてのユーザーが利用できるようにするには、Javaを「/usr/local/」の場所に移動する必要があります。 ルートを開き、次のコマンドを入力します。
上記で説明したように、ターミナルからコマンド java -version を使用してインストールを検証します。
ステップ3:Hadoopインストールの検証
Hiveをインストールする前に、Hadoopをシステムにインストールする必要があります。 次のコマンドを使用してHadoopのインストールを確認しましょう-
Hadoopが既にシステムにインストールされている場合、次の応答が表示されます-
Hadoopがシステムにインストールされていない場合は、次の手順に進みます-
ステップ4:Hadoopのダウンロード
次のコマンドを使用して、Apache Software FoundationからHadoop 2.4.1をダウンロードして抽出します。
ステップ5:疑似分散モードでのHadoopのインストール
Hadoopのセットアップ
次のコマンドを*〜/.bashrc *ファイルに追加することにより、Hadoop環境変数を設定できます。
すべての変更を現在実行中のシステムに適用します。
Hadoop設定
すべてのHadoop設定ファイルは、「$ HADOOP_HOME/etc/hadoop」の場所にあります。 Hadoopインフラストラクチャに応じて、これらの構成ファイルに適切な変更を加える必要があります。
Javaを使用してHadoopプログラムを開発するには、 JAVA_HOME 値をシステム内のJavaの場所に置き換えて、 hadoop-env.sh ファイルのJava環境変数をリセットする必要があります。
以下に、Hadoopを構成するために編集する必要があるファイルのリストを示します。
core-site.xml
core-site.xmlを開き、<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
hdfs-site.xml
次のデータを想定します。
このファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
注-上記のファイルでは、すべてのプロパティ値はユーザー定義であり、Hadoopインフラストラクチャに応じて変更できます。
yarn-site.xml
このファイルは、Hadoopに糸を設定するために使用されます。 yarn-site.xmlファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
mapred-site.xml
このファイルは、使用しているMapReduceフレームワークを指定するために使用されます。 デフォルトでは、Hadoopにはyarn-site.xmlのテンプレートが含まれています。 まず、次のコマンドを使用して、 mapred-site、xml.template から mapred-site.xml ファイルにファイルをコピーする必要があります。
mapred-site.xmlファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
ステップ6:Hadoopインストールの検証
次の手順を使用して、Hadoopのインストールを確認します。
ネームノードのセットアップ
次のようにコマンド「hdfs namenode -format」を使用してネームノードを設定します-
期待される結果は次のとおりです-
Hadoop DFSの検証
DFSを開始するには、次のコマンドを使用します。 このコマンドを実行すると、Hadoopファイルシステムが起動します。
予想される出力は次のとおりです-
糸スクリプトの検証
次のコマンドを使用して、Yarnスクリプトを開始します。 このコマンドを実行すると、Yarnデーモンが起動します。
予想される出力は次のとおりです-
ブラウザでHadoopにアクセスする
Hadoopにアクセスするためのデフォルトのポート番号は50070です。 次のURLを使用して、ブラウザーでHadoopサービスを取得します。
クラスターのすべてのアプリケーションを検証する
クラスターのすべてのアプリケーションにアクセスするためのデフォルトのポート番号は8088です。 このサービスにアクセスするには、次のURLを使用してください。
Hadoopのインストールが完了したら、次の手順に進み、Hiveをシステムにインストールします。
ステップ7:Hiveのダウンロード
このチュートリアルでは、hive-0.14.0を使用します。 次のリンク* http://apache.petsads.us/hive/hive-0.14.0/にアクセスしてダウンロードできます。 */Downloads ディレクトリにダウンロードされると仮定しましょう。 ここでは、このチュートリアル用に「 apache-hive-0.14.0-bin.tar.gz 」という名前のHiveアーカイブをダウンロードします。 次のコマンドは、ダウンロードを確認するために使用されます-
ダウンロードが成功すると、次の応答が表示されます-
ステップ8:Hiveのインストール
システムにHiveをインストールするには、次の手順が必要です。 Hiveアーカイブが /Downloads ディレクトリにダウンロードされると仮定しましょう。
Hiveアーカイブの抽出と検証
次のコマンドを使用して、ダウンロードを確認し、Hiveアーカイブを抽出します-
ダウンロードが成功すると、次の応答が表示されます-
====/usr/local/hiveディレクトリへのファイルのコピー
スーパーユーザー「su-」からファイルをコピーする必要があります。 次のコマンドは、抽出されたディレクトリから /usr/local/hive ”ディレクトリにファイルをコピーするために使用されます。
Hiveの環境をセットアップする
次の行を*〜/.bashrc *ファイルに追加することにより、Hive環境をセットアップできます-
〜/.bashrcファイルを実行するには、次のコマンドを使用します。
ステップ9:Hiveの構成
HadoopでHiveを構成するには、 $ HIVE_HOME/conf ディレクトリにある hive-env.sh ファイルを編集する必要があります。 次のコマンドは、Hive config フォルダーにリダイレクトし、テンプレートファイルをコピーします-
次の行を追加して、 hive-env.sh ファイルを編集します-
これで、Hiveのインストールが完了しました。 メタストアを構成するには、外部データベースサーバーが必要になりました。 Apache Derbyデータベースを使用します。
ステップ10:Apache Derbyのダウンロードとインストール
Apache Derbyをダウンロードしてインストールするには、以下の手順に従ってください-
Apache Derbyのダウンロード
Apache Derbyをダウンロードするには、次のコマンドを使用します。 ダウンロードには時間がかかります。
次のコマンドは、ダウンロードを確認するために使用されます-
ダウンロードが成功すると、次の応答が表示されます-
Derbyアーカイブの抽出と検証
次のコマンドは、Derbyアーカイブの抽出と検証に使用されます-
ダウンロードが成功すると、次の応答が表示されます-
====/usr/local/derbyディレクトリへのファイルのコピー
スーパーユーザー「su-」からコピーする必要があります。 次のコマンドは、抽出されたディレクトリから /usr/local/derby ディレクトリにファイルをコピーするために使用されます-
Derbyの環境のセットアップ
次の行を*〜/.bashrc *ファイルに追加することで、Derby環境を設定できます-
次のコマンドは、*〜/.bashrc file *を実行するために使用されます-
メタストアのディレクトリを作成する
$ DERBY_HOMEディレクトリに data という名前のディレクトリを作成して、メタストアデータを保存します。
これで、Derbyのインストールと環境設定が完了しました。
ステップ11:Hiveメタストアの構成
メタストアの構成とは、データベースの保存場所をHiveに指定することを意味します。 これを行うには、 $ HIVE_HOME/conf ディレクトリにある hive-site.xml ファイルを編集します。 まず、次のコマンドを使用してテンプレートファイルをコピーします-
ステップ12:Hiveインストールの検証
Hiveを実行する前に、HDFSに /tmp フォルダーと別のHiveフォルダーを作成する必要があります。 ここでは、 /user/hive/warehouse フォルダーを使用します。 以下に示すように、これらの新しく作成されたフォルダの書き込み権限を設定する必要があります-
Hiveを検証する前に、HDFSでそれらを設定します。 次のコマンドを使用します-
次のコマンドは、Hiveのインストールを確認するために使用されます-
Hiveが正常にインストールされると、次の応答が表示されます-
次のサンプルコマンドを実行して、すべてのテーブルを表示できます-
ステップ13:HCatalogインストールの検証
次のコマンドを使用して、HCatalogホームのシステム変数 HCAT_HOME を設定します。
次のコマンドを使用して、HCatalogのインストールを確認します。
インストールが成功した場合、次の出力が表示されます-
HCatalog-CLI
HCatalogコマンドラインインターフェイス(CLI)は、コマンド $ HIVE_HOME/HCatalog/bin/hcat から呼び出すことができます。$ HIVE_HOMEはHiveのホームディレクトリです。 hcat は、HCatalogサーバーを初期化するために使用されるコマンドです。
次のコマンドを使用して、HCatalogコマンドラインを初期化します。
インストールが正しく行われている場合、次の出力が得られます-
HCatalog CLIは、これらのコマンドラインオプションをサポートしています-
Sr.No | Option | Example & Description |
---|---|---|
1 | -g |
hcat -g mygroup … 作成するテーブルには、グループ「mygroup」が必要です。 |
2 | -p |
hcat -p rwxr-xr-x … 作成するテーブルには、読み取り、書き込み、実行の権限が必要です。 |
3 | -f |
hcat -f myscript.HCatalog … myscript.HCatalogは、実行するDDLコマンドを含むスクリプトファイルです。 |
4 | -e |
hcat -e 'create table mytable(a int);' … 次の文字列をDDLコマンドとして扱い、実行します。 |
5 | -D |
hcat -Dkey = value … キーと値のペアをJavaシステムプロパティとしてHCatalogに渡します。 |
6 | - |
hcat 使用法メッセージを出力します。 |
注-
- -g および -p オプションは必須ではありません。
- 一度に、両方ではなく、-e *または *-f オプションのいずれかを指定できます。 *オプションの順序は重要ではありません。オプションは任意の順序で指定できます。
Sr.No | DDL Command & Description |
---|---|
1 |
HCatalogを使用してテーブルを作成します。 CLUSTERED BY句を使用してテーブルを作成した場合、PigまたはMapReduceを使用してテーブルに書き込むことはできません。 |
2 |
ALTER TABLE REBUILDおよびCONCATENATEオプションを除いてサポートされています。 その動作は、Hiveと同じです。 |
3 |
DROP TABLE サポートされています。 Hiveと同じ動作(完全なテーブルと構造を削除)。 |
4 |
CREATE/ALTER/DROP VIEW サポートされています。 Hiveと同じ動作。 注意-PigおよびMapReduceは、ビューからの読み取りまたはビューへの書き込みを行えません。 |
5 |
SHOW TABLES テーブルのリストを表示します。 |
6 |
SHOW PARTITIONS パーティションのリストを表示します。 |
7 |
Create/Drop Index CREATEおよびDROP FUNCTION操作はサポートされていますが、作成された関数は引き続きPigに登録し、MapReduceのCLASSPATHに配置する必要があります。 |
8 |
DESCRIBE サポートされています。 Hiveと同じ動作。 構造を説明してください。 |
上記の表の一部のコマンドについては、以降の章で説明します。
HCatalog-テーブルの作成
この章では、テーブルの作成方法とデータの挿入方法について説明します。 HCatalogでテーブルを作成する規則は、Hiveを使用してテーブルを作成することに非常に似ています。
テーブルステートメントの作成
Create Tableは、HCatalogを使用してHiveメタストアにテーブルを作成するために使用されるステートメントです。 その構文と例は次のとおりです-
構文
例
Sr.No | Field Name | Data Type |
---|---|---|
1 | Eid | int |
2 | Name | String |
3 | Salary | Float |
4 | Designation | string |
以下のデータは、 Comment 、 Field terminator 、 Lines terminator 、 Stored File type などの行形式フィールドなどのサポートされているフィールドを定義しています。
次のクエリは、上記のデータを使用して employee という名前のテーブルを作成します。
オプション IF NOT EXISTS を追加すると、HCatalogは、テーブルが既に存在する場合にステートメントを無視します。
テーブルの作成が成功すると、次の応答が表示されます-
データの読み込みステートメント
一般に、SQLでテーブルを作成した後、Insertステートメントを使用してデータを挿入できます。 ただし、HCatalogでは、LOAD DATAステートメントを使用してデータを挿入します。
HCatalogにデータを挿入する際、LOAD DATAを使用してバルクレコードを保存することをお勧めします。 データをロードするには2つの方法があります。1つは*ローカルファイルシステム*から、もう1つは* Hadoopファイルシステム*からです。
構文
LOAD DATAの構文は次のとおりです-
- LOCALは、ローカルパスを指定する識別子です。 オプションです。
- OVERWRITEは、テーブル内のデータを上書きするためのオプションです。
- PARTITIONはオプションです。
例
次のデータをテーブルに挿入します。 これは、 /home/user ディレクトリにある sample.txt という名前のテキストファイルです。
次のクエリは、指定されたテキストをテーブルにロードします。
ダウンロードが成功すると、次の応答が表示されます-
HCatalog-テーブルの変更
この章では、テーブル名の変更、列名の変更、列の追加、列の削除または置換など、表の属性を変更する方法について説明します。
テーブルの変更ステートメント
ALTER TABLEステートメントを使用して、Hiveのテーブルを変更できます。
構文
このステートメントは、テーブル内で変更する属性に基づいて、次の構文のいずれかを使用します。
いくつかのシナリオを以下で説明します。
名前を変更…ステートメント
次のクエリは、テーブルの名前を employee から emp に変更します。
変更ステートメント
次の表には、 employee テーブルのフィールドが含まれており、変更するフィールドを太字で示しています。
Field Name | Convert from Data Type | Change Field Name | Convert to Data Type |
---|---|---|---|
eid | int | eid | int |
name | String | ename | String |
salary | Float | salary | Double |
designation | String | designation | String |
次のクエリは、上記のデータを使用して列名と列データ型の名前を変更します-
列ステートメントの追加
次のクエリは、 dept という名前の列を employee テーブルに追加します。
置換ステートメント
次のクエリは、 employee テーブルからすべての列を削除し、 emp および name 列に置き換えます-
テーブルステートメントの削除
この章では、HCatalogでテーブルを削除する方法について説明します。 メタストアからテーブルを削除すると、テーブル/列のデータとそのメタデータが削除されます。 通常のテーブル(メタストアに格納)または外部テーブル(ローカルファイルシステムに格納)のいずれかです。 HCatalogは、タイプに関係なく、両方を同じ方法で扱います。
構文は次のとおりです-
次のクエリは、 employee という名前のテーブルを削除します-
クエリが正常に実行されると、次の応答が表示されます-
HCatalog-表示
この章では、HCatalogで view を作成および管理する方法について説明します。 データベースビューは、 CREATE VIEW ステートメントを使用して作成されます。 ビューは、単一のテーブル、複数のテーブル、または別のビューから作成できます。
ビューを作成するには、特定の実装に応じて適切なシステム権限が必要です。
ビューステートメントの作成
列名が指定されていない場合、ビューの列の名前は defining SELECT expression から自動的に導出されます。
注意-SELECTにx + yなどのエイリアスのないスカラー式が含まれる場合、結果のビュー列名は_C0、_C1などの形式で生成されます。
列の名前を変更するときに、列のコメントも提供できます。 コメントは、基になる列から自動的に継承されません。
ビューの*定義SELECT式*が無効な場合、CREATE VIEWステートメントは失敗します。
構文
例
以下は従業員テーブルのデータです。 ここで、給与が35,000を超える従業員のフィールドid、name、Designation、salaryを含む Emp_Deg_View という名前のビューを作成する方法を見てみましょう。
以下は、上記のデータに基づいてビューを作成するコマンドです。
出力
ドロップビューステートメント
DROP VIEWは、指定されたビューのメタデータを削除します。 他のビューによって参照されているビューをドロップする場合、警告は表示されません(依存するビューは無効であるため、ユーザーがドロップまたは再作成する必要があります)。
構文
例
次のコマンドを使用して、 Emp_Deg_View という名前のビューを削除します。
HCatalog-テーブルの表示
多くの場合、データベース内のすべてのテーブルをリストするか、テーブル内のすべての列をリストします。 明らかに、すべてのデータベースには、テーブルと列をリストする独自の構文があります。
この章では、HCatalogの現在のデータベースからすべてのテーブルをリストする方法について説明します。
テーブルの表示ステートメント
SHOW TABLESの構文は次のとおりです-
次のクエリは、テーブルのリストを表示します-
クエリが正常に実行されると、次の応答が表示されます-
HCatalog-パーティションの表示
パーティションは、個別のテーブルまたはビューを作成するために使用される表形式データの条件です。 SHOW PARTITIONSは、指定された実表の既存のパーティションをすべてリストします。 パーティションはアルファベット順にリストされています。 Hive 0.6以降、パーティション仕様の一部を指定して、結果のリストをフィルタリングすることもできます。
SHOW PARTITIONSコマンドを使用して、特定のテーブルに存在するパーティションを表示できます。 この章では、HCatalogの特定のテーブルのパーティションをリストする方法について説明します。
パーティションステートメントを表示
構文は次のとおりです-
次のクエリは、 employee という名前のテーブルを削除します-
クエリが正常に実行されると、次の応答が表示されます-
動的パーティション
HCatalogは、テーブルをパーティションに編成します。 これは、日付、都市、部門などのパーティション化された列の値に基づいて、テーブルを関連部分に分割する方法です。 パーティションを使用すると、データの一部を簡単に照会できます。
たとえば、 Tab1 という名前のテーブルには、id、name、dept、yoj(参加年)などの従業員データが含まれます。 2012年に参加したすべての従業員の詳細を取得する必要があるとします。 クエリは、テーブル全体から必要な情報を検索します。 ただし、従業員データを年で分割し、別のファイルに保存すると、クエリの処理時間が短縮されます。 次の例は、ファイルとそのデータを分割する方法を示しています-
次のファイルには employeedata テーブルが含まれています。
====/tab1/employeedata/file1
上記のデータは、年を使用して2つのファイルに分割されます。
====/tab1/employeedata/2012/file2
====/tab1/employeedata/2013/file3
パーティションを追加する
テーブルを変更することで、テーブルにパーティションを追加できます。 Id、Name、Salary、Designation、Dept、yojなどのフィールドを持つ employee というテーブルがあると仮定します。
構文
次のクエリは、 employee テーブルにパーティションを追加するために使用されます。
パーティションの名前を変更する
RENAME-TOコマンドを使用して、パーティションの名前を変更できます。 その構文は次のとおりです-
次のクエリは、パーティションの名前を変更するために使用されます-
パーティションの削除
パーティションを削除するために使用されるコマンドの構文は次のとおりです-
次のクエリは、パーティションを削除するために使用されます-
HCatalog-インデックス
インデックスを作成する
インデックスは、テーブルの特定の列へのポインタにすぎません。 インデックスの作成とは、テーブルの特定の列にポインターを作成することを意味します。 その構文は次のとおりです-
例
インデックスの概念を理解するための例を見てみましょう。 Id、Name、Salary、Designation、Deptの各フィールドで以前に使用したものと同じ employee テーブルを使用します。 employee テーブルの salary 列に index_salary という名前のインデックスを作成します。
次のクエリは、インデックスを作成します-
これは、 salary 列へのポインターです。 列が変更された場合、変更はインデックス値を使用して保存されます。
インデックスの削除
次の構文は、インデックスを削除するために使用されます-
次のクエリは、インデックスindex_salaryを削除します-
HCatalog-リーダーライター
HCatalogには、MapReduceを使用しない並列入力および出力用のデータ転送APIが含まれています。 このAPIは、テーブルと行の基本的なストレージ抽象化を使用して、Hadoopクラスターからデータを読み取り、そこにデータを書き込みます。
データ転送APIには、主に3つのクラスが含まれています。それらは-
- HCatReader -Hadoopクラスターからデータを読み取ります。
- HCatWriter -Hadoopクラスターにデータを書き込みます。
- DataTransferFactory -リーダーおよびライターのインスタンスを生成します。
このAPIは、マスタースレーブノードのセットアップに適しています。 HCatReader および HCatWriter について詳しく説明します。
HCatReader
HCatReaderはHCatalog内部の抽象クラスであり、レコードが取得される基になるシステムの複雑さを抽象化します。
Sr.No. | Method Name & Description |
---|---|
1 |
Public abstract ReaderContext prepareRead() throws HCatException これをマスターノードで呼び出してReaderContextを取得し、シリアル化してスレーブノードに送信する必要があります。 |
2 |
Public abstract Iterator <HCatRecorder> read() throws HCaException これは、HCatRecordを読み取るためにスレーブノードで呼び出す必要があります。 |
3 |
Public Configuration getConf() 構成クラスオブジェクトを返します。 |
HCatReaderクラスは、HDFSからデータを読み取るために使用されます。 読み取りは2段階のプロセスであり、最初のステップは外部システムのマスターノードで行われます。 2番目のステップは、複数のスレーブノードで並行して実行されます。
読み取りは ReadEntity で行われます。 読み取りを開始する前に、読み取り元のReadEntityを定義する必要があります。 これは、 ReadEntity.Builder を使用して実行できます。 データベース名、テーブル名、パーティション、フィルター文字列を指定できます。 たとえば-
上記のコードスニペットは、 mydb という名前のデータベースに mytbl という名前のテーブルを含むReadEntityオブジェクト(「エンティティ」)を定義します。これは、このテーブルのすべての行を読み取るために使用できます。 このテーブルは、この操作を開始する前にHCatalogに存在する必要があることに注意してください。
ReadEntityを定義した後、ReadEntityとクラスタ構成を使用してHCatReaderのインスタンスを取得します-
次のステップは、次のようにリーダーからReaderContextを取得することです-
HCatWriter
この抽象化はHCatalogの内部にあります。 これは、外部システムからHCatalogへの書き込みを容易にするためです。 これを直接インスタンス化しようとしないでください。 代わりに、DataTransferFactoryを使用してください。
Sr.No. | Method Name & Description |
---|---|
1 |
Public abstract WriterContext prepareRead() throws HCatException 外部システムは、マスターノードからこのメソッドを1回だけ呼び出す必要があります。 WriterContext を返します。 これをシリアル化してスレーブノードに送信し、そこで HCatWriter を構築する必要があります。 |
2 |
Public abstract void write(Iterator<HCatRecord> recordItr) throws HCaException このメソッドは、スレーブノードで書き込みを実行するために使用する必要があります。 recordItrは、HCatalogに書き込まれるレコードのコレクションを含む反復子オブジェクトです。 |
3 |
Public abstract void abort(WriterContext cntxt) throws HCatException このメソッドは、マスターノードで呼び出す必要があります。 このメソッドの主な目的は、障害が発生した場合にクリーンアップを行うことです。 |
4 |
public abstract void commit(WriterContext cntxt) throws HCatException このメソッドは、マスターノードで呼び出す必要があります。 このメソッドの目的は、メタデータのコミットを行うことです。 |
読み取りと同様に、書き込みも2段階のプロセスであり、最初のステップがマスターノードで発生します。 その後、スレーブノードで2番目のステップが並行して行われます。
書き込みは、読み取りに似た方法で構築できる WriteEntity で行われます-
上記のコードは、データベース mydb の mytbl という名前のテーブルに書き込むために使用できるWriteEntityオブジェクト `+ entity +`を作成します。
WriteEntityを作成した後、次のステップはWriterContextを取得することです-
上記の手順はすべてマスターノードで実行されます。 次に、マスターノードはWriterContextオブジェクトをシリアル化し、すべてのスレーブで使用できるようにします。
スレーブノードでは、次のようにWriterContextを使用してHCatWriterを取得する必要があります-
次に、 writer はイテレータを `+ write +`メソッドの引数として受け取ります-
その後、 writer はループ内でこのイテレーターで* getNext()*を呼び出し、イテレーターに接続されているすべてのレコードを書き出します。
上記のプログラムは、HDFSからレコードの形式でデータを読み取り、レコードデータを mytable に書き込みます。
HCatalog-入力出力フォーマット
HCatInputFormat
Sr.No. | Method Name & Description |
---|---|
1 |
public static HCatInputFormat setInput(Job job, String dbName, String tableName)throws IOException ジョブに使用する入力を設定します。 指定された入力仕様でメタストアを照会し、MapReduceタスクのジョブ構成に一致するパーティションをシリアル化します。 |
2 |
public static HCatInputFormat setInput(Configuration conf, String dbName, String tableName) throws IOException ジョブに使用する入力を設定します。 指定された入力仕様でメタストアを照会し、MapReduceタスクのジョブ構成に一致するパーティションをシリアル化します。 |
3 |
public HCatInputFormat setFilter(String filter)throws IOException 入力テーブルにフィルターを設定します。 |
4 |
public HCatInputFormat setProperties(Properties properties) throws IOException 入力形式のプロパティを設定します。 |
setInput
setOutputSchema
getTableSchema
HCatOutputFormat
HCatOutputFormatはMapReduceジョブで使用され、HCatalog管理のテーブルにデータを書き込みます。 HCatOutputFormatは、テーブルにデータを書き込むためのHadoop 0.20 MapReduce APIを公開します。 MapReduceジョブがHCatOutputFormatを使用して出力を書き込む場合、テーブルに設定されたデフォルトのOutputFormatが使用され、ジョブの完了後に新しいパーティションがテーブルに公開されます。
Sr.No. | Method Name & Description |
---|---|
1 |
public static void setOutput (Configuration conf, Credentials credentials, OutputJobInfo outputJobInfo) throws IOException ジョブについて書き込む出力に関する情報を設定します。 メタデータサーバーに照会して、テーブルに使用するStorageHandlerを見つけます。 パーティションが既に公開されている場合、エラーがスローされます。 |
2 |
public static void setSchema (Configuration conf, HCatSchema schema) throws IOException パーティションに書き出されるデータのスキーマを設定します。 テーブルスキーマは、これが呼び出されない場合、デフォルトでパーティションに使用されます。 |
3 |
public RecordWriter <WritableComparable<?>, HCatRecord > getRecordWriter (TaskAttemptContext context)throws IOException, InterruptedException ジョブのレコードライターを取得します。 StorageHandlerのデフォルトのOutputFormatを使用して、レコードライターを取得します。 |
4 |
public OutputCommitter getOutputCommitter (TaskAttemptContext context) throws IOException, InterruptedException この出力形式の出力コミッターを取得します。 出力が正しくコミットされるようにします。 |
- setOutput
- setSchema
- getTableSchema
HCatOutputFormatの最初の呼び出しは setOutput でなければなりません。他の呼び出しは、出力形式が初期化されていないことを示す例外をスローします。
書き出されるデータのスキーマは、 setSchema メソッドによって指定されます。 書き込むデータのスキーマを提供して、このメソッドを呼び出す必要があります。 データのスキーマがテーブルスキーマと同じ場合、* HCatOutputFormat.getTableSchema()を使用してテーブルスキーマを取得し、それを setSchema()*に渡すことができます。
例
次のMapReduceプログラムは、2番目の列(「列1」)に整数があると見なされる1つのテーブルからデータを読み取り、検出した各個別値のインスタンス数をカウントします。 つまり、 "* select col1、count(*)from $ table group by col1; *"と同等です。
たとえば、2番目の列の値が\ {1、1、1、3、3、5}である場合、プログラムは値とカウントの次の出力を生成します-
私たちは今プログラムコードを見てみましょう-
上記のプログラムをコンパイルする前に、いくつかの jar をダウンロードし、それらをこのアプリケーションの classpath に追加する必要があります。 すべてのHive jarおよびHCatalog jar(HCatalog-core-0.5.0.jar、hive-metastore-0.10.0.jar、libthrift-0.7.0.jar、hive-exec-0.10.0.jar、 libfb303-0.7.0.jar、jdo2-api-2.3-ec.jar、slf4j-api-1.6.1.jar)。
次のコマンドを使用して、これらの jar ファイルを local から HDFS にコピーし、 classpath に追加します。
次のコマンドを使用して、指定されたプログラムをコンパイルおよび実行します。
次に、出力(part_0000、part_0001)の出力ディレクトリ(hdfs:user/tmp/hive)を確認します。
HCatalog-ローダーとストアー
この章をよりよく理解するには、Apache Pigスクリプトに関する知識が必要です。 詳細については、リンク:/apache_pig/index [Apache Pig]チュートリアルをご覧ください。
HCatloader
HCatLoaderは、HCatalogが管理するテーブルからデータを読み取るためにPigスクリプトとともに使用されます。 次の構文を使用して、HCatloaderを使用してHDFSにデータをロードします。
テーブル名を一重引用符で指定する必要があります: 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管理のテーブルにデータを書き込みます。 格納操作には次の構文を使用します。
テーブル名を一重引用符で指定する必要があります: LOAD 'tablename' 。 Pigスクリプトを実行する前に、データベースとテーブルの両方を作成する必要があります。 デフォルト以外のデータベースを使用している場合、入力を 'dbname.tablename' として指定する必要があります。
Hiveメタストアを使用すると、データベースを指定せずにテーブルを作成できます。 この方法でテーブルを作成した場合、データベース名は 'default' であり、 store ステートメントでデータベース名を指定する必要はありません。
次の表には、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コマンドでフラグを使用するか、以下で説明するように環境変数 PIG_CLASSPATH および PIG_OPTS を設定します。
HCatalogで作業するための適切なjarファイルを取り込むには、単に次のフラグを含めます-
実行のためのCLASSPATHの設定
以下のCLASSPATH設定を使用して、HCatalogをApache Pigと同期します。
例
次の内容のファイル student_details.txt がHDFSにあると仮定します。
同じHDFSディレクトリに sample_script.pig という名前のサンプルスクリプトもあります。 このファイルには、以下に示すように、 student 関係で操作と変換を実行するステートメントが含まれています。
- スクリプトの最初のステートメントは、 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 を実行します。
次に、出力(part_0000、part_0001)の出力ディレクトリ(hdfs:user/tmp/hive)を確認します。