Aracılığıyla paylaş


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.

screenshot grant permission srbac

  1. Azure Synapse Analytics çalışma alanınızda Synapse Yönetici istrator olarak oturum açın

  2. Synapse Studio'da sol taraftaki bölmede Erişim denetimini yönet'i > seçin

  3. Rol ataması eklemek için sol üst taraftaki Ekle düğmesine tıklayın

  4. Kapsam için Çalışma Alanı'nı seçin

  5. Rol için Synapse İşlem İşleci'ni seçin

  6. Kullanıcı seçin için service_principal_name> girin <ve hizmet sorumlunuza tıklayın

  7. 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.