はじめに
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設定ファイルを配置します。
1 2 3 4 5 6 7 8 |
■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:00 |
HDFS内のファイルをロードするためのテーブルをVertica上で作成する
一般的なテーブルと同様にCREATE TABLE文で作成します
1 2 3 4 5 6 7 8 |
dbadmin=> CREATE TABLE hdfs_table01 dbadmin-> ( dbadmin(> A varchar(10), dbadmin(> B int, dbadmin(> C int, dbadmin(> D int dbadmin(> ); CREATE TABLE |
COPYコマンドでHDFS内のファイルデータをVerticaのテーブルへロードする
HDFS内のデータをロードする際は、URL接頭辞に「hdfs:///」を指定します。この指定によりVerticaは事前に配置しているHadoop設定ファイルの情報を読み込みHDFS上のデータにアクセスします。以下の例ではHadoop上の「/tmp/test.txt」ファイルのデータを「hdfs_table01」テーブルにロードしています。
1 2 3 4 5 |
dbadmin=> COPY hdfs_table01 FROM 'hdfs:///tmp/test.txt'; Rows Loaded ------------- 2 (1 row) |
データがロードされていることを確認します。
1 2 3 4 5 6 |
dbadmin=> SELECT * FROM hdfs_table01; A | B | C | D ------+---+---+--- AAAA | 1 | 2 | 3 BBBB | 4 | 5 | 6 (2 rows) |
このように普通にCSVファイルをロードする手順と同様の手順で簡単にHadoop内のデータをVerticaのテーブルにロードすることができます。
参考情報
データロードのまとめ記事http://vertica-tech.ashisuto.co.jp/load-summary/