Hcatalog-reader-writer
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 に書き込みます。