「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>Azure Databricks]] --Azure Databricksチュートリアル --[[Azure DatabricksのNotebook]] * 目次 [#w8c8f593] #contents *概要 [#m1326267] Azure Databricksのチュートリアル。 *準備 [#n68abe24] **契約 [#t42d5e96] ***[[Azureの契約>AzureのPoC環境を契約する]] [#ke36671c] ***Databricksの契約 [#cf1e6ce6] -Azureの無料試用版サブスクリプションは利用不可との事。 -ただし、Azureの従量課金制サブスクリプションで~ Databricksの14日間の無料試用版を使用可能。 --無料の Azure アカウントと Azure Databricks ユニット | Microsoft Azure~ https://azure.microsoft.com/ja-jp/free/services/databricks/ >既存のサブスクリプションで試用版を使用する場合、~ ワークスペース作成の価格レベルで試用版を選択する。 --ただし、 ---Databricksユニットには課金されないが、 ---クラスタのVMには課金されるので注意する。 **環境 [#rf9815ce] ***ワークスペース [#gd9a5060] -作成開始の方法 --ポータルで [リソースの作成] > [分析] > [Azure Databricks] の順に選択 --若しくは、[Azure Databricks | Microsoft Azure] の~ [Already an Azure customer? Get started]を押下。~ https://portal.azure.com/#create/Microsoft.Databricks -値を指定 --ワークスペース名~ mydatabrickswsとか --サブスクリプション~ 任意の値 --リソース グループ ---DplRGとか ---既定値は、ワークスペース名に、prefixとしてdatabricks-rg-が付与されたもの。~ databricksXXXと入力すると、databricks-rg-databricksXXX-XXXXになってしまう。 --場所(リージョン) ---データ・パープライン系は「West US 2」辺りが良いかも。 ---リージョン別の Azure 製品 | Microsoft Azure~ https://azure.microsoft.com/ja-jp/global-infrastructure/services/?products=databricks --価格レベル~ 試用版を選択できる。 --Virtual Network~ 以下の項目は、共に「いいえ」を選択した。 ---Secure Cluster Connectivity による...デプロイ (パブリック IP なし) ---自分の仮想ネットワーク (VNet) に...デプロイします~ -[作成]ボタンを押下~ ワークスペースの作成には数分かかる。 --「デプロイが完了しました」が表示されたら、 --[リソースに移動]ボタンを押下する。 --[ワークスペースの起動]ボタンを押下する。 --Databricks のポータル・サイトに移動する。 -エンドポイントの保護 --IPアドレス制限~ プレミアム・ライセンスが必要 --FQDN名 <databricks-instance> = adb-<workspace-id>.<random-number>.azuredatabricks.net --以下、[[Databricks CLI>#bf24b43b]]が必要 ---トークンの設定 $ export DATABRICKS_TOKEN=xxxxxx ---有効化(WSLで) $ curl -X PATCH https://<databricks-instance>/api/2.0/workspace-conf \ --header "Authorization: Bearer $DATABRICKS_TOKEN" \ -d '{ "enableIpAccessLists": "true" }' ---付与(WSLで) $ curl -X POST https://<databricks-instance>/api/2.0/ip-access-lists --header "Authorization: Bearer $DATABRICKS_TOKEN" \ -d '{ "label": "office", "list_type": "ALLOW", "ip_addresses": [ "xxx.xxx.xxx.xxx" ] }' -IaC化 --[[Azure CLI]]で~ ---現時点でクイック スタート情報なし。 --[[PowerShell]]で ---クイック スタートから、以下のように作成可能。 >Connect-AzAccount >Set-AzContext -SubscriptionId ... >Register-AzResourceProvider -ProviderNamespace Microsoft.Databricks >New-AzDatabricksWorkspace -Name [名称] -ResourceGroupName [既存のRG名] -Location [場所(リージョン)] -ManagedResourceGroupName [ManagedRG名] -Sku [sku] ---参考~ ・https://opentouryo.osscons.jp/index.php?%E9%83%A8%E4%BC%9A%E3%83%A1%E3%83%A2%EF%BC%882021%E5%B9%B4%EF%BC%89#vc306769~ ・https://github.com/OpenTouryoProject/DataPipeline/blob/develop/Batch/AzDatabricks/README.md -参考 --DatabricksへのアクセスをIP制限する - 雲のメモ帳~ https://www.cloudnotes.tech/entry/databricks_iprestrict --Azure Databricks 個人用アクセストークンを使用した認証-Azure Databricks - Workspace | Microsoft Docs~ https://docs.microsoft.com/ja-jp/azure/databricks/dev-tools/api/latest/authentication ***クラスタ [#med3ca62] 手順に従いClusterを作成する -[New Cluster]を押下 -入力 --Cluster Name : mysparkcluster --Cluster Mode : Standard --Pool : None --Runtime : 6.4 -> 7.3 LTS --Autopilot Options ---☑ Enable autoscaling ---☑ Terminate after 20 minutes of inactivity ---Worker Type~ ・Standard_DS3_v2~ ・Min Workers 2 Max Workers 8~ ・☑ Spot instances~ ・Driver Type Same as worker~ -[Create Cluster]ボタンを押下~ ※ この手順では、&color(red){クォータ制限};の問題は発生しなかった(発生した場合は[[コチラ>#h06a7649]])。 ***Notebook [#je91701c] -以下の手順に従いNotebookを作成する。 --[New Notebook]を押下 --入力 ---Name : mynotebook ---Language : Python ---Cluster : mysparkcluster --[Create]ボタンを押下 -Notebook上でインタラクティブ実行してみる。 --[[ハロー・ワールド風>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark#ffe40eef]] -参考 --[[Azure DatabricksのNotebook]] ***ツール [#bf24b43b] -Databricks CLI~ ファイル・システムにアクセスしたりする時に使う。 --Python 3.6 以降が必要 --[[Pythonのインストール>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Python#lc36d4a8]] --Databricks CLIのインストール~ pip3を使用してインストール >pip3 install databricks-cli --インストールの確認 >databricks Usage: databricks [OPTIONS] COMMAND [ARGS]... Options: -v, --version 0.14.3 ... --Databricks CLIの設定 >databricks configure --token ---ホスト URLの入力 Databricks Host (should begin with https://): https://.....azuredatabricks.net ---トークンの取得 #ref(無題1.png,left,nowrap,トークンの取得,70%) --トークンの入力 Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --以下のようになる(Tokenの所は入力が表示されない)。 >databricks configure --token Databricks Host (should begin with https://): https://.....azuredatabricks.net/ Token: > *Scala [#m5f129dc] [[Notebook>#je91701c]]のセルに記述可能。 **ETL のチュートリアル [#xf1b382e] [[参考>#j501dd8e]]中の「...データの抽出、変換、読み込みを行う」~ **Event Hubsと組み合わせるチュートリアル [#qb0fbdbe] [[参考>#j501dd8e]]中の「Event Hubs を使用して...ストリーム配信する」 **感情分析のチュートリアル [#qb0fbdbe] [[参考>#j501dd8e]]中の「Azure Databricks を使用したストリーミング データに対する感情分析」 **参考 [#w15adae9] [[Microsoft Docs>#y4d4dbfd]]、[[Qiita>#g377cc6b]] *[[Python (PySpark)>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark]] [#r15035b9] [[Notebook>#je91701c]]のセルに記述可能。 **Docsのクイック スタート [#qd3c3cb0] -[[参考>#j501dd8e]]中のクイック スタート。 -Docsの説明が雑なので以下、注釈を加えてみる。 ***Parquetファイル [#q83dd008] -CSVやTSVファイルのような行指向ファイル形式~ に対し効率的で高性能な列指向ストレージ形式。 -ダウンロード先がイマイチ不明なので、以下から取得する。~ https://github.com/Teradata/kylo/tree/master/samples/sample-data/parquet -先ずは、[[Jupyter Notebook>Azure DatabricksのNotebook#p84bd61d]]でローカルから読込。 --読込 parquet_df = spark.read.parquet("path/to/userdata1.parquet") --表示 parquet_df.show() --結果 +-------------------+---+----------+---------+--------------------+------+---------------+-------------------+--------------------+----------+---------+--------------------+--------------------+ | registration_dttm| id|first_name|last_name| email|gender| ip_address| cc| country| birthdate| salary| title| comments| +-------------------+---+----------+---------+--------------------+------+---------------+-------------------+--------------------+----------+---------+--------------------+--------------------+ |2016-02-03 16:55:29| 1| Amanda| Jordan| ajordan0@com.com|Female| 1.197.201.2| 6759521864920116| Indonesia| 3/8/1971| 49756.53| Internal Auditor| 1E+02| ... -一応、Spark SQLを実行してみる。 --Spark SQL parquet_df.createOrReplaceTempView('source') parquet_df = spark.sql('SELECT * FROM source LIMIT 10') --表示 print('Displaying top 10 rows: ') parquet_df.show() --結果~ Displaying top 10 rows: 上記が10行に絞られた結果 ***[[Azureストレージ>Azureのストレージ]]へアクセス [#l015e466] その次に、[[Azureストレージ>Azureのストレージ]]から読込んでみる。 -[[Parquetファイル>#q83dd008]]を[[Azureストレージ>Azureのストレージ]]に配置 --[[Azureストレージ>Azureのストレージ]]作成のスクリプトは[[コチラ>https://opentouryo.osscons.jp/index.php?%E9%83%A8%E4%BC%9A%E3%83%A1%E3%83%A2%EF%BC%882021%E5%B9%B4%EF%BC%89#vc306769]] --[[Parquetファイル>#q83dd008]]はポータルからアップロード可能 -[[Jupyter Notebook>Azure DatabricksのNotebook#p84bd61d]]上の[[Python (PySpark)>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark]]から読込んでみる。 --実行 from pyspark.sql import SparkSession spark: SparkSession = SparkSession.builder.appName("SimpleApp").getOrCreate() blob_account_name = "osscjpdevinfra" blob_container_name = "container1" blob_relative_path = "userdata1.parquet" blob_sas_token = r"?st=xxxxxxxxxxxxxxxxxxxx" wasbs_path = 'wasbs://%s@%s.blob.core.windows.net/%s' % (blob_container_name, blob_account_name, blob_relative_path) spark.conf.set('fs.azure.sas.%s.%s.blob.core.windows.net' % (blob_container_name, blob_account_name), blob_sas_token) print('Remote blob path: ' + wasbs_path) parquet_df = spark.read.parquet(wasbs_path) parquet_df.show() --結果~ ライブラリが足りないもよう。 Class org.apache.hadoop.fs.azure.NativeAzureFileSystem$Secure not found ***[[Azure Databricks]]上で実行 [#m6c58006] ライブラリが足りないので、[[Azure Databricks]]上で実行してみる。 -前提 --ワークスペースの作成(作成のスクリプトは[[コチラ>#gd9a5060]] --クラスタの作成(作成の手順は[[コチラ>#med3ca62]] --Notebookの作成する(作成の手順は[[コチラ>#je91701c]] -[[先程のコード>#l015e466]]を実行する。 --Clusterを開始する。 ---左上のドロップダウン・リストから作成したClusterを選択し、 ---そこから[Start Cluster]を選択して押下する。 --(先程の)コードをセルに貼り付ける。 --Shift + Enter キーを使用してコードを実行 --無事、実行されたことを確認したら~ 以下のようにコードを変更して再実行する。 ---変更前 parquet_df.show() ---変更後 display(parquet_df) --データの視覚的な表現を作成する。~ displayで表示された形式の出力の一番下から、~ [Plot Options]をクリックし、以下のようにする。 #ref(無題.png,left,nowrap,グラフ表示,50%) --Clusterを停止する。 ---Clusterを開始した際に使ったドロップダウン・リストからCluster管理画面へ飛ぶ。 ---Cluster管理画面で、Terminate or Deleteを選択する。 ---課金がアレなので、~ ・PoCならリソース・グループごと削除しておいた方が良い。~ ・と言うのも、リソース・グループを見るとClusterのリソースが大量に。 **[[PySparkチュートリアル>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark#p629aafe]] [#x3565c3a] [[クイック スタート>#qd3c3cb0]]も終わったので、[[PySparkチュートリアル>#x3565c3a]]を、Azure Databricksで動かしてみる。 ***[[on Jupyter Notebook on Docker>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark#ffe40eef]] [#r5a02814] ***[[DataFrameに対する様々な操作>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark#w64c6c2e]] [#ia077b23] **静的ファイルで構造化ストリーミングをエミュレート [#gd028138] [[databricks.comのApache Spark チュートリアル(ストリーミング)>#k666624d]]を、Azure Databricksで動かしてみる。 ***環境準備 [#t647655e] 作成のスクリプトは以下 -送信:なし -受信:[[Azure Databricks>#gd9a5060]] ***エミュレート [#c2e0e166] readStreamでinputPathをmaxFilesPerTriggerで読む...みたいな感じになる。 from pyspark.sql.functions import * # Similar to definition of staticInputDF above, just using `readStream` instead of `read` streamingInputDF = ( spark .readStream .schema(jsonSchema) # Set the schema of the JSON data .option("maxFilesPerTrigger", 1) # Treat a sequence of files as a stream by picking one file at a time .json(inputPath) ) # Same query as staticInputDF streamingCountsDF = ( streamingInputDF .groupBy( streamingInputDF.action, window(streamingInputDF.time, "1 hour")) .count() ) ***出力方法 [#r4ddc25c] インタラクティブにやる場合、 -in-memoryテーブルに名前を付け、~ query = ( streamingCountsDF .writeStream .format("memory") # memory = store in-memory table .queryName("counts") # counts = name of the in-memory table .outputMode("complete") # complete = all the counts should be in the table .start() ) -「%sql」のマジックコマンドでセレクトする。 %sql select action, date_format(window.end, "MMM-dd HH:mm") as time, count from counts order by time, action みたいな方法になる。 **[[EventHubsのKafka>Azure Event Hubsチュートリアル#od841821]]と構造化ストリーミング [#l13d0540] [[PySparkチュートリアル>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark]]中の[[構造化ストリーミング>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark#x623bccd]]の[[入力のKafka化>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark#yd135245]]ができなかった~ (コンテナのJupyter NotebookからコンテナのKafkaに接続できなかった)ので、 Azure Databricksでリトライ。 ***環境準備 [#n3bec3ce] 作成のスクリプトは以下 -送信:[[Azure Event Hubs>Azure Event Hubsチュートリアル#d5ec211f]] -受信:[[Azure Databricks>#gd9a5060]] ***送受信 [#f5fa0a25] -[[純正クライアントを使用した送信処理>Azure Event Hubsチュートリアル#saca433a]] -Azure Databricksで受信する。 --[[Azure DatabricksのCluster・Notebookを作成>#m6c58006]]する。 --[[PySparkチュートリアル中の構造化ストリーミング>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark#x623bccd]]の~ [[入力部分をKafka化>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark#yd135245]]したスクリプトを以下に書き出す。 ---ただし、[[Event HubsのKafkaエンドポイント風>.NET for Apache Sparkのデータ接続#efb0d878]]に書く。 ---パラメタは[[純正クライアントを使用した受信処理>Azure Event Hubsチュートリアル#saca433a]]を参考にする。~ (詳細不明だが、eh_saslの先頭にkafkashadedと言う文字列が必要) import sys from pyspark.sql import SparkSession from pyspark.sql.functions import explode from pyspark.sql.functions import split from pyspark.sql.functions import window bootstrapServers = "<eventhubsNameSpace>.servicebus.windows.net:9093" eh_sasl = 'kafkashaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="<primaryConnectionString>";' windowSize = 10 slideSize = 10 if slideSize > windowSize: print("<slideSize> must be less than or equal to <windowSize>", file=sys.stderr) windowDuration = '{} seconds'.format(windowSize) slideDuration = '{} seconds'.format(slideSize) spark = SparkSession\ .builder\ .appName("StructuredNetworkWordCountWindowed")\ .getOrCreate() # Create DataFrame representing the stream of input lines from kafka lines = spark \ .readStream \ .format("kafka") \ .option("kafka.bootstrap.servers", bootstrapServers) \ .option("subscribe", "test_topic") \ .option("kafka.sasl.mechanism", "PLAIN") \ .option("kafka.security.protocol", "SASL_SSL") \ .option("kafka.sasl.jaas.config", eh_sasl) \ .load() # Split the lines into words, retaining timestamps # split() splits each line into an array, and explode() turns the array into multiple rows words = lines.select( explode(split(lines.value, ' ')).alias('word'), lines.timestamp ) # Group the data by window and word and compute the count of each group windowedCounts = words.groupBy( window(words.timestamp, windowDuration, slideDuration), words.word ).count().orderBy('window') # Start running the query that prints the windowed word counts to the console query = windowedCounts\ .writeStream\ .outputMode('complete')\ .format('console')\ .option('truncate', 'false')\ .start() query.awaitTermination() -構造化ストリーミングでは(?)、~ consoleへの出力が確認できなかったので、~ インタラクティブにやる場合、 --最後を、以下のように変更し、~ (in-memoryテーブルに名前つけて) # Start running the query that prints the windowed word counts to the console query = windowedCounts\ .writeStream\ .format("memory")\ .queryName("counts")\ .outputMode("complete")\ .start() # query.awaitTermination() --%sqlのマジックコマンドでセレクトする。 %sql select * from counts **その他 [#x1c99a7c] ***KcMichael - Qiita [#a81fca8a] [[参考>#j501dd8e]]中の... ***SQL Serverと組み合わせるチュートリアル [#qb0fbdbe] [[参考>#j501dd8e]]中の「...ノートブックから...SQL Server Linux Docker コンテナーのクエリを実行する」~ **古い? [#g2030b5a] ちょっと古いのか?アカンやつ。 ***Azure Databricksを使ってみた [#hf19908a] [[参考>#j501dd8e]]中の「Azure Databricksを使ってみた」 ...ちと古いし、他にも色々アレなので、パス。 ***[[Azure Data Lake]] のチュートリアル [#gffec173] [[参考>#j501dd8e]]中の >「チュートリアル:Azure Data Lake Storage Gen2、Azure Databricks、および Spark」 ...フライト データのダウンロードができない。 **参考 [#w15adae9] [[Microsoft Docs>#h5fc34ee]]、[[Qiita>#e44d9b2a]] *.NET [#q1122d96] (.NET for Apache Spark) -[[.NET for Apache SparkガイドのGet started in 10 minutes>.NET for Apache Sparkチュートリアル]]の周辺を処理してみる。 -ビルドしたモノをZIPして、spark-submitするのでローカル環境構築が必要。 **Get started in 10 minutes [#ta98bbdc] -[[以前開発したサンプルの動作確認を行い>.NET for Apache Sparkチュートリアル#s680c185]]、 -実際に発行&アップロード&実行してみる。 ***アプリの発行 [#y0b75f0a] -ターゲットはubuntu >dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.16.04-x64 -publishしたものをpublish.zipにまとめる。~ Windowsなので、[[PowerShell]]を使用してみる。 powershell compress-archive publish ..\publish.zip ***依存関係のダウンロード [#n418b549] -依存関係ファイルをダウンロードする。 >※ URL : https://github.com/dotnet/spark/tree/master/deployment -Microsoft.Spark.Worker~ ローカル実行で使用したものに対応するLinux版の*.tar.gz~ https://github.com/dotnet/spark/releases/download/v1.0.0/Microsoft.Spark.Worker.netcoreapp3.1.linux-x64-1.0.0.tar.gz -install-worker.sh~ Apache Spark クラスタに Worker バイナリをインストール -db-init.sh --ワーカーとアプリの依存関係を Databricks Spark クラスタに インストール。 --DOTNET_SPARK_RELEASEを修正するという手順があるが、コレは不要らしい。 >※ *.shの行の終わりは Unix 形式 (LF) であることを確認~ ***ファイルのアップロード [#uee92a05] 次のファイルをアップロードする -アプリケーション --一式 ---publish.zip~ 発行したアプリ ---input.txt~ 自分は、input.txtをプロジェクト出力に含めていたのでpublishに同梱されているが、~ カレント・ディレクトリが異なるため別途アップロードが必要らしい(根拠は以下のエラー・メッセージ)。~ Microsoft.Spark.JvmException: org.apache.spark.sql.AnalysisException: Path does not exist: dbfs:/input.txt; ---microsoft-spark-2-4_2.11-1.0.0.jar~ ローカル実行で使用したもの(publish中で[[使用したバージョン>.NET for Apache Sparkチュートリアル#c8e7248e]]) --dbfsにアップロード~ [[Databricks CLI>#bf24b43b]]を使って。 databricks fs cp input.txt dbfs:/input.txt databricks fs cp publish.zip dbfs:/spark-dotnet/publish.zip databricks fs cp microsoft-spark-2-4_2.11-1.0.0.jar dbfs:/spark-dotnet/microsoft-spark-2-4_2.11-1.0.0.jar ※ input.txtがZIPに同梱されていても、カレント・ディレクトリが異なるのでアップロードが必要。 -[[依存関係>#n418b549]] --[[前述>#n418b549]]の一式 ---Microsoft.Spark.Worker ---install-worker.sh ---db-init.sh --dbfsにアップロード~ [[Databricks CLI>#bf24b43b]]を使って。 databricks fs cp Microsoft.Spark.Worker.netcoreapp3.1.linux-x64-1.0.0.tar.gz dbfs:/spark-dotnet/Microsoft.Spark.Worker.netcoreapp3.1.linux-x64-1.0.0.tar.gz databricks fs cp install-worker.sh dbfs:/spark-dotnet/install-worker.sh databricks fs cp db-init.sh dbfs:/spark-dotnet/db-init.sh -参考 --DBFS CLI-Azure Databricks - Workspace | Microsoft Docs~ https://docs.microsoft.com/ja-jp/azure/databricks/dev-tools/cli/dbfs-cli ***ジョブを作成して実行 [#a1355971] -ジョブを作成する。~ [[ワークスペース(Databricks のポータル・サイト)>#ye161f29]]の --左メニュー中の [Job] アイコンを選択し、 --次に[+ Create Job] を選択して、Job名を入力、 --以下、UIが変更されているので、以下を参考にする。 ---ジョブ - Azure Databricks | Microsoft Docs~ https://docs.microsoft.com/ja-jp/azure/databricks/jobs -spark-submitの構成~ 初めに、[Task]の[Type]を[[[Notebook>#je91701c]]]から[Spark Submit]に変更する。 -クラスタ構成の設定~ 次に、Clusterの[Edit]を選択し、Configure New Clusterを表示させる。 --Databricks Runtime Versionを選択 ---Spark 2.4.1が無かったので、最も近い、 ---Runtime: 5.5 LTS (Scala 2.11, Spark 2.4.3)に変更。 --Initスクリプトを db-init.sh に設定 ---Advanced optionsを展開する。 ---[Init Scripts]タブを選択する。 ---[Destination]ドロップダウンリストでDBFSを選択する。 ---[Init Script Path]に以下を入力する。 dbfs:/spark-dotnet/db-init.sh ---[Confirm]を押下する。 >※ コレにより、db-init.sh 内で install-worker.sh が構成される($1-3をパラメタライズ)。 -パラメタの設定~ --パラメタに次の文字列を貼り付ける。 ["--class","org.apache.spark.deploy.dotnet.DotnetRunner","/dbfs/spark-dotnet/microsoft-spark-2-4_2.11-1.0.0.jar","/dbfs/spark-dotnet/publish.zip","mySparkApp"] --自分は、 ---mySparkApp → MySparkApp としていたので、その様に変更した。 ---[[ 実行に必要となる引数>.NET for Apache Sparkチュートリアル#s680c185]]が存在する場合、spark-submitでは、以下のように指定できる模様。 >.NET for Apache Spark ジョブを Databricks に送信する | Microsoft Docs~ https://docs.microsoft.com/ja-jp/dotnet/spark/how-to-guides/databricks-deploy-methods ---...と言う事で、実際、パラメタには、次の文字列を貼り付けた。 ["--class","org.apache.spark.deploy.dotnet.DotnetRunner","/dbfs/spark-dotnet/microsoft-spark-2-4_2.11-1.0.0.jar","/dbfs/spark-dotnet/publish.zip","MySparkApp", "input.txt"] --[Create]を押下する。 -アプリの実行~ --ここで、[[Initスクリプト>#a1355971]]が実行される。 --ジョブのクラスタが作成されるまで数分かかる。~ (リソース・グループを確認するとクラスタのリソース増が確認できる) --Job名の横にある [Run Now] ボタンをクリックする。 --Jobで構成した Spark クラスタでJobが実行される。 --実行結果は、Completed Runs表中のSpark列に表示されるLogsから確認できる。 #ref(無題2.png,left,nowrap,実行の結果,70%) -リソースのクリーンアップ --リソース・グループを確認するとクラスタのリソース減が確認できる --必要に応じて、(ワークスペースとクラスタの)リソース・グループを削除する。 ***参考 [#h06a7649] -[[Azure HDInsightとの比較>Azure HDInsight#n2b1fb3a]]~ >[[クラスタの作成中のdb-init.sh 設定+アプリの実行>#a1355971]] >≒ [[スクリプト アクション実行>Azure HDInsight#y790895b]] -エラー --1~ [[Azureのクォータ]]制限を解除する。 ---Cluster:~ Driver: Standard_DS3_v2, Workers: Standard_DS3_v2, 8 workers, 5.5 LTS (includes Apache Spark 2.4.3, Scala 2.11) ---Message:~ Unexpected failure while waiting for the cluster (...) to be ready. Cause Unexpected state for cluster (...): AZURE_QUOTA_EXCEEDED_EXCEPTION(CLIENT_ERROR):~ azure_error_code : QuotaExceeded,~ azure_error_message : Operation could not be completed as it results in exceeding approved Total Regional Cores quota. Additional details - Deployment Model: Resource Manager, Location: japaneast, Current Limit: 10, Current Usage: 4, Additional Required: 28, (Minimum) New Limit Required: 32. Submit a request for Quota increase at https://aka.ms/ProdportalCRP/?#create/Microsoft.Support/Parameters/%7B%22subId%22:%2232e43be6-1930-4982-a62c-a259327e5c77%22,%22pesId%22:%2206bfd9d3-516b-d5c6-5802-169c800dec89%22,%22supportTopicId%22:%22e12e3d1d-7fa0-af33-c6d0-3c50df9658a3%22%7D by specifying parameters listed in the 'Details' section for deployment to succeed. Pleas ... ***WARNING: message truncated. Skipped 964 bytes of output** ---クォータ制限を解除する。~ 以下のクォータを32に設定する。~ ・Total Regional vCPUsのクォータ~ ・Standard_DS3_v2 → DSv2 シリーズ(Standard DSv2 Promo Family vCPUs)のクォータ --2~ input.txtの扱いについて、 ---[[ZIP同梱していても、別途アップロードが必要になる。>#uee92a05]] ---[[また、コマンド引数でファイル名を渡している場合、spark-submitのパラメタで設定可能。>#a1355971]] **上記と同様に行ってみる例 [#m420e622] ワークスペースをクリーンナップするか新規作成する必要があるので、~ 1つのバッチにまとめて、コマンドライン引数で切り替えるのが良いかも。 ***[[バッチ処理>.NET for Apache Sparkチュートリアル#l7b4829d]] [#o0543855] -アプリ --publish.zipの発行とアップロード cd ...\DotNet4ApacheSpark\mySparkBatchApp\mySparkBatchApp dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.16.04-x64 cd ...\mySparkBatchApp\bin\Release\netcoreapp3.1\ubuntu.16.04-x64 powershell compress-archive publish ..\publish.zip cd .. databricks fs rm dbfs:/spark-dotnet/publish.zip databricks fs cp publish.zip dbfs:/spark-dotnet/publish.zip --projects_smaller.csvのアップロード databricks fs cp projects_smaller.csv dbfs:/projects_smaller.csv -spark-submitのパラメタ設定 ["--class","org.apache.spark.deploy.dotnet.DotnetRunner","/dbfs/spark-dotnet/microsoft-spark-2-4_2.11-1.0.0.jar","/dbfs/spark-dotnet/publish.zip","mySparkBatchApp", "projects_smaller.csv"] -エラー~ 何故か、最後のDataFrame.Showでエラーになって~ 4つ目の結果セットが表示されなかった(原因不明)。 ***[[構造化ストリーミング>.NET for Apache Sparkチュートリアル#v2288c2e]] [#qfa6d3c7] 未実施 ***[[ML.NETでの感情分析>.NET for Apache Sparkチュートリアル#bb5afcf2]] [#p0da09b0] 未実施 *Java [#re2bf642] 可能らしいがサンプルが無いのは、[[Scala>#m5f129dc]]でやるから? **... [#ab4244b8] *参考 [#j501dd8e] -Azure Databricksを使ってみた – ナレコムAzureレシピ | AIに強い情報サイト~ https://azure-recipe.kc-cloud.jp/2018/08/azure-databricks/ **databricks.com [#k666624d] Apache Spark チュートリアル: Apache Spark チュートリアルを開始する~ -はじめに~ https://databricks.com/jp/spark/getting-started-with-apache-spark -クイックスタート~ https://databricks.com/jp/spark/getting-started-with-apache-spark/quick-start -DATAFRAME~ https://databricks.com/jp/spark/getting-started-with-apache-spark/dataframes -DATASET~ https://databricks.com/jp/spark/getting-started-with-apache-spark/datasets -機械学習~ https://databricks.com/jp/spark/getting-started-with-apache-spark/machine-learning -ストリーミング~ https://databricks.com/jp/spark/getting-started-with-apache-spark/streaming -次のステップ~ https://databricks.com/jp/spark/getting-started-with-apache-spark/whats-next **microsoft.com [#bbd920d1] ***Scala [#y4d4dbfd] -チュートリアル --Azure Databricks を使用してデータの抽出、変換、読み込みを行う~ https://docs.microsoft.com/ja-jp/azure/databricks/scenarios/databricks-extract-load-sql-data-warehouse --Event Hubs を使用してデータを Azure Databricks にストリーム配信する~ https://docs.microsoft.com/ja-jp/azure/databricks/scenarios/databricks-stream-from-eventhubs --Azure Databricks を使用したストリーミング データに対する感情分析~ https://docs.microsoft.com/ja-jp/azure/databricks/scenarios/databricks-sentiment-analysis-cognitive-services ***Python (PySpark) [#h5fc34ee] -クイック スタート --Azure portal を使用して Azure Databricks ワークスペースで Spark ジョブを実行する~ https://docs.microsoft.com/ja-jp/azure/databricks/scenarios/quickstart-create-databricks-workspace-portal --PowerShell を使用して Azure Databricks ワークスペースを作成する~ https://docs.microsoft.com/ja-jp/azure/databricks/scenarios/quickstart-create-databricks-workspace-powershell -チュートリアル --Azure Databricks ノートブックから~ 仮想ネットワーク内の SQL Server Linux Docker コンテナーのクエリを実行する~ https://docs.microsoft.com/ja-jp/azure/databricks/scenarios/vnet-injection-sql-server --Azure Data Lake Storage Gen2、Azure Databricks、および Spark~ https://docs.microsoft.com/ja-jp/azure/storage/blobs/data-lake-storage-use-databricks-spark ***Getting Started [#a53c1d8d] -Azure Databricks - Workspace > Apache Spark の概要~ https://docs.microsoft.com/ja-jp/azure/databricks/getting-started/spark/ --Apache Spark を使ってみる~ https://docs.microsoft.com/ja-jp/azure/databricks/getting-started/spark/quick-start --DataFrames のチュートリアル~ https://docs.microsoft.com/ja-jp/azure/databricks/getting-started/spark/dataframes --Datasets のチュートリアル~ https://docs.microsoft.com/ja-jp/azure/databricks/getting-started/spark/datasets --MLlib を使用した機械学習のチュートリアル~ https://docs.microsoft.com/ja-jp/azure/databricks/getting-started/spark/machine-learning --[[構造化ストリーミングのチュートリアル>#ib347719]] ***Perform Data Science - Learn [#o3f4dbe8] -Azure Databricks を使用してデータ サイエンスを実行する~ https://docs.microsoft.com/ja-jp/learn/paths/perform-data-science-azure-databricks/ --Azure Databricks の説明~ https://docs.microsoft.com/ja-jp/learn/modules/describe-azure-databricks/ ---Azure Databricks について説明する ---ワークスペースとクラスターを作成する ---ノートブックを理解する ---演習: ノートブックを操作する --Spark アーキテクチャの基礎~ https://docs.microsoft.com/ja-jp/learn/modules/spark-architecture-fundamentals/ ---Azure Databricks の Spark クラスターのアーキテクチャについて理解する ---Spark ジョブのアーキテクチャについて理解する --Azure Databricks でデータの読み取りと書き込みを行う~ https://docs.microsoft.com/ja-jp/learn/modules/read-write-data-azure-databricks/ ---CSV 形式でデータを読み取る ---JSON 形式でデータを読み取る ---Parquet 形式でデータを読み取る ---テーブルとビューに格納されているデータを読み取る ---データを書き込む ---演習: データの読み取りと書き込みを行う --Azure Databricks でデータフレームを操作する~ https://docs.microsoft.com/ja-jp/learn/modules/work-dataframes-azure-databricks/ ---データフレームについて説明する ---一般的なデータフレーム メソッドを使用する ---display 関数を使用する ---演習: 個別の記事 --ユーザー定義関数を操作する~ https://docs.microsoft.com/ja-jp/learn/modules/work-with-user-defined-functions/ ---ユーザー定義関数を作成する ---演習: ユーザー定義関数を使用したETL操作を実行する --Delta Lake の構築とクエリ~ https://docs.microsoft.com/ja-jp/learn/modules/build-query-delta-lake/ ---オープンソースの Delta Lake の説明 ---演習: 基本的な Delta Lake 機能の使用 ---Azure Databricks によって Delta Lake を管理する方法についての説明 ---演習: Delta Lake Time Machine を使用して最適化を実行する --Azure Databricks を使用した機械学習の実行~ https://docs.microsoft.com/ja-jp/learn/modules/perform-machine-learning-with-azure-databricks/ ---機械学習を理解する ---演習: モデルをトレーニングし、予測を作成する ---探索的データ分析を使用してデータを理解する ---演習: 探索的データ分析を実行する ---機械学習ワークフローについて説明する ---演習: 機械学習のベースライン モデルを構築して評価する --機械学習モデルのトレーニング~ https://docs.microsoft.com/ja-jp/learn/modules/train-machine-learning-model/ ---データセットの特徴量化を実行する ---演習: データセットの特徴量化を終了する ---回帰モデリングを理解する ---演習: 回帰モデルを構築して解釈する --Azure Databricks で MLflow を操作する~ https://docs.microsoft.com/ja-jp/learn/modules/work-with-mlflow-azure-databricks/ ---MLflow を使用して実験を追跡し、メトリックをログ記録し、実行を比較する ---演習: MLflow を操作して、実験のメトリック、パラメーター、成果物、モデルを追跡する --ハイパーパラメーターのチューニングによるモデル選択の実行~ https://docs.microsoft.com/ja-jp/learn/modules/perform-model-selection-with-hyperparameter-tuning/ ---モデルの選択とハイパーパラメーターのチューニングについての説明 ---演習: ハイパーパラメーターをチューニングして最適なモデルを選択する --分散型トレーニングのための Horovod によるディープ ラーニング~ https://docs.microsoft.com/ja-jp/learn/modules/deep-learning-with-horovod-distributed-training/ ---Horovod を使用してディープ ラーニング モデルをトレーニングする ---Petastorm を使用して、分散型モデル トレーニング用に Horovod で Apache Parquet 形式のデータセットを読み取る ---演習: ディープ ラーニング モデルをトレーニングするために Horovod と Petastorm を使用する --[[Azure Machine Learning を操作してサービス モデルをデプロイする>#ybe88a83]] ***構造化ストリーミング [#ib347719] -構造化ストリーミング~ https://docs.microsoft.com/ja-jp/azure/databricks/spark/latest/structured-streaming/ --デモ ノートブック~ https://docs.microsoft.com/ja-jp/azure/databricks/spark/latest/structured-streaming/demo-notebooks --運用環境での構造化ストリーミング~ https://docs.microsoft.com/ja-jp/azure/databricks/spark/latest/structured-streaming/production --構造化ストリーミングの例~ https://docs.microsoft.com/ja-jp/azure/databricks/spark/latest/structured-streaming/examples -チュートリアル~ https://docs.microsoft.com/ja-jp/azure/databricks/getting-started/spark/streaming --デモ Scalaノートブック~ https://docs.microsoft.com/ja-jp/azure/databricks/_static/notebooks/structured-streaming-scala.html --デモ Pythonノートブック~ https://docs.microsoft.com/ja-jp/azure/databricks/_static/notebooks/structured-streaming-python.html ***Azure Machine Learning [#ybe88a83] -Azure Machine Learning を操作してサービス モデルをデプロイする~ https://docs.microsoft.com/ja-jp/learn/modules/work-with-azure-machine-learning-deploy-serving-models/ -AutoML と Azure Databricks を使用して開発する~ https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-configure-databricks-automl-environment **Qiita [#pba8f8ab] ***Scala [#g377cc6b] ***Python (PySpark) [#e44d9b2a] -KcMichael~ https://qiita.com/KcMichael --Azure Databricks: ---1. リソースの作成~ https://qiita.com/KcMichael/items/eb17285a46bda68f9c64 ---2. Databricksの基本事項~ https://qiita.com/KcMichael/items/34902eedf9270059c041 ---3-1. DBFSにBlob Storageをマウント~ https://qiita.com/KcMichael/items/8f5c8a3f97df31769f11 ---3-2. DBFSにAzure Data Lake Storage Gen2をマウント~ https://qiita.com/KcMichael/items/98493d2e9bb3eb3f12db ---4. PySpark基本操作~ https://qiita.com/KcMichael/items/8b1d51ac0e9f64633853 ---- Tags: [[:クラウド]], [[:ビッグデータ]], [[:Azure]]