Greenplumの手続き型プログラミング言語(2)

目次

1. PL / Rの概要

次に、Rパッケージをインストールします

2.1Greenplumデータ計算Rパッケージコレクションをインストールします

3、PL /コンテナ

3.1 PL /コンテナプログラムの実行プロセス

3.2 PL /コンテナの利点

4、付録


1. PL / Rの概要

Rは、データサイエンス(機械学習など)の分野で広く使用されているもう1つの言語です。R言語のバックグラウンドを持つデータエンジニアは、PL / Rを使用してコードを記述し、すべてのGreenplumノードで並行して実行できます。PL / Pythonと同様に、PL / Rは信頼できない手続き型プログラミング言語です。PL / Rを作成する前に、まずRインストールパッケージとPL / Rインストールパッケージをインストールする必要があります。ソフトウェアライセンスの承認関係(RとPL / RはGPL契約であり、Greenplumはそうではありません)により、Greenplum PL / RとGreenplumメインコードベースは一緒ではありませんが、次のアドレスに配置されます:https:// github .com / greenplum- db / plrコードベースには、RおよびPL / Rバイナリファイルを生成するための継続的インテグレーションコードが含まれています。リーダーはCIをデプロイしてから、RおよびPL / Rを含むgppkg形式のパッケージを生成できます。もちろん、コンパイルされたバイナリgppkgインストールパッケージをPivotalの公式Webサイトからダウンロードすることもできます。Greenplum 5.XのRのバージョンは3.3.3であり、このバージョンはテスト済みであることに注意してください。

gppkgを使用して、すべてのGreenplumノードにRおよびPL / Rパッケージをインストールします。

PL / Pythonと同様に、PL / Rを使用する前に、createlangを呼び出してpostgresデータベースにPL / Rをインストールする必要があります。

 bin]$ createlang plr -d postgres
createlang: language installation failed: ERROR:  could not open extension control file "/usr/local/greenplum-db-6.2.1/share/postgresql/extension/plr.control": No such file or directory

簡単なPL / Rの例 

PL / R関数を呼び出して指数分布表を生成する例:

PL / Rはいくつかの補助機能を提供しますが、すべてのPL / R機能がこれらの機能を必要とするわけではないため、デフォルトではインストールされません。ユーザーが必要な場合は、自分でインストールしてロードできます。これらの補助機能をインストールするためのコマンドは次のとおりです。

1回のセッションで必要な補助機能をインストールします。たとえば、次の関数を使用すると、PL / R関数でINT4OIDなどの内部TYPENAMEOIDを参照できます。

スペースの制限により、この章ではPL / Rでサポートされている機能について詳しく説明していません。興味のある読者は、次のリソースを参照してください。

  • https://gpdb.docs.pivotal.io/5180/ref_guide/extensions/pl_r.html
  • http://www.joeconway.com/doc/index.html

PL / Rを使用しなくなった場合は、次のコマンドを呼び出して、postgresデータベースから削除できます。

GreenplumパッケージからPL / Rパッケージを完全に削除する必要がある場合は、gppkgツールを呼び出して最初にPL / RおよびRgppkgパッケージを削除してから、クラスターを再始動する必要があります。

次に、Rパッケージをインストールします

2.1Greenplumデータ計算Rパッケージコレクションをインストールします

PL / Pythonのようなユーザーの便宜のために、Pivo​​talのGreenplumリリースは、一般的に使用されるデータサイエンス関連ライブラリを含むR言語パッケージも提供します。インストールとアンインストールの方法はPythonパッケージに似ているので、ここでは繰り返しません。GreenplumのPL / R関数は基本的にPostgreSQLのPL / R関数と同じです。PL/ Pythonと同様に、関数の入口と出口で型変換を提供する必要があります。また、共有データを格納する関数もサポートしています。 。といった:

Greenplum 5.Xではinstall_rcmd()関数のみが一時的にサポートされていませんが、Greenplum 6はこの関数をサポートする予定です(この関数はGreenplum 6の新しい関数複製テーブルに依存し、この関数は現在Greenplum 6コードに実装されています)

3、PL /コンテナ

PL / Containerは、Dockerコンテナーで複数のプログラミング言語UDFを実行する手続き型プログラミング言語です。ユーザーはUDFコードで構成名を設定します。構成名は、Dockerコンテナー実行イメージ、コンテナーの開始後に実行される解析プログラム(R、Python)、およびコンテナー実行時構成に対応します。現在サポートされている分析プログラミング言語はPythonとRです。機能的には、PL / ContainerのPythonおよびRプログラムは、多くのPL / PythonおよびPL / R内部関数と互換性があります。PL / Containerの現在のバージョン番号は1.2.0です。PL / ContainerはPivotalによって開発およびオープンソース化され、現在はCentOS 6、CentOS 7、RedHat Enterprise Linux 6、またはRed Hat Enterprise Linux7をサポートしています。PL / Containerを実装するための出発点は、PL / PythonとPL / Rが信頼できる手続き型プログラミング言語ではないという問題を解決することです。RまたはPythonコードを実行するためのサンドボックスを作成するのは簡単ではないため、コンテナーテクノロジを使用してシステムレベルでサンドボックスを構築することを検討しました。さらに、PL / Containerには他にもいくつかの利点がありますが、これについては後で紹介します。PL / Containerは現在、GreenplumとPostgreSQLをサポートしています。

3.1 PL /コンテナプログラムの実行プロセス

図からわかるように、さまざまな言語がさまざまな処理手順に対応しています。初期段階では、エグゼキュータはUDFコードを分析してオペレーティング環境の構成アイテムを抽出し、DockerAPIを介して対応するコンテナを起動します。コンテナが起動した後、エグゼキュータとコンテナ内のプログラムはPING / PONGハンドシェイクを通過し、IPCまたはネットワークを介して接続を確立し、プライベートプロトコルを使用して通信します。言語(PythonまたはR)に関連するコードの場合、バックエンドプログラムは、対応する言語のインタープリターを呼び出して解釈および実行し、最後に結果をエグゼキューターに返します。必要に応じて(たとえば、SPI呼び出しの場合、現時点ではバックエンドプログラムはそれを処理できません)、バックエンドプログラムは実行のためにリクエストをエグゼキュータに送り返し、結果をバックエンドに送り返します。処理プログラム。コンテナ全体のライフサイクルに注意してください。コンテナは、PL / ContainerのUDFが初めて実行されたときに開始され、エグゼキュータとの接続を確立した後、セッションが終了する(エグゼキュータプロセスが終了する)か、UDFがアクティブに終了する(終了コードはユーザー関数でアクティブに呼び出されます)。コンテナの開始と停止には一定の価格が必要になるため、これによりパフォーマンスが大幅に向上します。つまり、図の手順8〜10は、セッションが終了するまで繰り返されます。

3.2 PL /コンテナの利点

1)PL / Containerは安全な手続き型プログラミング言語です:PythonまたはRコードはDockerコンテナーで実行されるため、ユーザーはGreenplumホスト上のファイルにアクセスまたは作成することも、Greenplumデータベースに直接アクセスすることもできません。データベースの通常のユーザーは安全にアクセスできます。 RまたはPythonに基づいて関数を作成して実行します。

2)ユーザーコードエラーを十分に分離できる:これらの手続き型プログラミング言語でUDFを実行すると、ユーザーコードのバグや一部のライブラリが不安定なため、プログラムがクラッシュする場合があります。データの破損を防ぐために、Greenplumデータベースクラスターを再起動する必要がある場合があります。ユーザーのPythonまたはRコードを別のコンテナーに入れて実行すると、PythonまたはRコードを実行しているプログラムがクラッシュした場合でも、SQLクエリは、クラスターおよびクラスター内の他のセッションに影響を与えることなく、失敗を報告するだけです。

3)Python / Rマルチバージョンのサポート:PL / PythonとPL / Rが1台のマシンに同時に複数の異なるバージョンをデプロイするのは不便です。ただし、PL / Containerの場合、バージョンごとに異なるイメージを作成して、マルチバージョンのサポートを簡単に完了することができます。

4)リソース制御:Greenplumは、リソース(メモリおよびCPU)制御を実現するためのリソースグループ機能をサポートしていますが、メモリ制御の粒度については、手続き型プログラミング言語コード自体に触れることはできません。Greenplumのメモリ制御は、組み込みのメモリ割り当て(統計を含む)機能によって実現され、手続き型プログラミング言語のメモリ管理は通常、Greenplumカーネルによって認識されない言語自体によって実現されるためです。PL / Containerは、データベースエグゼキュータ部分と手続き型プログラミング言語解釈コード部分を分離します。Dockerのリソース制御により、手続き型プログラミング言語によるリソースの使用を簡単に制御できます。

5)拡張が簡単:拡張は言語レベルです。Greenplumはさまざまな言語の共通コードを抽出しようとしました。現時点で、言語のサポートを追加すると、言語自体の関連コードにさらに焦点を当てることができます。 。。もう1つの拡張機能は、バックエンドレベルです。PL / Containerコードは現在Dockerコンテナーのみをサポートしていますが、その実装はバックエンドAPIを抽象化し、PL / Containerがさまざまなインターフェースをサポートしやすくします。たとえば、コンテナを必要とせず、手続き型プログラミング言語関数を解釈するために別のプロセスのみが必要なバックエンドを作成したり(セキュリティは失われますが、ユーザーコードエラーを十分に分離できます)、コンテナベースのクラウドオペレーティングシステムを実装できます。バックエンドでは、現時点ではリソース管理制御が別の状況になります。

4、付録

参考文献

  • ❏https://gpdb.docs.pivotal.io/5190/ref_guide/extensions/pl_python.html
  • ❏https://gpdb.docs.pivotal.io/5190/ref_guide/extensions/pl_r.html
  • ❏http://www.joeconway.com/plr.html
  • ❏https://gpdb.docs.pivotal.io/5190/ref_guide/extensions/pl_container.html

 

おすすめ

転載: blog.csdn.net/MyySophia/article/details/113835841