Pivotal Knowledge Base

フォローする

gphdfsプロトコルにてGPDBの外部テーブルを介してHDFSのデータにアクセスする方法

環境

  • Greenplum database 4.2.x, 4.3.x
  • Pivotal HD 1.x, 2.x

事前準備

  • JDK(1.7推奨)をダウンロードし、GPDBクラスタの全てのサーバ上にインストールする
  • Pivotal HDインストールパッケージ(アクセス先のPHDクラスタと同バージョン)をダウンロードしGPDBのマスターホストに保存する

GPDBクラスタ上に必要なPHDパッケージをインストール
方法 1

1. PHDインストール用tar ballを解凍する。以下は、PHD-2.0.1の例である

[root@admin phd201]# tar xvfz PHD-2.0.1.0-148.tar.gz

... ...

解凍先ディレクトリに下記のrpmパッケージが含まれていることを確認する

utility/rpm/bigtop-jsvc-1.0.15_gphd_2_0_1_0-43.x86_64.rpm
utility/rpm/bigtop-utils-0.4.0_gphd_2_0_1_0-43.noarch.rpm
zookeeper/rpm/zookeeper-3.4.5_gphd_2_0_1_0-43.noarch.rpm
hadoop/rpm/hadoop-2.0.2_alpha_gphd_2_0_1_0-43.x86_64.rpm
hadoop/rpm/hadoop-yarn-2.0.2_alpha_gphd_2_0_1_0-43.x86_64.rpm
hadoop/rpm/hadoop-mapreduce-2.0.2_alpha_gphd_2_0_1_0-43.x86_64.rpm
hadoop/rpm/hadoop-hdfs-2.0.2_alpha_gphd_2_0_1_0-43.x86_64.rpm

2. rpmパッケージをインストールする(パッケージの依存性エラーが発生しないように下記の順序で実行する)。これはすべてのGPDBクラスタのセグメントサーバで行う必要がある

[root@admin phd201]# cd PHD-2.0.1.0-148

[root@admin PHD-2.0.1.0-148]#rpm -ivh \
utility/rpm/bigtop-jsvc-1.0.15_gphd_2_0_1_0-43.x86_64.rpm \
utility/rpm/bigtop-utils-0.4.0_gphd_2_0_1_0-43.noarch.rpm \
zookeeper/rpm/zookeeper-3.4.5_gphd_2_0_1_0-43.noarch.rpm \
hadoop/rpm/hadoop-2.0.2_alpha_gphd_2_0_1_0-43.x86_64.rpm \
hadoop/rpm/hadoop-yarn-2.0.2_alpha_gphd_2_0_1_0-43.x86_64.rpm \
hadoop/rpm/hadoop-mapreduce-2.0.2_alpha_gphd_2_0_1_0-43.x86_64.rpm \
hadoop/rpm/hadoop-hdfs-2.0.2_alpha_gphd_2_0_1_0-43.x86_64.rpm

3. Hadoopコンフィグレーションファイルを設定し、HDFSがエラーなく稼働することを確認する

方法 2

1. 該当のPHDクラスタにPivotalコマンドセンターが稼働している管理ノードがあれば、その配下の/usr/lib/gphd/rpmsに必要なrpmが含まれている

2. 以下の方法のいずれかで、GPDBクラスタのすべてのセグメントホストにrpmパッケージをインストールする

    a)  /usr/lib/gphd/rpmsにあるrpmパッケージをそれぞれのセグメントサーバにコピーし「rpm -ivh 」のコマンドでインストールする

    b) すべてのセグメントサーバの/etc/yum.repos.dの下にリポジトリファイル(例:gphd.repo)に追加、ファイルの内容を以下のようにする。ただし、「admin.hadoop.local」は、各環境に応じて管理ノードホスト名に変更すること

[gphd]
name=PHD Admin Node Repo
baseurl=http://admin.hadoop.local/gphd_yum_repo
enabled=1
gpgcheck=0
metadata_expire=0

3. Hadoopコンフィグファイルを設定しHDFSがエラーなく稼働できることを確認する

その後「yum install <rpm package name>」を実行する

GPDB コンフィグレーション

1. 以下のように、gpadminのJAVA_HOMEの環境変数をすべてのセグメントサーバに正しく設定する。.bashrcまたは.bash_profileに設定することを推奨する

[gpadmin@admin ~]$echo $JAVA_HOME

/usr/java/default
[gpadmin@admin ~]$ls -l /usr/java/default
lrwxrwxrwx 1 root root 16 Jul 18 2013 /usr/java/default -> /usr/java/latest
[gpadmin@admin ~]$ls -l /usr/java/latest
lrwxrwxrwx 1 root root 21 Dec 15 2013 /usr/java/latest -> /usr/java/jdk1.7.0_25

[gpadmin@admin ~]$cat .bash_profile | grep JAVA_HOME
export JAVA_HOME=/usr/java/default


2. GPDBのパラメーターを設定する

[gpadmin@admin ~]$ gpconfig -c gp_hadoop_home -v "'/usr/lib/gphd'"
[gpadmin@admin ~]$ gpconfig -c gp_hadoop_target_version -v "'gphd-2.0'"

変更内容を反映するには「 gpstop –u」を実行する。

テスト

1. すべてのセグメントサーバがHDFSにアクセスできることを確認する

[gpadmin@sdw1 ~]$hdfs dfs -ls hdfs://hdm2:8020/

Found 7 items
drwxr-xr-x - hdfs hadoop 0 2014-06-14 21:20 hdfs://hdm2:8020/apps
drwxr-xr-x - postgres gpadmin 0 2014-06-16 04:55 hdfs://hdm2:8020/hawq_data
drwxr-xr-x - hdfs hadoop 0 2014-06-14 21:21 hdfs://hdm2:8020/hive
drwxr-xr-x - mapred hadoop 0 2014-06-14 21:20 hdfs://hdm2:8020/mapred
drwxrwxrwx - hdfs hadoop 0 2014-07-10 22:29 hdfs://hdm2:8020/tmp
drwxrwxrwx - hdfs hadoop 0 2014-06-16 18:11 hdfs://hdm2:8020/user
drwxr-xr-x - hdfs hadoop 0 2014-06-14 21:21 hdfs://hdm2:8020/yarn

2. テスト用にテキストファイルを作成し、HDFSに保存する

[gpadmin@admin ~]$cat test1.txt

15,west
25,east

[gpadmin@admin ~] hdfs dfs -put test1.txt hdfs://hdm2:8020/tmp/

[gpadmin@admin ~]$hdfs dfs -ls hdfs://hdm2:8020/tmp
Found 1 items
-rw-r--r-- 3 gpadmin hadoop 16 2014-07-06 22:38 hdfs://hdm2:8020/tmp/test1.txt

3. GPDBで読み取り可能な外部表を作りHDFS上にあるテスト用のテキストファイル(test1.txt)を指定する

メモ: 下記例のlocationフィールドはシングルNameNodeの場合である。NameNodeが2台ある場合(高可用設定)、locationフィールドは「gphdfs:///tmp/test1.txt」のような形式となる。つまり、ポート番号を含まず、ホスト名はcore-site.xmlのfs.defaultFSパラメーターに指定された値に置き換える。

initdb=# create external table test_hdfs (age int, name text) location('gphdfs://hdm2:8020/tmp/test1.txt') format 'text' (delimiter ',');

CREATE EXTERNAL TABLE

initdb=# \d test_hdfs
External table "public.test_hdfs"
Column | Type | Modifiers
--------+---------+-----------
age | integer |
name | text |
Type: readable
Encoding: UTF8
Format type: text
Format options: delimiter ',' null '\N' escape '\'
External location: gphdfs://hdm2:8020/tmp/test1.txt

4. 外部表へのクエリを試行する

initdb=# select * from test_hdfs;
age | name
-----+------
15 | west
25 | east
(2 rows)

5. GPDBで書き込み可能な外部表を作りHDFS上にあるファイルを指定する

initdb=# select * from myt1;

id | name
------+-------
1000 | Jason
(1 row)

initdb=# create writable external table test_hdfs2 (like myt1) location('gphdfs://hdm2:8020/tmp/test2.txt') format 'text' (delimiter ',');

NOTICE: Table doesn't have 'distributed by' clause, defaulting to distribution columns from LIKE table
CREATE EXTERNAL TABLE

6. 書き込み可能な外部表にデータを挿入する

initdb=# insert into test_hdfs2 select * from myt1;

INSERT 0 1

7. HDFS上にファイルが存在すること及びファイルの内容を確認する

[gpadmin@admin ~]$hdfs dfs -ls hdfs://hdm2:8020/tmp/test2.txt

Found 1 items
-rw-r--r-- 3 gpadmin hadoop 11 2014-07-13 23:37 hdfs://hdm2:8020/tmp/test2.txt/0_1402800555-0000000098
[gpadmin@admin ~]$hdfs dfs -cat hdfs://hdm2:8020/tmp/test2.txt/0_1402800555-0000000098
1000,Jason

コメント

Powered by Zendesk