API'leri kullanarak Apache Spark uygulama ölçümlerini toplama
Genel Bakış
Bu öğreticide, Synapse Prometheus bağlayıcısını kullanarak neredeyse gerçek zamanlı Apache Spark uygulama ölçümleri için mevcut şirket içi Prometheus sunucunuzu Azure Synapse çalışma alanıyla tümleştirmeyi öğreneceksiniz.
Bu öğreticide Azure Synapse REST ölçümleri API'leri de tanıtabilirsiniz. Kendi izleme ve tanılama araç setinizi oluşturmak veya izleme sistemlerinizle tümleştirmek için REST API'leri aracılığıyla Apache Spark uygulama ölçümleri verilerini getirebilirsiniz.
Şirket içi Prometheus sunucularınız için Azure Synapse Prometheus bağlayıcısını kullanma
Azure Synapse Prometheus bağlayıcısı açık kaynaklı bir projedir. Synapse Prometheus bağlayıcısı, şunları yapmanızı sağlamak için dosya tabanlı bir hizmet bulma yöntemi kullanır:
- Microsoft Entra hizmet sorumlusu aracılığıyla Synapse çalışma alanında kimlik doğrulaması yapın.
- Çalışma alanı Apache Spark uygulamaları listesini getirme.
- Prometheus dosya tabanlı yapılandırma aracılığıyla Apache Spark uygulama ölçümlerini çekin.
1. Önkoşul
Linux VM'sinde dağıtılan bir Prometheus sunucusuna sahip olmanız gerekir.
2. Hizmet sorumlusu oluşturma
Şirket içi Prometheus sunucunuzda Azure Synapse Prometheus bağlayıcısını kullanmak için aşağıdaki adımları izleyerek hizmet sorumlusu oluşturmanız gerekir.
2.1 Hizmet sorumlusu oluşturma:
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Sonuç şöyle görünmelidir:
{
"appId": "abcdef...",
"displayName": "<service_principal_name>",
"name": "http://<service_principal_name>",
"password": "abc....",
"tenant": "<tenant_id>"
}
appId, parola ve kiracı kimliğini not edin.
2.2 Yukarıdaki adımda oluşturulan hizmet sorumlusuna karşılık gelen izinleri ekleyin.
Azure Synapse Analytics çalışma alanınızda Synapse Yönetici istrator olarak oturum açın
Synapse Studio'da sol taraftaki bölmede Erişim denetimini yönet'i > seçin
Rol ataması eklemek için sol üst taraftaki Ekle düğmesine tıklayın
Kapsam için Çalışma Alanı'nı seçin
Rol için Synapse İşlem İşleci'ni seçin
Kullanıcı seçin için service_principal_name> girin <ve hizmet sorumlunuza tıklayın
Uygula'ya tıklayın (İznin geçerlilik kazanması için 3 dakika bekleyin.)
3. Azure Synapse Prometheus Bağlan or'ı indirin
Azure Synapse Prometheus Bağlan or yüklemek için komutlarını kullanın.
git clone https://github.com/microsoft/azure-synapse-spark-metrics.git
cd ./azure-synapse-spark-metrics/synapse-prometheus-connector/src
python pip install -r requirements.txt
4. Azure Synapse çalışma alanları için yapılandırma dosyası oluşturma
Yapılandırma klasöründe bir config.yaml dosyası oluşturun ve şu alanları doldurun: workspace_name, tenant_id, service_principal_name ve service_principal_password. yaml yapılandırmasına birden çok çalışma alanı ekleyebilirsiniz.
workspaces:
- workspace_name: <your_workspace_name>
tenant_id: <tenant_id>
service_principal_name: <service_principal_app_id>
service_principal_password: "<service_principal_password>"
5. Prometheus yapılandırmasını güncelleştirme
Prometheus scrape_config aşağıdaki yapılandırma bölümünü ekleyin ve your_workspace_name> çalışma alanınızın adıyla, <path_to_synapse_connector> ise kopyalanmış synapse-prometheus-connector klasörünüzle değiştirin <
- job_name: synapse-prometheus-connector
static_configs:
- labels:
__metrics_path__: /metrics
__scheme__: http
targets:
- localhost:8000
- job_name: synapse-workspace-<your_workspace_name>
bearer_token_file: <path_to_synapse_connector>/output/workspace/<your_workspace_name>/bearer_token
file_sd_configs:
- files:
- <path_to_synapse_connector>/output/workspace/<your_workspace_name>/application_discovery.json
refresh_interval: 10s
metric_relabel_configs:
- source_labels: [ __name__ ]
target_label: __name__
regex: metrics_application_[0-9]+_[0-9]+_(.+)
replacement: spark_$1
- source_labels: [ __name__ ]
target_label: __name__
regex: metrics_(.+)
replacement: spark_$1
6. Prometheus sunucusu VM'sinde bağlayıcıyı başlatın
Prometheus sunucusu VM'sinde aşağıdaki gibi bir bağlayıcı sunucusu başlatın.
python main.py
Birkaç saniye bekleyin ve bağlayıcı çalışmaya başlamalıdır. Prometheus hizmeti bulma sayfasında "synapse-prometheus-connector" ifadesini görebilirsiniz.
Ölçüm verilerini toplamak için Azure Synapse Prometheus veya REST ölçüm API'lerini kullanma
1. Kimlik Doğrulaması
Erişim belirteci almak için istemci kimlik bilgileri akışını kullanabilirsiniz. ÖlçümLER API'sine erişmek için hizmet sorumlusu için API'lere erişmek için uygun izne sahip bir Microsoft Entra erişim belirteci almanız gerekir.
Parametre | Zorunlu | Tanım |
---|---|---|
tenant_id | Doğru | Azure hizmet sorumlusu (uygulama) kiracı kimliğiniz |
grant_type | Doğru | İstenen verme türünü belirtir. İstemci Kimlik Bilgileri Verme akışında değer client_credentials olmalıdır. |
client_id | Doğru | Azure portalına veya Azure CLI'ye kaydettiğiniz uygulamanın (hizmet sorumlusu) kimliği. |
client_secret | Doğru | Uygulama için oluşturulan gizli dizi (hizmet sorumlusu) |
resource | Doğru | Synapse kaynak uri'sini 'https://dev.azuresynapse.net' olmalıdır |
curl -X GET -H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials&client_id=<service_principal_app_id>&resource=<azure_synapse_resource_id>&client_secret=<service_principal_secret>' \
https://login.microsoftonline.com/<tenant_id>/oauth2/token
Yanıt şöyle görünür:
{
"token_type": "Bearer",
"expires_in": "599",
"ext_expires_in": "599",
"expires_on": "1575500666",
"not_before": "1575499766",
"resource": "2ff8...f879c1d",
"access_token": "ABC0eXAiOiJKV1Q......un_f1mSgCHlA"
}
2. Azure Synapse çalışma alanında çalışan uygulamaları listeleme
Synapse çalışma alanına yönelik Apache Spark uygulamalarının listesini almak için bu İzleme - Apache Spark İş Listesini Alma belgesini izleyebilirsiniz.
3. Prometheus veya REST API'leri ile Apache Spark uygulama ölçümlerini toplama
Prometheus API'siyle Apache Spark uygulama ölçümlerini toplama
Prometheus API'sine göre belirtilen Apache Spark uygulamasının en son ölçümlerini alma
GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/metrics/executors/prometheus?format=html
Parametre | Zorunlu | Tanım |
---|---|---|
endpoint | Doğru | Çalışma alanı geliştirme uç noktası, örneğin https://myworkspace.dev.azuresynapse.net. |
livyApiVersion | Doğru | İstek için geçerli api sürümü. Şu anda 2019-11-01-preview sürümüdür |
sparkPoolName | Doğru | Spark havuzunun adı. |
sessionId | Doğru | Oturumun tanımlayıcısı. |
sparkApplicationId | Doğru | Spark Uygulama Kimliği |
Örnek İstek:
GET https://myworkspace.dev.azuresynapse.net/livyApi/versions/2019-11-01-preview/sparkpools/mysparkpool/sessions/1/applications/application_1605509647837_0001/metrics/executors/prometheus?format=html
Örnek Yanıt:
Durum kodu: 200 Yanıt şöyle görünür:
metrics_executor_rddBlocks{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 0
metrics_executor_memoryUsed_bytes{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 74992
metrics_executor_diskUsed_bytes{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 0
metrics_executor_totalCores{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 0
metrics_executor_maxTasks{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 0
metrics_executor_activeTasks{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 1
metrics_executor_failedTasks_total{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 0
metrics_executor_completedTasks_total{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 2
...
REST API ile Apache Spark uygulama ölçümlerini toplama
GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/executors
Parametre | Zorunlu | Tanım |
---|---|---|
endpoint | Doğru | Çalışma alanı geliştirme uç noktası, örneğin https://myworkspace.dev.azuresynapse.net. |
livyApiVersion | Doğru | İstek için geçerli api sürümü. Şu anda 2019-11-01-preview sürümüdür |
sparkPoolName | Doğru | Spark havuzunun adı. |
sessionId | Doğru | Oturumun tanımlayıcısı. |
sparkApplicationId | Doğru | Spark Uygulama Kimliği |
Örnek İstek
GET https://myworkspace.dev.azuresynapse.net/livyApi/versions/2019-11-01-preview/sparkpools/mysparkpool/sessions/1/applications/application_1605509647837_0001/executors
Örnek Yanıt Durumu kodu: 200
[
{
"id": "driver",
"hostPort": "f98b8fc2aea84e9095bf2616208eb672007bde57624:45889",
"isActive": true,
"rddBlocks": 0,
"memoryUsed": 75014,
"diskUsed": 0,
"totalCores": 0,
"maxTasks": 0,
"activeTasks": 0,
"failedTasks": 0,
"completedTasks": 0,
"totalTasks": 0,
"totalDuration": 0,
"totalGCTime": 0,
"totalInputBytes": 0,
"totalShuffleRead": 0,
"totalShuffleWrite": 0,
"isBlacklisted": false,
"maxMemory": 15845975654,
"addTime": "2020-11-16T06:55:06.718GMT",
"executorLogs": {
"stdout": "http://f98b8fc2aea84e9095bf2616208eb672007bde57624:8042/node/containerlogs/container_1605509647837_0001_01_000001/trusted-service-user/stdout?start=-4096",
"stderr": "http://f98b8fc2aea84e9095bf2616208eb672007bde57624:8042/node/containerlogs/container_1605509647837_0001_01_000001/trusted-service-user/stderr?start=-4096"
},
"memoryMetrics": {
"usedOnHeapStorageMemory": 75014,
"usedOffHeapStorageMemory": 0,
"totalOnHeapStorageMemory": 15845975654,
"totalOffHeapStorageMemory": 0
},
"blacklistedInStages": []
},
// ...
]
4. Kendi tanılama ve izleme araçlarınızı oluşturun
Prometheus API'leri ve REST API'leri, Apache Spark uygulamasının çalışan bilgileri hakkında zengin ölçüm verileri sağlar. Prometheus API'leri ve REST API'leri aracılığıyla uygulamayla ilgili ölçüm verilerini toplayabilirsiniz. Ayrıca ihtiyaçlarınıza daha uygun olan kendi tanılama ve izleme araçlarınızı oluşturun.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin