SAP HANA Oneをクラスタコンピュートインスタンスで試す

AWS Marketplaceから利用開始

AWS MarketplaceからSAP HANA Oneが使えるようになりました!しかも、本番運用可能なライセンス付きです。インメモリコンピューティングをするためにハードウェアやソフトウェアを買う必要はありません。1時間単位で借りることができるのです!現在、SAP HANA Oneは、US East(Virginia)、US West(Oregon)、EU West(Ireland)にあるクラスタコンピュートインスタンス上で直ぐに使うことが出来ます。

クラスタコンピュートインスタンス

SAP HANA Oneで使われる、クラスタコンピュートインスタンスの性能をご覧下さい。モンスターです。

クラスタコンピュートエイトエクストララージインスタンス

  • 60.5 GiB メモリ
  • 88 EC2 コンピューティングユニット(ECU)(2 × Intel Xeon E5-2670、8コア "Sandy Bridge" アーキテクチャ)
  • 3370 GB インスタンスストレージ
  • 64ビット プラットフォーム
  • I/O 性能: 超高速(10 ギガビットイーサネット)
  • EBS 最適化: 使用不可*
  • API 名: cc2.8xlarge

AWS Marketplaceから起動する

SAP HANA Oneの使い方は簡単です。AWS Marketplaceから選択するだけです。ここから選んで起動するだけで、ソフトウェアのライセンスとEC2インスタンスの使用料がセットになって計算されます。

AWS Marketplace

今回は、オレゴンで起動してみましょう。

そして、起動ボタンを押せばOK!ひとつ、注意点としては、KeyPairを先に作っておきましょう。

インスタンス起動中です。。。

無事に起動完了しました!

AWS管理コンソールの設定

無事に起動が確認できましたら、AWS管理コンソールで外部から接続できるようにセキュリティグループの設定をします。SSHのポート(22)、JDBC接続のポート(30015)、HANA Studio接続のポート(50013-50014)を開けて下さい。また、固定IPアドレス(EIP)を付与すると接続文字列が短くてイイ感じです。

SAP HANA OneへSSH接続する

SSHのポートを開きましたので接続してみましょう。

$ ssh -i hogehoge.pem root@XXX.XXX.XXX.XXX

楽しんでね〜というメッセージ

__|  __|_  )  SUSE Linux Enterprise
  _|  (     /       Server 11 SP1
 ___|\___|___|     x86_64 (64-bit)

For more information about using SUSE Linux Enterprise Server please see
http://www.novell.com/documentation/sles11/

Have a lot of fun...
hanaserver:~ # 

接続すると、ライセンスについて承認を求めて来ます。全部読んだら最後にYesを選択して次に進みましょう。次に行うことは、管理者パスワードの変更です。

$ passwd hdbadm

そして、ユーザを変更します。

$ su - hdbadm

続けてSAP HANAを起動します。

hanaserver:/usr/sap/HDB/HDB00> HDB start &

さらに、HANAのシステム管理ユーザのパスワードを変更します。hdbsqlというDB接続ターミナルを使います。

hanaserver:/usr/sap/HDB/HDB00> hdbsql

Welcome to the SAP HANA Database interactive terminal.

Type: ¥h for help with commands
      ¥q to quit

hdbsql=> ¥c -i 00 -n localhost:30015 -u SYSTEM -p manager
Connected to HDB@hanaserver:30015
hdbsql HDB=> alter user SYSTEM password hogehoge
0 rows affected (4155 usec)

hdbsql HDB=> quit

SAP HANA Studioから接続する

SAP HANA Studioを使ってアクセスする方法は、以前の記事で紹介させて頂きましたので、そちらをご覧下さい。

Amazon EC2上でSAP HANAを使ったインメモリコンピューティング事始め

接続確認できましたので、データベース概要を見てみましょう。50GBのメモリ領域と16CPUを使えるという夢のマシンです。

JDBC接続してみる

最後にJDBC接続をしてみたいと思います。まずは、簡単なテーブル検索です。フツーに書けますね。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
 
public class HanaOne {

	public static void main(String[] args) throws Exception{

		Class.forName("com.sap.db.jdbc.Driver");
		String url = "jdbc:sap://XXX.XXX.XXX.XXX:30015/?autocommit=false";
		Connection conn = DriverManager.getConnection(url, Credencials.user, Credencials.pass);
		Statement stmt = conn.createStatement();
		String sql = "select * from account";
		ResultSet rs = stmt.executeQuery(sql);
		while(rs.next()){
			System.out.print(rs.getString(1)+",");
			System.out.print(rs.getString(2)+",");
			System.out.print(rs.getString(3)+"\n");
		}
		System.out.println("finished.");
		
	}
}

データベースのメタデータを取得する

DBの概要を知るために、JDBCメタデータを取得して表示したいと思います。

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
 
public class HanaOneMeta {

	public static void main(String[] args) throws Exception{

		Class.forName("com.sap.db.jdbc.Driver");
		String url = "jdbc:sap://54.245.101.44:30015/?autocommit=false";
		Connection conn = DriverManager.getConnection(url, Credencials.user, Credencials.pass);
		DatabaseMetaData dbmd = conn.getMetaData();
		System.out.println("CatalogSeparator : "+dbmd.getCatalogSeparator());
		System.out.println("CatalogTerm : "+dbmd.getCatalogTerm());
		System.out.println("DatabaseProductName : "+dbmd.getDatabaseProductName());
		System.out.println("DatabaseProductVersion : "+dbmd.getDatabaseProductVersion());
		System.out.println("DatabaseMajorVersion : "+dbmd.getDatabaseMajorVersion());
		System.out.println("DatabaseMinorVersion : "+dbmd.getDatabaseMinorVersion());
		System.out.println("DefaultTransactionIsolation : "+dbmd.getDefaultTransactionIsolation());
		System.out.println("DriverMajorVersion : "+dbmd.getDriverMajorVersion());
		System.out.println("DriverMinorVersion : "+dbmd.getDriverMinorVersion());
		System.out.println("DriverName : "+dbmd.getDriverName());
		System.out.println("DriverVersion : "+dbmd.getDriverVersion());
		System.out.println("ExtraNameCharacters : "+dbmd.getExtraNameCharacters());
		System.out.println("IdentifierQuoteString : "+dbmd.getIdentifierQuoteString());
		System.out.println("JDBCMajorVersion : "+dbmd.getJDBCMajorVersion());
		System.out.println("JDBCMinorVersion : "+dbmd.getJDBCMinorVersion());
		System.out.println("MaxBinaryLiteralLength : "+dbmd.getMaxBinaryLiteralLength());
		System.out.println("MaxCatalogNameLength : "+dbmd.getMaxCatalogNameLength());
		System.out.println("MaxCharLiteralLength : "+dbmd.getMaxCharLiteralLength());
		System.out.println("MaxColumnNameLength : "+dbmd.getMaxColumnNameLength());
		System.out.println("MaxColumnsInGroupBy : "+dbmd.getMaxColumnsInGroupBy());
		System.out.println("MaxColumnsInIndex : "+dbmd.getMaxColumnsInIndex());
		System.out.println("MaxColumnsInOrderBy : "+dbmd.getMaxColumnsInOrderBy());
		System.out.println("MaxColumnsInSelect : "+dbmd.getMaxColumnsInSelect());
		System.out.println("MaxColumnsInTable : "+dbmd.getMaxColumnsInTable());
		System.out.println("MaxConnections : "+dbmd.getMaxConnections());
		System.out.println("MaxCursorNameLength : "+dbmd.getMaxCursorNameLength());
		System.out.println("MaxIndexLength : "+dbmd.getMaxIndexLength());
		System.out.println("MaxProcedureNameLength : "+dbmd.getMaxProcedureNameLength());
		System.out.println("MaxRowSize : "+dbmd.getMaxRowSize());
		System.out.println("MaxSchemaNameLength : "+dbmd.getMaxSchemaNameLength());
		System.out.println("MaxStatementLength : "+dbmd.getMaxStatementLength());
		System.out.println("MaxStatements : "+dbmd.getMaxStatements());
		System.out.println("MaxTableNameLength : "+dbmd.getMaxTableNameLength());
		System.out.println("MaxTablesInSelect : "+dbmd.getMaxTablesInSelect());
		System.out.println("MaxUserNameLength : "+dbmd.getMaxUserNameLength());
		System.out.println("NumericFunctions : "+dbmd.getNumericFunctions());
		System.out.println("ProcedureTerm : "+dbmd.getProcedureTerm());
		System.out.println("ResultSetHoldability : "+dbmd.getResultSetHoldability());
		System.out.println("RowIdLifetime : "+dbmd.getRowIdLifetime());
		System.out.println("SchemaTerm : "+dbmd.getSchemaTerm());
		System.out.println("SearchStringEscape : "+dbmd.getSearchStringEscape());
		System.out.println("SQLKeywords : "+dbmd.getSQLKeywords());
		System.out.println("SQLStateType : "+dbmd.getSQLStateType());
		System.out.println("StringFunctions : "+dbmd.getStringFunctions());
		System.out.println("SystemFunctions : "+dbmd.getSystemFunctions());
		System.out.println("Schemas : "+dbmd.getSchemas());
		System.out.println("TimeDateFunctions : "+dbmd.getTimeDateFunctions());
		System.out.println("URL : "+dbmd.getURL());
		System.out.println("UserName : "+dbmd.getUserName());
		
	}
}

実行結果は以下です。

CatalogSeparator : .
CatalogTerm : CATALOG
DatabaseProductName : HDB
DatabaseProductVersion : 1.00.38.368649
DatabaseMajorVersion : 1
DatabaseMinorVersion : 0
DefaultTransactionIsolation : 2
DriverMajorVersion : 1
DriverMinorVersion : 0
DriverName : HDB
DriverVersion : 1.0
ExtraNameCharacters : 
IdentifierQuoteString : "
JDBCMajorVersion : 4
JDBCMinorVersion : 0
MaxBinaryLiteralLength : 0
MaxCatalogNameLength : 0
MaxCharLiteralLength : 0
MaxColumnNameLength : 127
MaxColumnsInGroupBy : 0
MaxColumnsInIndex : 0
MaxColumnsInOrderBy : 0
MaxColumnsInSelect : 0
MaxColumnsInTable : 0
MaxConnections : 0
MaxCursorNameLength : 0
MaxIndexLength : 0
MaxProcedureNameLength : 127
MaxRowSize : 0
MaxSchemaNameLength : 128
MaxStatementLength : 0
MaxStatements : 0
MaxTableNameLength : 127
MaxTablesInSelect : 0
MaxUserNameLength : 256
NumericFunctions : ABS,ACOS,ASIN,ATAN,ATAN2,CEILING,COS,EXP,FLOOR,LOG,LOG10,MOD,POWER,ROUND,SIGN,SIN,SQRT,TAN
ProcedureTerm : PROCEDURE
ResultSetHoldability : 1
RowIdLifetime : ROWID_UNSUPPORTED
SchemaTerm : SCHEMA
SearchStringEscape : \
SQLKeywords : 
SQLStateType : 2
StringFunctions : ASCII,CHAR,CONCAT,LENGTH,LTRIM,RTRIM,SUBSTRING
SystemFunctions : IFNULL
Schemas : com.sap.db.jdbc.ResultSetSapDBFinalize@bbe0f0a
TimeDateFunctions : CURDATE,CURTIME,HOUR,MINUTE,MONTH,NOW,SECOND,WEEK,YEAR
URL : jdbc:sap://XXX.XXX.XXX.XXX:30015
UserName : SATOSHI

まとめ

前回の事始め記事に続いて、今回のSAP HANA Oneをご紹介しました。AWS Marketplaceを使ってワンクリックでソフトウェア込みの夢のマシンを1時間単位で使えるという時代の変化について行けませんw。次回は脅威のパフォーマンスをどのように引き出すかいろいろ試したいと思います。

参考資料

Amazon EC2上でSAP HANAを使ったインメモリコンピューティング事始め

SAP HANA One: SAP HANA Platform Available in Public Cloud

AWS Marketplace