LoginSignup
2
1

More than 3 years have passed since last update.

だいたいゼロから始めるApache Zeppelin(設定編)

Last updated at Posted at 2020-01-20

シリーズのリンク

  1. 機能紹介編(一度はお読みください)
  2. インストール・起動・停止編
  3. 設定編
  4. Sparkインタープリタ編
  5. その他インタープリタ編(予定)

要約

  • リッスンするポートやノートブック保存先などの
    Apache Zeppelin自体の設定は環境変数またはJavaプロパティの変更によって行う。
  • 依存するライブラリの指定などのインタープリタの設定は
    Apache Zeppelinの設定画面から行う。

設定の種類

Apache Zeppelinでの設定対象は大きく分けて下記の2つに分けられます。

  • Apache Zeppelin自体
  • インタープリタ

Apache Zeppelin自体の設定は下記の2つの内容を変更することで行います。

  • 環境変数
  • Javaプロパティ

上記それぞれを下記の設定ファイルに定義するのが良いかと思います。

設定方法 コピー元ファイル 設定ファイル(コピーしたファイルをリネームする)
環境変数変更 conf/zeppelin-env.sh.template conf/zeppelin-env.sh
Javaプロパティ変更 conf/zeppelin-site.xml.template conf/zeppelin-site.xml

Apache Zeppelin自体の共通の設定方法

前述しました通りApache Zeppelin自体の設定は
環境変数かJavaプロパティを変更することで行います。
これらを変更後にApache Zeppelinを再起動することで設定を反映できます。

環境変数

環境変数は下記のようにconf/zeppelin-env.sh
各環境変数に付けられたコメントアウトを外しつつ値を設定します。

conf/zeppelin-env.sh
# 設定前
# export ZEPPELIN_PORT                          # port number to listen (default 8080)

# 設定後
export ZEPPELIN_PORT=8888                       # port number to listen (default 8080)

Javaプロパティ

Javaプロパティは下記のようにconf/zeppelin-site.xml
各要素property内の要素valueの値を設定します
(propertyがコメントアウトされていれば外します)。

conf/zeppelin-site.xml
<!-- 設定前 -->
<!--
<property>
  <name>zeppelin.notebook.s3.kmsKeyRegion</name>
  <value>us-east-1</value>
  <description>AWS KMS key region in your AWS account</description>
</property>
-->

<!-- 設定後 -->
<property>
  <name>zeppelin.notebook.s3.kmsKeyRegion</name>
  <value>ap-northeast-1</value>
  <description>AWS KMS key region in your AWS account</description>
</property>

ノートブック保存先設定

ここからは特記すべき設定について説明していきます。
まずはノートブックの保存先です。
ノートブックの保存先は環境変数ZEPPELIN_NOTEBOOK_STORAGE
Javaプロパティzeppelin.notebook.storage
下記のようにストレージに対応するクラスをFQCNで指定することで変更できます。
デフォルトはGitのローカルリポジトリである
org.apache.zeppelin.notebook.repo.GitNotebookRepoです。

ストレージ FQCN
Gitローカルリポジトリ org.apache.zeppelin.notebook.repo.GitNotebookRepo
ローカルファイルシステム org.apache.zeppelin.notebook.repo.VFSNotebookRepo
HDFS org.apache.zeppelin.notebook.repo.FileSystemNotebookRepo
Amazon S3 org.apache.zeppelin.notebook.repo.S3NotebookRepo
Azure Storage org.apache.zeppelin.notebook.repo.AzureNotebookRepo
Google Cloud Storage org.apache.zeppelin.notebook.repo.GCSNotebookRepo
MongoDB org.apache.zeppelin.notebook.repo.MongoNotebookRepo
GitHub org.apache.zeppelin.notebook.repo.GitHubNotebookRepo

これらのうちAmazon S3とGoogle Cloud Storage、GitHubを
ストレージにする場合の設定方法について説明していきます。

Amazon S3

あらかじめ下記のものを用意する必要があります。

  • AWS CLIで用いられる認証プロファイル.aws/credentials
  • URLがs3://(バケット名)/(任意のユーザ名)/である S3フォルダ

下記のようにS3フォルダのURLを構成するバケット名と任意のユーザ名と
ストレージに対応するクラスをFQCNを設定します。

conf/zeppelin-env.sh
# 設定前
# export ZEPPELIN_NOTEBOOK_S3_BUCKET        # Bucket where notebook saved
# export ZEPPELIN_NOTEBOOK_S3_ENDPOINT      # Endpoint of the bucket
# export ZEPPELIN_NOTEBOOK_S3_USER          # User in bucket where notebook saved. For example bucket/user/notebook/2A94M5J1Z/note.json
(中略)
# export ZEPPELIN_NOTEBOOK_STORAGE              # Refers to pluggable notebook storage class, can have two classes simultaneously with a sync between them (e.g. local and remote).

# 設定後
export ZEPPELIN_NOTEBOOK_S3_BUCKET=(バケット名) # Bucket where notebook saved
# export ZEPPELIN_NOTEBOOK_S3_ENDPOINT      # Endpoint of the bucket
export ZEPPELIN_NOTEBOOK_S3_USER=(任意のユーザ名) # User in bucket where notebook saved. For example bucket/user/notebook/2A94M5J1Z/note.json
(中略)
export ZEPPELIN_NOTEBOOK_STORAGE=org.apache.zeppelin.notebook.repo.S3NotebookRepo              # Refers to pluggable notebook storage class, can have two classes simultaneously with a sync between them (e.g. local and remote).

もしくは

conf/zeppelin-site.xml
<!-- 設定前 -->
<!-- Amazon S3 notebook storage -->
<!-- Creates the following directory structure: s3://{bucket}/{username}/{notebook-id}/note.json -->
<!--
<property>
  <name>zeppelin.notebook.s3.user</name>
  <value>user</value>
  <description>user name for s3 folder structure</description>
</property>

<property>
  <name>zeppelin.notebook.s3.bucket</name>
  <value>zeppelin</value>
  <description>bucket name for notebook storage</description>
</property>

<property>
  <name>zeppelin.notebook.s3.endpoint</name>
  <value>s3.amazonaws.com</value>
  <description>endpoint for s3 bucket</description>
</property>

<property>
  <name>zeppelin.notebook.storage</name>
  <value>org.apache.zeppelin.notebook.repo.S3NotebookRepo</value>
  <description>notebook persistence layer implementation</description>
</property>
-->

<!-- 設定後 -->
<!-- Amazon S3 notebook storage -->
<!-- Creates the following directory structure: s3://{bucket}/{username}/{notebook-id}/note.json -->
<property>
  <name>zeppelin.notebook.s3.user</name>
  <value>(任意のユーザ名)</value>
  <description>user name for s3 folder structure</description>
</property>

<property>
  <name>zeppelin.notebook.s3.bucket</name>
  <value>(バケット名)</value>
  <description>bucket name for notebook storage</description>
</property>

<property>
  <name>zeppelin.notebook.s3.endpoint</name>
  <value>s3.amazonaws.com</value>
  <description>endpoint for s3 bucket</description>
</property>

<property>
  <name>zeppelin.notebook.storage</name>
  <value>org.apache.zeppelin.notebook.repo.S3NotebookRepo</value>
  <description>notebook persistence layer implementation</description>
</property>

上記を設定する場合はconf/zeppelin-site.xml内の
デフォルトであるGitNotebookRepoのものをコメントアウトする必要があります。

conf/zeppelin-site.xml
<!--
<property>
  <name>zeppelin.notebook.storage</name>
  <value>org.apache.zeppelin.notebook.repo.GitNotebookRepo</value>
  <description>versioned notebook persistence layer implementation</description>
</property>
-->

Google Cloud Storage

あらかじめ下記のものを用意する必要があります。

下記のようにconf/zeppelin-env.shの環境変数GOOGLE_APPLICATION_CREDENTIALS
上記のサービスアカウントキーへのパスを設定します。

conf/zeppelin-env.sh
# 設定前
# export GOOGLE_APPLICATION_CREDENTIALS         # Provide a service account key file for GCS and BigQuery API calls (overrides application default credentials)

# 設定後
export GOOGLE_APPLICATION_CREDENTIALS=(サービスアカウントキーへのパス)         # Provide a service account key file for GCS and BigQuery API calls (overrides application default credentials)

下記のようにGoogle Cloud StorageフォルダのURLとストレージに対応するクラスをFQCNを設定します。

conf/zeppelin-env.sh
# 設定前
# export ZEPPELIN_NOTEBOOK_GCS_STORAGE_DIR      # GCS "directory" (prefix) under which notebooks are saved. E.g. gs://example-bucket/path/to/dir
(中略)
# export ZEPPELIN_NOTEBOOK_STORAGE              # Refers to pluggable notebook storage class, can have two classes simultaneously with a sync between them (e.g. local and remote).

# 設定後
export ZEPPELIN_NOTEBOOK_GCS_STORAGE_DIR=(Google Cloud StorageフォルダのURL)      # GCS "directory" (prefix) under which notebooks are saved. E.g. gs://example-bucket/path/to/dir
(中略)
export ZEPPELIN_NOTEBOOK_STORAGE=org.apache.zeppelin.notebook.repo.GCSNotebookRepo              # Refers to pluggable notebook storage class, can have two classes simultaneously with a sync between them (e.g. local and remote).

もしくは

conf/zeppelin-site.xml
<!-- 設定前 -->
<!-- Google Cloud Storage notebook storage -->
<!--
<property>
  <name>zeppelin.notebook.gcs.dir</name>
  <value></value>
  <description>
    A GCS path in the form gs://bucketname/path/to/dir.
    Notes are stored at {zeppelin.notebook.gcs.dir}/{notebook-id}/note.json
 </description>
</property>

<property>
  <name>zeppelin.notebook.storage</name>
  <value>org.apache.zeppelin.notebook.repo.GCSNotebookRepo</value>
  <description>notebook persistence layer implementation</description>
</property>
-->

<!-- 設定後 -->
<!-- Google Cloud Storage notebook storage -->
<property>
  <name>zeppelin.notebook.gcs.dir</name>
  <value>(Google Cloud StorageフォルダのURL)</value>
  <description>
    A GCS path in the form gs://bucketname/path/to/dir.
    Notes are stored at {zeppelin.notebook.gcs.dir}/{notebook-id}/note.json
 </description>
</property>

<property>
  <name>zeppelin.notebook.storage</name>
  <value>org.apache.zeppelin.notebook.repo.GCSNotebookRepo</value>
  <description>notebook persistence layer implementation</description>
</property>

S3と同様に上記を設定する場合はconf/zeppelin-site.xml内の
デフォルトであるGitNotebookRepoのものをコメントアウトする必要があります。

conf/zeppelin-site.xml
<!--
<property>
  <name>zeppelin.notebook.storage</name>
  <value>org.apache.zeppelin.notebook.repo.GitNotebookRepo</value>
  <description>versioned notebook persistence layer implementation</description>
</property>
-->

GitHub

あらかじめ下記のものを用意する必要があります。

下記のようにconf/zeppelin-site.xmlにGitHubリポジトリのURLとアクセストークンを設定します。

conf/zeppelin-site.xml
<!-- 設定前 -->
<!-- GitHub configurations
<property>
  <name>zeppelin.notebook.git.remote.url</name>
  <value></value>
  <description>remote Git repository URL</description>
</property>

<property>
  <name>zeppelin.notebook.git.remote.username</name>
  <value>token</value>
  <description>remote Git repository username</description>
</property>

<property>
  <name>zeppelin.notebook.git.remote.access-token</name>
  <value></value>
  <description>remote Git repository password</description>
</property>

<property>
  <name>zeppelin.notebook.git.remote.origin</name>
  <value>origin</value>
  <description>Git repository remote</description>
</property>

<property>
  <name>zeppelin.notebook.cron.enable</name>
  <value>false</value>
  <description>Notebook enable cron scheduler feature</description>
</property>
<property>
  <name>zeppelin.notebook.cron.folders</name>
  <value></value>
  <description>Notebook cron folders</description>
</property>
-->

<!-- 設定後 -->
<!-- GitHub configurations -->
<property>
  <name>zeppelin.notebook.git.remote.url</name>
  <value>(GitHubリポジトリのURL(git cloneで指定するもの))</value>
  <description>remote Git repository URL</description>
</property>

<property>
  <name>zeppelin.notebook.git.remote.username</name>
  <value>token</value>
  <description>remote Git repository username</description>
</property>

<property>
  <name>zeppelin.notebook.git.remote.access-token</name>
  <value>(アクセストークンの文字列)</value>
  <description>remote Git repository password</description>
</property>

<property>
  <name>zeppelin.notebook.git.remote.origin</name>
  <value>origin</value>
  <description>Git repository remote</description>
</property>

<property>
  <name>zeppelin.notebook.storage</name>
  <value>org.apache.zeppelin.notebook.repo.GitHubNotebookRepo</value>
  <description>versioned notebook persistence layer implementation</description>
</property>

<!--
<property>
  <name>zeppelin.notebook.cron.enable</name>
  <value>false</value>
  <description>Notebook enable cron scheduler feature</description>
</property>
<property>
  <name>zeppelin.notebook.cron.folders</name>
  <value></value>
  <description>Notebook cron folders</description>
</property>
-->

このストレージはデフォルトのストレージであるGitローカルリポジトリも有効になっています。
ノートブックの変更をコミットするとGitローカルリポジトリへ内容が反映され、
同時にGitHubリポジトリにプッシュされます。

インタープリタ設定

インタープリタ設定はホーム画面やノートブック画面の
右上にあるユーザ名がリンクとなっているメニューをクリックすることで表示される
下記画像の項目Interpreterをクリックします。
インタープリタ設定項目

使用できるインタープリタがそれなりに多いため、
遷移した画面の左上にある検索用テキストボックスに
設定対象のインタープリタの名前を入力してフィルタリングします。
インタープリタ設定画面

フィルタリング後に表示されるインタープリタの設定一覧の右上にある
ボタンeditをクリックすることで設定の編集が可能になります。
編集ボタン

ボタンをクリックすることで一覧Properties以下にある
名前が列nameである設定を列valueの入力値にすることができるようになります。
actionにあるボタンをクリックするとそれに対する設定はデフォルト値をとるようになります。
設定編集一覧

一覧Propertiesの一番下にある行にて設定を追加することができます。
下記画像のある列nameのテキストボックスに一覧にはない設定の名前、
actionにあるセレクトボックスで設定値に適切な入力タイプを指定しつつ、
valueに設定値を入力後にセレクトボックスの右隣にあるボタンをクリックすることで
この名前、値の設定を追加できます。
セレクトボックスで選択できる入力タイプは以下の通りです。

  • テキストエリア(文字列に改行を含められます)
  • 文字列
  • 数値(数字のみの文字列になります)
  • URL(編集後にリンクが生成されます)
  • パスワード(文字列が隠蔽されます)
  • チェックボックス

設定追加

一覧Dependencies以下にてインタープリタが処理するコードが依存する
ライブラリであるJarファイルを指定できます。


注意:
本来ならMavenの機能を用いるとインタープリタ再起動時に
指定されたJarファイルが自動的にダウンロードされるはずなのですが、
2020-01-15以降Mavenのセントラルリポジトリが
Apache Zeppelin内部で行っているhttpによるアクセスを受け付けなくなりました(参照)。
このような修正がなされたのですが0.8.2ではこの修正がまだマージされていないため、
代わりに依存するJarファイル等を手動でダウンロードした後で
Jarファイルへのパスを下記テキストボックスに指定する方法を取ります。


下記画像のある列artifactにMavenでのライブラリのgroupId/artifactId/versionにより
文字列(groupId):(artifactId):(version)を入力することで依存性を設定できます。
このようにすると設定保存後にJarファイルが環境に存在しなければ
インタープリタが再起動された際に自動的にダウンロードされます。
またJarファイルが既に環境にあるならばそれへのパスを指定することでも設定できます。
インタープリタ実行時にJarファイルがクラスパスに追加されます。
依存性設定

下記画像にある青いボタンSaveをクリックすることで設定の変更を保存できます。
この時設定インタープリタの再起動が自動的に行われます。
設定変更保存

その他設定(一部抜粋)

これまでの設定以外にも設定を変更する可能性が高いものを
以下に列挙していきます。

Apache Zeppelinサーバのアドレス

conf/zeppelin-env.sh
export ZEPPELIN_ADDR="192.168.0.1"                          # Bind address (default 127.0.0.1)

もしくは

conf/zeppelin-site.xml
<property>
  <name>zeppelin.server.addr</name>
  <value>192.168.0.1</value>
  <description>Server binding address</description>
</property>

Apache Zeppelinサーバのポート

conf/zeppelin-env.sh
export ZEPPELIN_PORT=18080                         # port number to listen (default 8080)

もしくは

conf/zeppelin-site.xml
<property>
  <name>zeppelin.server.port</name>
  <value>18080</value>
  <description>Server port.</description>
</property>

Apache ZeppelinサーバのJavaオプション(メモリ以外)

conf/zeppelin-env.sh
export ZEPPELIN_JAVA_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Dspark.executor.memory=8g -Dspark.cores.max=8"                     # Additional jvm options. for example, export ZEPPELIN_JAVA_OPTS="-Dspark.executor.memory=8g -Dspark.cores.max=16"

Apache ZeppelinサーバのJavaオプション(メモリ)

conf/zeppelin-env.sh
export ZEPPELIN_MEM="-Xms1024m -Xmx1024m -XX:MaxMetaspaceSize=512m"                          # Zeppelin jvm mem options Default -Xms1024m -Xmx1024m -XX:MaxPermSize=512m

インタープリタのJavaオプション(メモリ以外)

conf/zeppelin-env.sh
export ZEPPELIN_INTP_JAVA_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps"                # zeppelin interpreter process jvm options.

インタープリタのJavaオプション(メモリ)

conf/zeppelin-env.sh
export ZEPPELIN_INTP_MEM="-Xms1024m -Xmx1024m -XX:MaxMetaspaceSize=512m"                          # Zeppelin jvm mem options Default -Xms1024m -Xmx1024m -XX:MaxPermSize=512m

cronスケジューラの有効化

conf/zeppelin-site.xml
<property>
  <name>zeppelin.notebook.cron.enable</name>
  <value>true</value>
  <description>Notebook enable cron scheduler feature</description>
</property>
<property>
  <name>zeppelin.notebook.cron.folders</name>
  <value></value>
  <description>Notebook cron folders</description>
</property>

Apache Zeppelinの設定一覧はここで記載されております。

つづき

次回はSparkインタープリタ編です。

2
1
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
1