はじめに
Verticaには、以下のようなHadoopと連携する機能が実装されています。
・HDFSコネクタ:HDFS上のファイルをVerticaに簡単にロード
・External Table:VerticaにロードすることなくHDFS上のファイルをSQLで検索
・HCatalogコネクタ:Hiveで作成したスキーマをVerticaから参照可能

今回はHDFS上のデータをVerticaのテーブルに直接ロードする方法を紹介します。
HDFS上のデータをVerticaにロードすることで、通常のVerticaのテーブルとして検索することが可能になりますので、Hadoop内での検索に比べ高速なパフォーマンスが期待できます。
HDFS上のデータをVerticaのテーブルにロードする
以下の手順にてHDFS上のデータをVerticaのテーブルにロードすることができます。
1.Hadoopの設定ファイルをVerticaサーバにコピーする
2.HDFS内のファイルをロードするためのテーブルをVertica上で作成する
3.COPYコマンドでHDFS内のファイルデータをVerticaのテーブルへロードする
各手順の詳細を以下で説明します。
Hadoopの設定ファイルをVerticaサーバにコピーする
VerticaからHDFS上のデータアクセスは、Verticaサーバ上に存在するHadoop設定ファイルを経由して行います。 そのためVerticaとHDFSが別クラスタに存在する場合、Hadoopの設定ファイルをVerticaサーバにコピーする必要があります。連携に必要なHadoop設定ファイルは以下のとおりです。
・core-site.xml
・hdfs-site.xml
VerticaはHDFS上のデータにアクセスする際、上記ファイル内の特定のプロパティを読み込んでいます。
読み込んでいるプロパティの詳細等については、以下のマニュアルをご参照ください。
Configuring the hdfs Scheme
https://my.vertica.com/docs/8.1.x/HTML/index.htm#Authoring/HadoopIntegrationGuide/libhdfs/ConfiguringAccessToHDFS.htm
また、Verticaはデフォルトで/etc/hadoop/conf ディレクトリ上にあるHadoop設定ファイルを読み込みます。
デフォルト以外のディレクトリに存在するHadoop設定ファイルを読み込ませたい場合、別途データベースパラメータを変更する必要があります。Hadoopに関するデータベースパラメータの詳細については、以下のマニュアルをご参照ください。
Hadoop Parameters
https://my.vertica.com/docs/8.1.x/HTML/index.htm#Authoring/AdministratorsGuide/ConfiguringTheDB/HadoopParameters.htm
今回はVerticaサーバ上に作成した /etc/hadoop/confディレクトリにHadoop設定ファイルを配置します。
■Verticaサーバに/etc/hadoop/confディレクトリを作成する
# mkdir -p /etc/hadoop/conf
■Hadoopサーバにある設定ファイルをVerticaサーバの/etc/hadoop/confディレクトリへ転送する
# scp core-site.xml hdfs-site.xml root@xxx.xxx.xxx.xxx:/etc/hadoop/conf
root@xxx.xxx.xxx.xxx's password:
core-site.xml 100% 3852 3.8KB/s 00:00
hdfs-site.xml 100% 1709 1.7KB/s 00:00HDFS内のファイルをロードするためのテーブルをVertica上で作成する
一般的なテーブルと同様にCREATE TABLE文で作成します
dbadmin=> CREATE TABLE hdfs_table01
dbadmin-> (
dbadmin(> A varchar(10),
dbadmin(> B int,
dbadmin(> C int,
dbadmin(> D int
dbadmin(> );
CREATE TABLECOPYコマンドでHDFS内のファイルデータをVerticaのテーブルへロードする
HDFS内のデータをロードする際は、URL接頭辞に「hdfs:///」を指定します。この指定によりVerticaは事前に配置しているHadoop設定ファイルの情報を読み込みHDFS上のデータにアクセスします。以下の例ではHadoop上の「/tmp/test.txt」ファイルのデータを「hdfs_table01」テーブルにロードしています。
dbadmin=> COPY hdfs_table01 FROM 'hdfs:///tmp/test.txt';
Rows Loaded
-------------
2
(1 row)データがロードされていることを確認します。
dbadmin=> SELECT * FROM hdfs_table01;
A | B | C | D
------+---+---+---
AAAA | 1 | 2 | 3
BBBB | 4 | 5 | 6
(2 rows)このように普通にCSVファイルをロードする手順と同様の手順で簡単にHadoop内のデータをVerticaのテーブルにロードすることができます。
参考情報
データロードのまとめ記事
https://www.ashisuto.co.jp/cm/analytics-database/load-summary.html
検証バージョンについて
この記事の内容はVertica 8.1で確認しています。