2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft Azure TechAdvent Calendar 2022

Day 15

自前の R パッケージを Azure Synapse Analytics Apache Spark プール のワークスペースパッケージとして使用する

Posted at

本記事執筆時点ではパブリックプレビューですが、 Azure Synapse AnalyticsApache Spark プール では Python (PySpark), Scala, C# (.NET Spark), SQL だけでなく、R言語 (SparkR) も使用することができます。Apache Spark のバージョンとしては 3 以上で利用でき、本記事執筆時点で利用可能なバージョンは 3.1, 3.2, 3.3 (プレビュー) の 3 種類です。

Apache Spark プールで R のパッケージを利用する方法は 2 通りです。

  1. ノートブック セッション パッケージ
  2. ワークスペース パッケージ

前者の方が一時的なもので、後者の方が恒久的なものです。

なお、Python の場合は上記以外に Spark プール パッケージ という方法もあり、上記の中だと中間に位置します。

ノートブック セッション パッケージ の方が簡単です。ノートブックのセル内で

install.packages("パッケージ名")

と実行すれば、CRAN (Comprehensive R Archive Network) から依存関係も含めてパッケージをダウンロードし、コンパイル等してインストールしてくれます。フィーリングとしては Gentoo LinuxPortage に似ていると思います。また、上記以外にも devtools が利用可能です。

ただ、ノートブック セッション パッケージ はお手軽である反面、Spark のセッションが終了したらインストールしたパッケージも消えてしまうのがデメリットです。CRAN からのインストールの際にアーキテクチャに合ったバイナリをインストールしてくれれば早いのですが、そうではなく逐一コンパイルをするため、R パッケージのインストールには時間がかかります。

一方、ワークスペース パッケージ を利用すれば、Spark のセッションが終了しても、Spark クラスターにパッケージがインストールされたままとなります。こちらの方が良さそうに見えますが、デメリットとしては、依存関係が解決されないことです。

本記事では、前提となる環境構築手順を示した上で、R をワークスペース パッケージ として利用する際の失敗例と、問題の解決方法を示します。長くなるので、最初から解決方法を見ていただいても構いません。
なお、サンプルとして利用する R パッケージは C50 とします。

環境構築

Apache Spark プールにクラスターを作成します。

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00001.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00002.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00003.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00004.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00005.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00006.png

失敗例

まず、ワークスペース パッケージに C50 を登録します。

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00007.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00008.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00009.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00010.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00011.png

ワークスペース パッケージ として C50 を登録できたので、次は Apache Spark クラスターにこれをインストールするため、ワークスペース パッケージ から選択を行います。

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00012.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00013.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00014.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00015.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00016.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00017.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00018.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00019.png

ここで、インストールには時間がかかるので、気長に待ちます。

そして、インストールは失敗します。エラーは以下の通りです。

ProxyLivyApiAsyncError
LibraryManagement - Spark Job for Small3NodesNoAS in workspace workshop-demo-for-ricoh in subscription ********-****-****-****-************ failed with status: 
{"id":2,"appId":"application_1671094646994_0001","appInfo":{"driverLogUrl":"http://vm-44405081:8042/node/containerlogs/container_1671094646994_0001_01_000001/trusted-service-user","sparkUiUrl":"http://vm-44405081:8088/proxy/application_1671094646994_0001/","isSessionTimedOut":null,"isStreamingQueryExists":"false","impulseErrorCode":"Spark_Ambiguous_NonJvmUserApp_ExitWithStatus1","impulseTsg":null,"impulseClassification":"Ambiguous"},"state":"dead","log":["In install.packages(\"C50\", contriburl = \"file://usr/lib/library-manager/bin/lmjob/Small3NodesNoAS/libraries/R/\") :","  installation of package ‘C50’ had non-zero exit status","22/12/15 08:59:39 INFO ","22/12/15 08:59:39 INFO Ran Rscript -e 'install.packages(\"C50\", contriburl=\"file://usr/lib/library-manager/bin/lmjob/Small3NodesNoAS/libraries/R/\")' successfully","22/12/15 08:59:39 INFO Running Rscript -e 'library(\"C50\")'","Error in library(\"C50\") : there is no package called ‘C50’","Execution halted","22/12/15 08:59:40 ERROR b''","22/12/15 08:59:40 INFO Cleanup following folders and files from staging directory:","22/12/15 08:59:40 INFO Staging directory cleaned up successfully"],"registeredSources":null}

ノートブックを作成し、パッケージを呼び出してみます。

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00020.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00021.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00022.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00023.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00024.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00025.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00026.png

インストールされているパッケージの一覧に C50 はありません。

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00027.png

そして、パッケージを呼び出そうとするとエラーになりました。

解決方法

パッケージの依存関係を解決します。

ただ、依存関係を特定した上で、当該 Apache Spark クラスターのノードにどのパッケージがインストール済みか(※)、そしてそれぞれの依存パッケージのバージョンがインストールしようとしているパッケージの要件を満たしているか、確認するのは大変です。

※例えば Spark 3.3 ランタイムであれば、インストール済みのパッケージのリストは こちら にあります。

そこで、いったん ノートブック セッション パッケージ として依存関係を含めて目当てのパッケージをインストールし、そのログから ワークスペース パッケージ としてインストールする際に必要な依存パッケージを特定すると、誰でも簡単にこの問題を解決することができます。

その流れを以下に示します。

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00028.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00029.png

install.packages("C50") の出力には以下のような文字列が含まれています。

also installing the dependencies ‘libcoin’, ‘mvtnorm’, ‘Formula’, ‘inum’, ‘partykit’, ‘Cubist’

trying URL 'https://cloud.r-project.org/src/contrib/libcoin_1.0-9.tar.gz'
Content type 'application/x-gzip' length 992315 bytes (969 KB)
==================================================
downloaded 969 KB

trying URL 'https://cloud.r-project.org/src/contrib/mvtnorm_1.1-3.tar.gz'
Content type 'application/x-gzip' length 166421 bytes (162 KB)
==================================================
downloaded 162 KB

trying URL 'https://cloud.r-project.org/src/contrib/Formula_1.2-4.tar.gz'
Content type 'application/x-gzip' length 164214 bytes (160 KB)
==================================================
downloaded 160 KB

trying URL 'https://cloud.r-project.org/src/contrib/inum_1.0-4.tar.gz'
Content type 'application/x-gzip' length 12142 bytes (11 KB)
==================================================
downloaded 11 KB

trying URL 'https://cloud.r-project.org/src/contrib/partykit_1.2-16.tar.gz'
Content type 'application/x-gzip' length 2121360 bytes (2.0 MB)
==================================================
downloaded 2.0 MB

trying URL 'https://cloud.r-project.org/src/contrib/Cubist_0.4.1.tar.gz'
Content type 'application/x-gzip' length 1523257 bytes (1.5 MB)
==================================================
downloaded 1.5 MB

trying URL 'https://cloud.r-project.org/src/contrib/C50_0.1.7.tar.gz'
Content type 'application/x-gzip' length 304504 bytes (297 KB)
==================================================
downloaded 297 KB

Loading required package: usethis
* installing *source* package ‘mvtnorm’ ...
** package ‘mvtnorm’ successfully unpacked and MD5 sums checked
** using staged installation

そして、出力は

* DONE (C50)

The downloaded source packages are in
	‘/tmp/RtmplbLWPy/downloaded_packages’
[notebook] install.packages pkgs=C50 cost [101s] time:2022-12-15 16:08:45

という形でエラー無く DONE となっており、library() の結果に C50 は含まれていますし、

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00030.png

library(C50) でパッケージの読み込みもできます。

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00031.png

ワークスペース パッケージ としてパッケージをインストールする際に同時に必要となる依存パッケージは、上記の出力に含まれる .tar.gz の URI から wget 等でダウンロードしてくれば良いのです。

そして、Apache Spark プールのクラスターに、ワークスペース パッケージ からインストールを行います。

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00032.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00033.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00034.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00035.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00036.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00037.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00038.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00039.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00040.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00041.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00042.png

インストールに成功しました。それでは、ワークスペース パッケージ からインストールしたパッケージを、ノートブックから呼び出してみましょう。

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00043.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00044.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00045.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00046.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00047.png

成功です。

最後に、セッションを一度終了しても、ワークスペース パッケージ としてインストールされたパッケージが再度利用できることを確認しておきましょう。

Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00048.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00049.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00050.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00051.png
Use-your-own-R-packages-as-workspace-ones-on-Azure-Synapse-Analytics-Apache-Spark-Pool-00052.png

問題ありません。これで、Apache Spark クラスターとのセッション状態とは関係無く、R パッケージを恒久的に利用できるようになりました。

まとめ

Azure Synapse AnalyticsApache Spark プール で R言語を利用する場合、かつ自前のパッケージをインストールしたり ワークスペース パッケージ を利用する場合に、自分で依存関係を解決する方法を解説しました。

少し回り道にはなりますが、一度 ノートブック セッション パッケージ として CRAN 等を使ってインストールすることで、依存パッケージをバージョンや URI も含めて特定することができ、誰でも簡単に R パッケージのインストールを恒久化することができます。

Azure Synapse Analytics 上で R によるデータ分析をゴリゴリやる方には必須知識だと思いますので、ぜひお役立てください。

See also

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?