こんにちわ!石田です。
Netezza Software Emulatorとは?
IBMのDWH/アナリティクス用アプライアンスであるPDA(PureData for Analytics 旧称 Netezza )はハードウエア・アプライアンスということもあり、実際に触ったことがある方は少ないかも知れません。でも開発やスキルアップ用途にPCで簡単に動かせるNetezza Software Emulatorってのがあるんです。PC上の仮想環境で動くエミュレーターなので製品のような性能は期待できませんが、Windows/Mac/Linuxいずれでも動きますしメモリも5GBしか使いませんので開発用途やスキルアップには十分です。このエミュレーターの情報、英語では色々あるんですが日本語のものがあまり見当たらなかったので2016/1月時点の最新で「使ってみた」しました。ご興味と機会があれば皆様もぜひ触ってみてください。
エミュレーター環境の見え方
左側の図は本来のアプライアンス製品のアーキテクチャーです。MPP層に多数のSPAが配置され、同時並列でスケーラブルに処理を行う「シェアド・ナッシング」型です。今回ご紹介するエミュレーターはこのSPAが1つだけ、のPDAマシンのように見えます。(エミュレータなのでFPGAは存在しませんが) アプリケーションやSQL的には通常製品と変わりはありません。
ハード的には以下のように見えています。
[nz@netezza ~]$ nzhw show
Description HW ID Location Role State Security
----------- ----- ---------- ------ ------ --------
Rack 1001 rack1 Active Ok N/A
SPA 1002 spa1 Active Ok N/A
SPU 1003 spa1.spu1 Active Online N/A
Disk 1004 spa1.disk1 Active Ok Disabled
Disk 1005 spa1.disk2 Active Ok Disabled
Disk 1006 spa1.disk3 Active Ok Disabled
やってみた
前提環境
ここに環境の記載がありますが、
要は以下の環境が用意できればOKです。(私は会社のノートPCで動かしてます)
- 64ビットマシン
- 最低4コア & IntelVT/AMD-Vがオン
- メモリ最低5GB
- ディスクは導入直後で10GB程度使用
- VMWare WorkstationかVMWare Player
大まかな手順・流れ
- VMイメージのダウンロード
- VMWare上でのNPS起動
- NPSへのログイン
- 簡単な操作
- 超便利ツール Aginity Workbench
1. VMイメージのダウンロード
IBM Netezza Developer NetworkにIBMIDでログインします。(
「IBM Netezza Software Emulator for Developers V7.2.1 for Linux w/INZA 3.2.1」を選択してダウンロードします。 (アナリティクス用のINZAも含まれていますが導入イメージが含まれているだけですので、必要なら別途導入作業が必要です。当記事では利用しません。)
ダウンロード直前はこんな画面。ダウンロードするovaファイルのサイズは4GBほどです。( Download Directorを選ぶと同時ダウンロードするので速いです)
2.VMWare上での起動
ダウンロードしたovaファイルをVMWare workstationから開き、インポートします。
終わったらいよいよ起動ですが、その前に一点確認。VMWareの仮想マシンの設定で4コア以上、かつIntel VT or AMD-V supportが有効になっているか確認してください。(下記はVMWare workstation 10の例)
3. NPSへのログイン
ログイン画面が出たらroot/netezzaでログインします。ログインするとNPSのIPアドレスが表示されます。(私の場合はVMWareのNAT設定/DHCPで自動的にIP取得してます) ちなみに事前に設定されているユーザーidとパスワードは以下の通り。
host | ユーザー | パスワード |
---|---|---|
OS用 | root | netezza |
OS用 | nz | nz |
db | admin | password |
外からアクセスしやすいようにマシン名とIPアドレスをクライアントPCのhostsに登録しておきましょう。PuTTYでも簡単にアクセスできました!
以上でインストールは終わりです。簡単ですね!
4. 簡単な操作
以下、コマンドツール nzsqlを使った基礎の基礎の操作の簡単なご紹介です。利用するユーザーidは nz ですので suしてください。
[root@netezza ~]# su - nz
#############################
# current IP: 192.168.118.139
#############################
[nz@netezza ~]$
環境変数の確認
NZ_で始まる環境変数を確認します。NZ_DATABASEでデフォルトのDBを設定しますが、初期状態ではSYSTEMになっています。
[nz@netezza ~]$ set|grep NZ
NZ_DATABASE=system
NZ_DIR=/nz
NZ_HOST=127.0.0.1
NZ_INITTOPOLOGY_FILE=/nz/nse/initTopology.cfg
NZ_PASSWORD=password
NZ_USER=admin
[nz@netezza ~]$
nzsqlの起動
[nz@netezza ~]$ nzsql
Welcome to nzsql, the IBM Netezza SQL interactive terminal.
Type: \h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
SYSTEM.ADMIN(ADMIN)=>
操作ヘルプ
SYSTEM.ADMIN(ADMIN)=> \?
\a toggle between unaligned and aligned mode
\act show current active sessions
\c[onnect] [dbname [user] [password]]
connect to new database (currently 'SYSTEM')
\C <title> HTML table title
\copy ... perform SQL COPY with data stream to the client machine
\d <table> describe table (or view, index, sequence, synonym)
\dO <table> describe table or view in sorted order
\d{t|v|i|s|e|x} list tables/views/indices/sequences/temp tables/external tables
\d{m|y} list materialized views/synonyms
\dS{t|v|i|s} list system tables/views/indexes/sequences
\dM{t|v|i|s} list system management tables/views/indexes/sequences
\dp <name> list user permissions
\dpu <name> list permissions granted to a user
\dpg <name> list permissions granted to a group
\dgp <name> list grant permissions for a user
\dgpu <name> list grant permissions granted to a user
\dgpg <name> list grant permissions granted to a group
\d{u|U} list users/User Groups
\d{g|G|Gr} list groups/Group Users/Resource Group Users
\da[+] [name] list aggregates, + for additional fields
\dd [object] list comment for object
\df[+] [name] list functions, + for additional fields
\dl[+] [name] list libraries, + for additional fields
\do list operators
\dT list data types
\e [file] edit the current query buffer or [file] with external editor (Not supported on Windows)
\echo <text> write text to stdout
\f <sep> change field separator
\g [file] send query to backend (and results in [file] or |pipe)
\h [cmd] help on syntax of sql commands, * for all commands
\H toggle HTML mode (currently off)
\i <file> read and execute queries from <file>
\l list all databases
\o [file] send all query results to [file], or |pipe
\O [filename] send query output with errors to filename (or |pipe)
\p show the content of the current query buffer
\pset <opt> set table output <opt> = {format|border|expanded|fieldsep|
null|recordsep|tuples_only|title|tableattr|pager}
\q quit nzsql
\qecho <text> write text to query output stream (see \o)
\r reset (clear) the query buffer
\s [file] print history or save it in [file] (Not supported on Windows)
\set <var> <value> set internal variable
\t show only rows (currently off)
\time print time taken by queries
\T <tags> HTML table tags
\unset <var> unset (delete) internal variable
\w <file> write current query buffer to a <file>
\x toggle expanded output (currently off)
\! [cmd] shell escape or command (Not supported on Windows)
SYSTEM.ADMIN(ADMIN)=>
データベースのリスト
デフォルトでは SYSTEMとTESTの2つのDBが準備されており、SYSTEMに接続されています。
SYSTEM.ADMIN(ADMIN)=> \l
List of databases
DATABASE | OWNER
----------+-------
SYSTEM | ADMIN
TEST | ADMIN
(2 rows)
SYSTEM.ADMIN(ADMIN)=>
特定のデータベースへの接続
SYSTEM.ADMIN(ADMIN)=> \c TEST
You are now connected to database TEST.
TEST.ADMIN(ADMIN)=>
データベース内のテーブルのリスト
TEST.ADMIN(ADMIN)=> \dt
List of relations
Schema | Name | Type | Owner
--------+-------+-------+-------
ADMIN | TEST1 | TABLE | ADMIN
(1 row)
TEST.ADMIN(ADMIN)=>
テーブルのSELECT
TEST.ADMIN(ADMIN)=> select * from test1;
T1 | T5
----+----
(0 rows)
TEST.ADMIN(ADMIN)=>
データベースの作成
一応SYSTEMに繋ぎなおしてCREATE DATABASE 名前;だけです。簡単ですね!
TEST.ADMIN(ADMIN)=> \c system
You are now connected to database system.
SYSTEM.ADMIN(ADMIN)=> create database mydb;
CREATE DATABASE
SYSTEM.ADMIN(ADMIN)=> \l
List of databases
DATABASE | OWNER
----------+-------
MYDB | ADMIN
SYSTEM | ADMIN
TEST | ADMIN
(3 rows)
SYSTEM.ADMIN(ADMIN)=>
テーブルの作成
SYSTEM.ADMIN(ADMIN)=> \c mydb
You are now connected to database mydb.
MYDB.ADMIN(ADMIN)=> create table tbl1( col1 char(04), col2 smallint );
CREATE TABLE
MYDB.ADMIN(ADMIN)=>
データのロード
ロードはnzsqlではなくnzloadコマンドで行います。
[nz@netezza ~]$ vi data.csv
[nz@netezza ~]$ cat data.csv
aaaa,1
bbbb,2
cccc,3
[nz@netezza ~]$ nzload -db mydb -t tbl1 -df data.csv -delim ','
Load session of table 'TBL1' completed successfully
[nz@netezza ~]$ nzsql -db mydb
Welcome to nzsql, the IBM Netezza SQL interactive terminal.
Type: \h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
MYDB.ADMIN(ADMIN)=> select * from tbl1;
COL1 | COL2
------+------
aaaa | 1
bbbb | 2
cccc | 3
(3 rows)
MYDB.ADMIN(ADMIN)=>
NZSQLの終了
MYDB.ADMIN(ADMIN)-> \q
[nz@netezza ~]$
最後にNPS自体を遮断するとき
nzpush完了後に普通にOSをshutdownします。
[nz@netezza ~]$ nzpush -all power off
Powering off SPUs spu0101 ...Domain spu0101 destroyed
done.
[nz@netezza ~]$ exit
logout
[root@netezza ~]# shutdown -h now
Broadcast message from root@netezza
(/dev/pts/0) at 14:40 ...
The system is going down for halt NOW!
[root@netezza ~]#
(参考) 超便利ツール Aginity Workbench
前述のようにnzsqlからSQLやコマンドをシコシコいれてもいいのですが、開発はやっぱGUIが楽。。そんな方にAginity社が提供するスタンドアロンの無償ツール Aginity Workbench for IBM Netezzaをご紹介します。これ、一度使ってみるとわかりますが、かゆいところに手が届く神のようなツールです。最新版ではPDAの新機能であるFluid Queryにまで対応していて、驚きました。(IBMもNetezza用のEclipseプラグインを提供していますが、正直、Aginityを使ったら使う気になりませんね。。)Aginity Workbenchは他にもdashDB, RedShift,Greemplum,ParAccel,Hadoopなどビッグデータ向けDBMSのWorkbenchがあります。Aginityさん、グッジョブ!
ログインします。(OSではなくPDAのデータベースに接続するので admin/passwordで)
SQLやデータを操作できるのはこの類のツールでは当然ですが、それ以外にもPDAに特化した開発機能や運用操作がてんこ盛りです。
参考文献
IBM PureData-Netezza Developer Network (NDN) - Requirements for the PureData for Analytics Software Emulator version 7.2 or newer
12 easy steps to install IBM Netezza Software Emulator for Developers
NPS 7.2 Knowledge Center