Jupyter NotebookとPySparkでSAP HANA Cloud, data lake Filesを使用する
作成者:伊藤 沢 投稿日:2023年4月4日
このブログは、Ronit Nagwekarが執筆したブログ「Using HANA Cloud, data lake Files with a Jupyter Notebook and PySpark」(2022/11/9)の抄訳です。最新の情報は、SAP Communityの最新ブログやマニュアルを参照してください。
このブログで説明していることは、以下を前提としています。
- Pythonプログラミング言語の基本的な知識があること (PySpark)
- SAP HANA Cloud, data lakeのインスタンスがプロビジョニング、設定されていること:マニュアル「SP HANA Cloud, data lake Fileコンテナの設定(英語)」
- SAP HANA Cloud, data lakeインスタンスのインスタンスIDがあること
- Jupyter Notebook (io)へアクセスできること
概要
SAP HANA Cloud, data lake Files(HDLFS)には、Sparkからのファイルへの直接のアクセスを可能にするドライバーが含まれています。これにより、Hadoop FileSystemインターフェースを実装し、Hadoopエコシステム内のプラットフォームとアプリケーションをデータ格納用のHDLFSと連携することができます。このブログでは、HDLFSとの接続設定、Fileストア内のファイルからの書き込み、読み込み、削除がいかに容易に行えるのか紹介します。
ステップ1:SAP HANA Cloud, data lake FilesのSparkドライバーをダウンロードする
- SAP HANA, data lakeのクライアントは、SAP HANA Cloud, data lakeクライアントインターフェース (英語)のマニュアルで説明されているステップに従ってインストールすることができます。SAP HANA, data lakeのクライアントをインストールすると、hdlfs spark ドライバーがHDLFS フォルダーに入ります。
- また、Maven.org.の SAP HANA Data Lake Files Client Library から直接ダウンロードすることもできます。
ステップ2: JupyterからHANA Cloud, data lake Filesへの接続を設定する
マニュアルの「SAP HANA Cloud, data lake Filesへのアクセス設定(英語)」に掲載されているように、クライアント認証とキーを作成します。Jupyter NotebookからHDLFSへ通信するためにclient.crt とclient.key をキーストアパッケージに提供する必要があります。このパッケージは、Jupyter Notebookインスタンスにアップロードする必要があります。
以下は、Opensslを使用したクライアント認証とキーからのpkcs12 packageの作成方法の一例です。
openssl pkcs12 \
-export \
-inkey </path/to/client-key-file> \
-in </path/to/client-certificate-file> \
-out </path/to/client-keystore.p12> \
-password pass:<password-p12-file> \
コマンドプロンプトでは以下のようになります。
これが完了すると、以下のように. pkcs12 ファイルが任意のパスに作成されます。後ほど必要になるので、キーストアパスワードをメモしておいてください。
HDLFSディレクトリーからSpark Driverと. pkcs12ファイルをJupyter Notebookインスタンスにアップロードします。
upload の矢印をクリックし、2つのファイルをアップロードします。これでworkbookホームにアップロードされます。
ステップ3:コードを理解して、SAP HANA Cloud, data lake Filesストアとの接続を設定する。
全コードを「このブログの最後」に掲載しています。Notebookのコードブロックにこれを貼り付けて実行してください。
以下のコードブロックは、SAP HANA Cloud, data lake Filesストアとの接続の設定方法を示します。
下のコードブロックでは、SSLの設定、Operations config、ドライバーの設定、URIのフォーマットの設定方法を説明しています。
Note: 特定のパラメータープロパティを参照するため、sc.jsc.hadoopConfiguartion().set() を呼び出して、Sparks Global Hadoop Configurationを設定します。「_jsc」は、そのJVM内のSparkContextへのプロキーシーである Java Spark Context です。
# —– ssl 設定 — クライアントキーストアの場所、クライアントキーストアのパスワード、トラストストアファイルのタイプを定義します。
sc._jsc.hadoopConfiguration().set(“fs.hdlfs.ssl.keystore.location”, keystoreLocation)
sc._jsc.hadoopConfiguration().set(“fs.hdlfs.ssl.keystore.password”, keystorePwd)
sc._jsc.hadoopConfiguration().set(“fs.hdlfs.ssl.keystore.type”, “PKCS12”)
# —– オペレーション設定 — ファイルの読み込み、書き込み、削除を行うCREATEモードがDEFAULTとして設定されるオペレーションパラメーターを設定します。
sc._jsc.hadoopConfiguration().set(“fs.hdlfs.operation.create.mode”, “DEFAULT”)
# —– ドライバー設定 — SAP HANA Cloud, data lake Filesをターゲットしているorg.apache.hadoop.fs.FileSystemを実装します。Sparkによるドライバーのロードを可能にするには、システムが新しいhdlfs://スキーマを認識し、data lake Filesのファイルを参照するよう設定パラメーターを指定します。
sc._jsc.hadoopConfiguration().set(“fs.AbstractFileSystem.hdlfs.impl”, “com.sap.hana.datalake.files.Hdlfs”)
sc._jsc.hadoopConfiguration().set(“fs.hdlfs.impl”, “com.sap.hana.datalake.files.HdlfsFileSystem”)
sc._jsc.hadoopConfiguration().set(“mapreduce.fileoutputcommitter.algorithm.version”,”2″)
#— uri のフォーマットは hdlfs://<filecontainer>.<endpointSuffix>/path/to/file — Sparkにドライバーが認識されると、ファイルはhdlfs://<files-rest-api-endpoint>/path/to/fileとしてSparkのURIに参照されます。
sc._jsc.hadoopConfiguration().set(“fs.defaultFS”, “hdlfs://” + hdlfsEndpoint)
sc._jsc.hadoopConfiguration().set(“fs.hdlfs.filecontainer”, filecontainer)
Apache SparkのためのData Lake Filesドライバー設定のマニュアル:Apache SparkのためのData Lake Filesドライバー設定(英語)
下のコードブロックは、前述でHDLFSに接続し、(存在する場合には)HDLFSからファイルを読み込むための設定をしたhadoop設定をどう使用するのか示しています。
スクリーンショット:
追加のコードブロックは、任意のディレクトリーからのファイルの書き込み、読み込み、削除方法について示しています。
ステップ4: Data Lake Fileコンテナへのファイルの読み込み、書き込み、削除方法
前述のディレクトリーパスの中にあるPySparkを使用して、ファイルの読み込み方法を示すコードブロックをみてみます。
ファイルの読み込み:
ディレクトリーをcsv () メソッドへのパスとしてバイパスすることで全てのCSVファイルをディレクトリーからDataFrameに読み込むことが可能です。delimiter オプションを使用して、CSVファイルの列区切を指定します。デフォルトでは、これは カンマ(,) ですが、このオプションを使用することでパイプ (|)、タブ (\t)、スペースなど、どの文字にも設定できます。
スクリーンショット:
ファイルの書き込み/作成:
以下は、前述のディレクトリーパス内でPySparkを使用した「書き込み」方法を示すコードブロックです。
スクリーンショット:
File Containerにファイルが作成されているか確認するには、HANA Database Explorer (DBX)に切り替えることでファイルが作成されているかどうかを確認できます。以下のスクリーンショットを参照してください。
ファイルの削除:
HDFSからファイル/ディレクトリーを削除するには、読み込みや書き込みのオペレーションと同様のステップに従います。 ファイルを削除するには、– fs.delete(path, true)を使用します。trueはパス内のファイルが正常に削除されていることを示し、falseはファイルが再帰的に削除されていないことを示します。
Delete関数使用前はOrdersdata.csv がFile Containerに存在することをDBXで確認できます。
Delete関数使用後は、Ordersdata.csv はFile Containerから削除されています。
付録
全体コードは以下のとおりです:
import os
#include hdlfs spark driver in pyspark shell
os.environ['PYSPARK_SUBMIT_ARGS'] = '--jars /home/jovyan/work/sap-hdlfs-1.1.9.jar pyspark-shell'
import pyspark
from pyspark.sql.session import SparkSession
from pyspark import SparkContext
sc = SparkContext.getOrCreate()
spark = SparkSession(sc)
keystoreLocation = "/home/jovyan/work/mycert.p12"; # ----- the location of the keystore p.12 file in the home directory
keystorePwd = "Password1"; # ----- the password that you entered while creating the keystore file
hdlfsEndpoint = "<your HANA Data Lake Files endpoint>"; # ----- the Rest API Endpoint of the Data Lake instance
filecontainer = "<your HANA Data Lake Files instance ID>"; # ----- This is the Instance ID
# ----- ssl configuration ---
sc._jsc.hadoopConfiguration().set("fs.hdlfs.ssl.keystore.location", keystoreLocation)
sc._jsc.hadoopConfiguration().set("fs.hdlfs.ssl.keystore.password", keystorePwd)
sc._jsc.hadoopConfiguration().set("fs.hdlfs.ssl.keystore.type", "PKCS12")
# ----- operations configuration ----
sc._jsc.hadoopConfiguration().set("fs.hdlfs.operation.create.mode", "DEFAULT")
# ----- driver configuration ----
sc._jsc.hadoopConfiguration().set("fs.AbstractFileSystem.hdlfs.impl", "com.sap.hana.datalake.files.Hdlfs")
sc._jsc.hadoopConfiguration().set("fs.hdlfs.impl", "com.sap.hana.datalake.files.HdlfsFileSystem")
sc._jsc.hadoopConfiguration().set("mapreduce.fileoutputcommitter.algorithm.version","2")
# uri is in format hdlfs://<filecontainer>.<endpointSuffix>/path/to/file
sc._jsc.hadoopConfiguration().set("fs.defaultFS", "hdlfs://" + hdlfsEndpoint)
sc._jsc.hadoopConfiguration().set("fs.hdlfs.filecontainer", filecontainer)
# -- Read the files from the File Container
hadoop = sc._jvm.org.apache.hadoop
fs = hadoop.fs.FileSystem
conf = sc._jsc.hadoopConfiguration()
path = hadoop.fs.Path('/')
[str(f.getPath()) for f in fs.get(conf).listStatus(path)]
# -- Read a File
df = spark.read.options(delimiter='|').csv("/Ordersdata.csv")
# -- Write a File
df.write.csv("TPCH_SF100/ORDERS/File.csv")
# -- Delete a File
path = hadoop.fs.Path('/File.csv')
fs.get(conf).delete(path, True)
まとめ:
Jupyter NotebookとPysparkを使用して、HDLFSとの接続を簡単に設定・確立できること、そしてFilesストアからのファイルの書き込み、読み込み、削除方法について説明しました。
このオリジナルブログが掲載されているSAP CommunityのSybase関連タグをフォローして、最新技術情報をキャッチアップしてください(フォローには登録が必要です)。
SAP Communityの関連タグ
・SAP HANA Cloud, data lake ブログ / Q&A
・SAP IQ ブログ / Q&A
・SAP SQL Anywhere ブログ / Q&A
SAP Communityでは質問も投稿することが可能で、世界中のSAP社員やユーザーのアドバイスを受けることができます。
———————————————————
SAPジャパンブログ内関連記事:
SAP HANA Cloud, data lake
SAP HANA Cloud, data lake 2022年12月版、2023年3月版、6月版の主な新機能
SAP HANA Cloudの「マルチ環境」のサポートとSAP HANA CloudのKyma環境からの使用
SAP HANA Cloud : データレイクおよびデータティアリング(階層化)概要
SAP IQシステムからSAP HANA Cloud, data lake (Standalone Data Lake) へ移行する理由トップ5
SAP IQまたは、SAP HANA Cloud, data lakeリレーショナルエンジンのインスタンスから別のインスタンスへログインをコピーする
SAP HANA Cloud, data lakeリレーショナルエンジンで非同期でテーブルをロードする
SAP HANA Cloud, data lakeストレージのオブジェクトストレージへの変更によるパフォーマンス向上とペタバイト規模データの対応およびコスト低減
SAP HANA Cloud, data lakeでマテリアライズドビューを使用してパフォーマンスを上げる
SAP HANA Cloud, SAP HANA データベースとSAP HANA Cloud, data lake filesを使用する
SAP HANA Cloud, HANA データベースからSAP HANA Cloud, data lakeデータベースへの最速のデータ移行方法とテスト結果
SAP HANA Cloud, HANAデータベースから HANA Cloud, data lakeへのデータの高速移行とデータ移行速度に影響するパラメーター
SAP HANA Cloud, data lakeとSAP IQに共通するヒストリカルデータベースとDBSpaceサイズのキャプチャー方法
SAP HANA Cloud, data lake(IQ)をベースにしたNode.jsアプリケーションの構築
複数のSAP HANAソースからのデータを1つのSAP HANA Cloud, data lake(IQ)に集約する
SAP HANA Cloud, data lake Filesへの最初のアクセス設定
SAP HANA Cloud, data lakeおよびSAP IQにおけるスキーマのエクスポート/バックアップ
SAP HANA Cloud, data lake(IQ)にWindows端末からPythonで直接接続する
SAP HANA Cloud, data lakeへのデータロードにおけるvCPU数の影響
SAP IQのクラウドサービスが開始されました – SAP HANA Cloud, data lake (Standalone IQ)
SAP IQ
SAP IQのクラウドサービスが開始されました – SAP HANA Cloud, Data Lake (Standalone IQ)
SAP IQ – 隠れたイッピン(the hidden treasure) …
全てのSAP BW、SAP BW/4HANAリリースのSAP ニアラインストレージ(NLS)ソリューション – SAP IQ
SAP IQによるSAP ニアラインストレージ(NLS)のパフォーマンスを向上させる
SAP IQを利用したSAP Information Lifecycle Management(ILM)
DBA CockpitでSAP IQを有効にする
SAP IQのための容易なインストーラー - 「Q」
列指向データベースでもOLTPに対応したSAP Sybase IQ16の機能拡張
大量データの「圧縮率」と「ロード時間」を改善したSAP Sybase IQ16の技術解説
SAP IQ 16.1 SP05がリリースされました
SAP ASE
SAP ASE 16.0 SP03による高可用性(HA)+災害復旧(DR)の3ノードHADR
カスタム開発のアプリケーションにおけるSAP ASE Always-on機能へのDRノードの追加(パート 1)(パート 2)(パート 3)
SAP ASE 16.0 SP04の新機能
SAP ASEの新しい管理ツール「AMC」の紹介:インストール方法、メモリー管理、ワークロード分析機能、Workload AnalyzerのSSL設定について
SAP HANAプラットフォームを相互補完し進化する旧Sybase製品の今――SAP ASEとSAP IQ
SAPアプリケーション向けデータベースとしてSAP Sybase ASEが採用される理由とは
RDBMSのパフォーマンス向上の仕掛け――SAP Sybase ASE 15.7の最新アーキテクチャー解説
オンラインマニュアル:
SAP HANA Cloud
SAP HANA Cloud, Data Lake (SAP HANA DB-Managed)
SAP HANA Cloud, Data Lake (Standalone)
SAP Datasphereスペースを SAP HANA Cloud, data lakeに接続して、大量のデータを保存または利用できます。
SAP IQ
SAP SQL Anywhere(日本語)/(最新英語)
SAP ASE
SAP Community (ブログ/ Q&A) :
SAP HANA Cloud, data lake
SAP IQ
SAP SQL Anywhere (日本語ブログ一覧ページ)
SAP ASE
SAP Community Wiki:
SAP IQ
SAP SQL Anywhere
SAP ASE
sap.com 製品ページ:
SAP HANA Cloud, data lake
データレイクとは
SAP IQ
SAP SQL Anywhere(サブページ)
SAP ASE
デベロッパー向けチュートリアル
SAP HANA Cloud, data lake
その他:
SAP IQ テクニカル概要
SAP IQ 16.0 ハードウェアサイジングガイド
様々なストレージおよびネットワークテクノロジーにおける SAP IQ 16 Multiplex のパフォーマンス評価