独自の Docker を構築します
Data SDK for Python は、 Dockerfile を使用してインストールすることもできます。このテキストドキュメントには、コマンド ラインで呼び出してイメージをアセンブルするすべてのコマンドが含まれています。 Docker ビルドを使用すると、複数のコマンドライン命令を連続して実行する自動ビルドを作成できます。
前提条件
セットアップファイル
まず 、 Docker アーカイブをダウンロードし、ダウンロードしたアーカイブを解凍して、解凍したフォルダのターミナルを開きます。
Linux/MacOS の場合 :
unzip docker-files.zip
cd docker-files/
Windows の場合 :
cd docker-files\
注
このソフトウェアには、オープンソースソフトウェアの依存関係があります。この依存関係は、インストールコマンドの実行時にダウンロードおよびインストールされます。 詳細について Dockerfile
は、 zip ファイルの一部を参照してください。
資格情報ファイル () をcredentials.properties, hls_credentials.properties and settings.xml
現在のディレクトリにコピーします
Linux/MacOS の場合 :
cp ~/.here/credentials.properties .
cp ~/.here/hls_credentials.properties .
cp ~/.m2/settings.xml .
Windows の場合 :
copy %USERPROFILE%\.here\credentials.properties .
copy %USERPROFILE%\.here\hls_credentials.properties .
copy %USERPROFILE%\.m2\settings.xml .
設定ファイルを更新します
Sparkmagic 設定ファイル (spark-conf-files.zip) には、バージョン 2.11.7 の Data SDK jar が含まれています。 Data SDK JAR の最新バージョンは、 [BOM] サブセクションのこのリンクを使用して特定できます。 最新の Data SDK jar を取得するには config_file_updater.py
、次のコマンドを使用してスクリプトを実行します。
python config_file_updater.py --version <version_to_upgrade_to>
注
このスクリプトを使用するには、ローカルマシンに Python 3.7 以降が必要です。
イメージを作成します
Docker イメージを構築します。
docker build -t olp-sdk-for-python-1.12 --rm .
注
考慮されているデフォルトの Docker イメージ名は OLP-SDK-for-python-1.12です。変更してイメージを作成または更新する場合は、コマンドで名前を指定します。
```bash
docker build -t <yourimagename> --rm .
```
イメージを実行します
コンテナでイメージを実行するには、次の手順を実行します。
docker run -p 8080:8080 -p 8998:8998 -it olp-sdk-for-python-1.12
注
-
コンテナを終了または再起動すると、すべての変更が失われます。 変更内容を保持するには、 Docker ボリュームマウントを使用して別のディレクトリをコンテナにマウントするのが最も一般的な方法です。
docker run -v <host_src>:<container_directory_to_mount> -p 8080:8080 -p 8998:8998 -it olp-sdk-for-python-1.12
-
ローカル Spark の ivy キャッシュ jar を保持する例を示します。 Linux の場合 :
docker run -v ~/.ivy2:/home/here/.ivy2 -p 8080:8080 -p 8998:8998 -it olp-sdk-for-python-1.12
Windows の場合 :
docker run -v %USERPROFILE%\.ivy2:/home/here/.ivy2 -p 8080:8080 -p 8998:8998 -it olp-sdk-for-python-1.12
チュートリアルノートブック
ブラウザで出力 Jupyter URL を開き、サンプルノートブックを実行します。
SDK に含まれているチュートリアルノートブックは、次のフォルダーにあります。
$HOME/olp-sdk-for-python-1.12/tutorial-notebooks/python
。
「はじめに」ノートブックを参照して、すべてのチュートリアルノートブックの概要を確認することをお勧めします。
$HOME/olp-sdk-for-python-1.12/tutorial-notebooks/GettingStarted.ipynb
API レファレンス (英語)
次の場所にある HTML ドキュメントを開き、 Data SDK for Python API リファレンス を参照します。
$HOME/olp-sdk-for-python-1.12/documentation/Data SDK for Python API Reference.html
。
注
このドキュメントは、 Jupyter または Internet Explorer ではなく、 Chrome および Firefox ブラウザで直接開くことをお勧めします。
イメージの実行をカスタマイズしました
コンテナ内でイメージを実行するには、次のコマンドを使用します。
docker run -p 8080:8080 -p 8998:8998 -it olp-sdk-for-python-1.12 /bin/bash
注
-
コンテナを終了または再起動すると、すべての変更が失われます。 変更内容を保持するには、 Docker ボリュームマウントを使用して別のディレクトリをコンテナにマウントするのが最も一般的な方法です。
docker run -v <host_src>:<container_directory_to_mount> -p 8080:8080 -p 8998:8998 -it olp-sdk-for-python-1.12 /bin/bash
-
ローカル Spark の ivy キャッシュ jar を保持する例を示します。 Linux の場合 :
docker run -v ~/.ivy2:/home/here/.ivy2 -p 8080:8080 -p 8998:8998 -it olp-sdk-for-python-1.12 /bin/bash
Windows の場合 :
docker run -v %USERPROFILE%\.ivy2:/home/here/.ivy2 -p 8080:8080 -p 8998:8998 -it olp-sdk-for-python-1.12 /bin/bash
conda 環境をアクティブ化します。
source activate olp-sdk-for-python-1.12-env
ホームディレクトリに移動し、 Jupyter の起動に進みます。
cd ~/
jupyter notebook --NotebookApp.iopub_data_rate_limit=1000000000 --ip=0.0.0.0 --port=8080
ジュピターラボ
「クラシック」な Jupyter ノートブックではなく、 JupyterLab の「デスクトップ」で作業している場合は、次のコマンドを使用して Jupyter を起動します。
cd ~/
jupyter lab --NotebookApp.iopub_data_rate_limit=1000000000 --ip=0.0.0.0 --port=8080
JupyterLab では、いくつかの JupyterLab 拡張機能を追加インストールすることでメリットが得られます。 これらのファイルは、頻繁に使用される形式 ( など ) でファイルをレンダリングします HTML または GeoJSON )、またはジュテララボ内の一部の計算済み出力 ( リーフレットマップセルなど )
jupyter labextension install @mflevine/jupyterlab_html
jupyter labextension install @jupyterlab/geojson-extension
jupyter labextension install jupyter-leaflet
jupyter labextension install @jupyter-widgets/jupyterlab-manager
また、対話型 の Extension Manager を使用して、 JupyterLab 内にインストールすることもできます。
Spark を使用した Docker ( 廃止 )
次のコマンドを使用して、 Livy サーバーを起動できます。
~/livy/bin/livy-server start
Livy サーバーは、デフォルトでオン localhost:8998
になっています。 次のコマンドを実行すると、停止できます。
~/livy/bin/livy-server stop
チュートリアルノートブック
Spark のチュートリアルノートブックは、フォルダー : $HOME/olp-sdk-for-python-1.12/tutorial-notebooks/spark
にあり ます。
EMR Spark クラスタ ( 非推奨 )
emr.env
AWS とリポジトリ資格情報を提供するファイルを編集します。
vi ~/.here/emr/emr.env
export DEFAULT_AWS_ACCESS_KEY="your AWS access key"
export DEFAULT_AWS_ACCESS_KEY_SECRET="your AWS access key secret"
export DEFAULT_HERE_USER="your HERE maven repository user"
export DEFAULT_HERE_PASSWORD="your HERE maven repository password"
export DEFAULT_EMR_CORES="2"
export DEFAULT_EMR_VERSION="emr-5.24.0"
export DEFAULT_EMR_MASTER_TYPE="m4.large"
export DEFAULT_EMR_WORKER_TYPE="m4.2xlarge"
export DEFAULT_TAG_TEAM="My Team"
export DEFAULT_TAG_PROJECT="My Project"
export DEFAULT_TAG_OWNER="Me"
export DEFAULT_TAG_ENV="PoC"
export DEFAULT_AWS_REGION="us-east-2"
EMR クラスタをプロビジョニングします。
emr-provision -ns <custom-single-word>
注
<custom-single-word>
は、衝突を避けるために AWS リソース名に追加されたサフィックスです。 英数字とハイフンのみを使用できます。
- Docker コンテナを終了する前に、クラスタのプロビジョニングを解除して、使用されていないインフラストラクチャの料金が請求されないようにしてください。
- コンテナを終了すると、 Docker コンテナの状態が失われます。 このため、終了して再実行した後では、プロビジョニングを解除できません。 問題が発生した場合は、 AWS コンソールを使用して AWS リソースを削除できます。
プロビジョニングが成功すると、次のようなメッセージが表示されます。
Apply complete! Resources: 20 added, 0 changed, 0 destroyed.
Outputs:
emr_master_public_dns = ec2-3-16-25-189.us-east-2.compute.amazonaws.com
Environment up and running, fully operational!
Access your Livy session list here:
>> http://ec2-3-16-25-189.us-east-2.compute.amazonaws.com:8998
Access the YARN Resource Manager here:
>> http://ec2-3-16-25-189.us-east-2.compute.amazonaws.com:8088
You can use this bucket to upload and process data
>> s3://spark-emrlab-bucket-lab
Jupyter でノートブックを作成し、 Python3 カーネルのいずれかを選択して、次のセルを追加します。
セル 1
%load_ext sparkmagic.magics
セル 2
%%spark config
{
"driverMemory": "2G",
"executorMemory": "4G",
"executorCores": 2,
"conf": {
"spark.scheduler.mode": "FAIR",
"spark.executor.instances": 2,
"spark.dynamicAllocation.enabled": "true",
"spark.shuffle.service.enabled": "true",
"spark.dynamicAllocation.executorIdleTimeout": "60s",
"spark.dynamicAllocation.cachedExecutorIdleTimeout": "60s",
"spark.dynamicAllocation.minExecutors": 1,
"spark.dynamicAllocation.maxExecutors": 4,
"spark.dynamicAllocation.initialExecutors": 1,
"spark.jars.ivySettings": "/var/lib/spark/.here/ivy.settings.xml",
"spark.driver.userClassPathFirst": "false",
"spark.executor.userClassPathFirst": "false",
"spark.jars.packages": "com.here.olp.util:mapquad:4.0.13,com.here.platform.location:location-compilation-core_2.11:0.11.156,com.here.platform.location:location-core_2.11:0.11.156,com.here.platform.location:location-inmemory_2.11:0.11.156,com.here.platform.location:location-integration-here-commons_2.11:0.11.156,com.here.platform.location:location-integration-optimized-map_2.11:0.11.156,com.here.platform.location:location-data-loader-standalone_2.11:0.11.156,com.here.platform.location:location-spark_2.11:0.11.156,com.here.platform.location:location-compilation-here-map-content_2.11:0.11.156,com.here.platform.location:location-examples-utils_2.11:0.4.115,com.here.schema.sdii:sdii_archive_v1_java:1.0.0-20171005-1,com.here.sdii:sdii_message_v3_java:3.3.2,com.here.schema.rib:lane-attributes_v2_scala:2.8.0,com.here.schema.rib:road-traffic-pattern-attributes_v2_scala:2.8.0,com.here.schema.rib:advanced-navigation-attributes_v2_scala:2.8.0,com.here.schema.rib:cartography_v2_scala:2.8.0,com.here.schema.rib:adas-attributes_v2_scala:2.8.0,com.typesafe.akka:akka-actor_2.11:2.5.11,com.beachape:enumeratum_2.11:1.5.13,com.github.ben-manes.caffeine:caffeine:2.6.2,com.github.cb372:scalacache-caffeine_2.11:0.24.3,com.github.cb372:scalacache-core_2.11:0.24.3,com.github.os72:protoc-jar:3.6.0,com.google.protobuf:protobuf-java:3.6.1,com.here.platform.data.client:blobstore-client_2.11:0.1.833,com.here.platform.data.client:spark-support_2.11:0.1.833,com.iheart:ficus_2.11:1.4.3,com.typesafe:config:1.3.3,org.apache.logging.log4j:log4j-api-scala_2.11:11.0,org.typelevel:cats-core_2.11:1.4.0,org.typelevel:cats-kernel_2.11:1.4.0,org.apache.logging.log4j:log4j-api:2.8.2,com.here.platform.data.client:data-client_2.11:0.1.833,com.here.platform.data.client:client-core_2.11:0.1.833,com.here.platform.data.client:hrn_2.11:0.1.614,com.here.platform.data.client:data-engine_2.11:0.1.833,com.here.platform.data.client:blobstore-client_2.11:0.1.833,com.here.account:here-oauth-client:0.4.14,com.here.platform.analytics:spark-ds-connector-deps_2.11:0.6.15,com.here.platform.analytics:spark-ds-connector_2.11:0.6.15",
"spark.jars.excludes": "com.here.*:*_proto,org.json4s:*,org.apache.spark:spark-core_2.11,org.apache.spark:spark-sql_2.11,org.apache.spark:spark-streaming_2.11,org.apache.spark:spark-launcher_2.11,org.apache.spark:spark-network-shuffle_2.11,org.apache.spark:spark-unsafe_2.11,org.apache.spark:spark-network-common_2.11,org.apache.spark:spark-tags_2.11,org.scala-lang:scala-library,org.scala-lang:scala-compiler,org.scala-lang.modules:scala-parser-combinators_2.11,org.scala-lang.modules:scala-java8-compat_2.11,org.scala-lang:scala-reflect,org.scala-lang:scalap,com.fasterxml.jackson.core:jackson-*"
}
}
セル 3
%spark add -s scala-spark -l scala -u <PUT YOUR LIVY ENDPOINT HERE> -k
%spark add -s pyspark -l python -u <PUT YOUR LIVY ENDPOINT HERE> -k
注
EMR では、ノートブック内のプラットフォームデータを読み取るために資格情報を明示的に提供する必要があります。 ジョブを送信するには、アプリ ID とキーシークレットが必要です。
資格情報を使用します
Scala
%%spark
val accessKeyId = "<Your Access Key ID>"
val accessKeySecret = "<Your Access Key Secret>"
val layerHRN = "<Some Layern HRN>"
val df = spark.read.option( "partitions", 900)
.option("parallelism", 4)
.option("accesskeyid", accessKeyId)
.option("accesskeysecret", accessKeySecret)
.ds(layerHRN)
PySpark
%%spark
accessKeyId = "<Your Access Key ID>"
accessKeySecret = "<Your Access Key Secret>"
layerHRN = "<Some Layern HRN>"
df = spark.read.format("com.here.platform.analytics.ds")
.option("partitions", 900)
.option("parallelism", 4)
.option("accesskeyid", accessKeyId)
.option("accesskeysecret", accessKeySecret)
.option("layerhrn", layerHRN)
.load()
ジョブのコーディングを開始します。
作業が完了したら、クラスタを破壊して、使用されていないインフラストラクチャの料金が請求されないようにします。
emr-deprovision
ディープデバッグ
既定では、インターネットアクセスは、 Livy および YARN リソース管理者のエンドポイントにのみ制限されています。 クラスタログを参照して内部ノードマシンにアクセスする場合は、 SSH トンネルを開いて接続する必要があります。 新しいクラスタを展開すると、 SSH トンネルを開くためのスクリプトコマンドが作成されます。
$ cd ~/.here/emr
$ ./emr-tunnel.sh
次に、 Web ブラウザに Foxy プロキシをインストールする必要があります。
Web ブラウザに応じて、次のファイルパスで提供されている Foxy プロキシ設定をロードします。
- Chrome の場合 :
~/anaconda3/envs/<your_env>/lib/olp-emr/util/foxy-proxy-chrome.xml
- Firefox の場合 :
~/anaconda3/envs/<your_env>/lib/olp-emr/util/foxy-proxy-firefox.json
最後に、すべての URL またはパターンに基づいて、 Foxy プロキシをアクティブ化できます(手順については、 Foxy プロキシを参照してください)。 これで、 Web ブラウザ経由で内部マシンのエンドポイントにアクセスできるようになります。
チュートリアルノートブック
EMR のチュートリアル・ノートブックは 、以下のフォルダーにあります。
$HOME/olp-sdk-for-python-1.12/tutorial-notebooks/emr
。
HERE Data SDK for Python をお選びいただきありがとうございます。 設定後、この 1 分間の簡単な調査に記入して、セットアップ体験の改善に役立ててください。