كيفية استخدام واجهات برمجة تطبيقات السجلات الطبية الإلكترونية (EMR APIs)

Ashley Innocent

Ashley Innocent

24 مارس 2026

كيفية استخدام واجهات برمجة تطبيقات السجلات الطبية الإلكترونية (EMR APIs)

Apidog للمؤسسات

نشر محلي

SSO & RBAC

متوافق مع SOC 2

استكشاف Apidog Enterprise

خلاصة (TL;DR)

تدير واجهات برمجة تطبيقات AWS EMR (Elastic MapReduce) مجموعات بيانات ضخمة تعمل بـ Hadoop وSpark وHive وPresto. يمكنك إنشاء مجموعات، وإرسال المهام كخطوات، والتوسع التلقائي بناءً على حجم العمل، وإنهاء المجموعات عند الانتهاء. يتم المصادقة باستخدام AWS IAM. للاختبار، استخدم Apidog للتحقق من صحة تكوينات المجموعات، واختبار إرسال المهام مقابل بنية API، وتوثيق مسارات بياناتك.

مقدمة

AWS EMR هي خدمة Hadoop/Spark المُدارة على AWS. تعالج بيتابايت من البيانات للتحليلات، والتعلم الآلي، ومسارات ETL. بدلاً من إدارة مجموعة Hadoop الخاصة بك، تتيح لك AWS التعامل مع البنية التحتية.

يعمل EMR على مثيلات EC2 في مجموعة. أنت تحدد:

تسمح لك واجهة برمجة تطبيقات EMR بأتمتة كل هذا. يمكنك إنشاء المجموعات برمجيًا، وتقديم المهام، ومراقبة التقدم، والتكامل مع خدمات AWS الأخرى.

💡
إذا كنت تقوم ببناء مسارات بيانات، يساعدك Apidog في اختبار تكوينات المجموعات، والتحقق من صحة تعريفات المهام، وتوثيق سير عمل EMR الخاص بك قبل تشغيل مهام معالجة البيانات المكلفة.
button

اختبر واجهات برمجة تطبيقات AWS باستخدام Apidog - مجانًا

بحلول نهاية هذا الدليل، ستكون قادرًا على:

المصادقة مع AWS

يستخدم EMR المصادقة القياسية لـ AWS مع IAM.

نهج AWS SDK (موصى به)

import { EMRClient, RunJobFlowCommand } from '@aws-sdk/client-emr'

const client = new EMRClient({
  region: 'us-east-1',
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
  }
})

واجهة برمجة التطبيقات المباشرة مع SigV4

يتطلب EMR توقيع AWS الإصدار 4 (AWS Signature Version 4). استخدم حزم SDK أو أدوات مثل boto3، AWS CLI، أو قم بإنشاء التوقيعات يدويًا.

aws emr list-clusters --region us-east-1

أذونات IAM

الحد الأدنى للسياسة لإدارة EMR:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:*",
        "ec2:Describe*",
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:ListBucket"
      ],
      "Resource": "*"
    }
  ]
}

إنشاء مجموعة

إنشاء مجموعة أساسي

aws emr create-cluster \
  --name "My Spark Cluster" \
  --release-label emr-7.0.0 \
  --applications Name=Spark Name=Hadoop \
  --instance-type m5.xlarge \
  --instance-count 3 \
  --service-role EMR_DefaultRole \
  --job-flow-role EMR_EC2_DefaultRole

عبر API (RunJobFlow)

{
  "Name": "Data Processing Cluster",
  "ReleaseLabel": "emr-7.0.0",
  "Applications": [
    { "Name": "Spark" },
    { "Name": "Hadoop" },
    { "Name": "Hive" }
  ],
  "Instances": {
    "MasterInstanceType": "m5.xlarge",
    "SlaveInstanceType": "m5.xlarge",
    "InstanceCount": 3,
    "KeepJobFlowAliveWhenNoSteps": true,
    "TerminationProtected": false
  },
  "Steps": [],
  "ServiceRole": "EMR_DefaultRole",
  "JobFlowRole": "EMR_EC2_DefaultRole",
  "LogUri": "s3://my-bucket/emr-logs/",
  "Tags": [
    { "Key": "Environment", "Value": "Production" }
  ]
}

الاستجابة:

{
  "JobFlowId": "j-ABC123DEF456"
}

مجموعات المثيلات مقابل أساطيل المثيلات

مجموعات المثيلات (Instance groups): أنواع مثيلات ثابتة لكل مجموعة (رئيسية، أساسية، مهمة).

أساطيل المثيلات (Instance fleets): أنواع/خيارات مثيلات متعددة لكل مجموعة. يختار EMR بناءً على التوفر والسعر.

{
  "Instances": {
    "InstanceFleets": [
      {
        "Name": "MasterFleet",
        "InstanceFleetType": "MASTER",
        "TargetOnDemandCapacity": 1,
        "InstanceTypeConfigs": [
          {
            "InstanceType": "m5.xlarge"
          },
          {
            "InstanceType": "m4.xlarge"
          }
        ]
      },
      {
        "Name": "CoreFleet",
        "InstanceFleetType": "CORE",
        "TargetOnDemandCapacity": 2,
        "TargetSpotCapacity": 4,
        "InstanceTypeConfigs": [
          {
            "InstanceType": "m5.2xlarge"
          },
          {
            "InstanceType": "m4.2xlarge"
          }
        ],
        "LaunchSpecifications": {
          "SpotSpecification": {
            "TimeoutDurationMinutes": 60,
            "TimeoutAction": "SWITCH_TO_ON_DEMAND"
          }
        }
      }
    ]
  }
}

إرسال المهام كخطوات

ينفذ EMR المهام كـ "خطوات" متسلسلة.

إضافة خطوة Spark

aws emr add-steps \
  --cluster-id j-ABC123DEF456 \
  --steps '[
    {
      "Name": "Process Data",
      "ActionOnFailure": "CONTINUE",
      "HadoopJarStep": {
        "Jar": "command-runner.jar",
        "Args": [
          "spark-submit",
          "--deploy-mode",
          "cluster",
          "--class",
          "com.example.DataProcessor",
          "s3://my-bucket/jars/processor.jar",
          "s3://my-bucket/input/",
          "s3://my-bucket/output/"
        ]
      }
    }
  ]'

عبر API (AddJobFlowSteps)

{
  "JobFlowId": "j-ABC123DEF456",
  "Steps": [
    {
      "Name": "Spark ETL Job",
      "ActionOnFailure": "CONTINUE",
      "HadoopJarStep": {
        "Jar": "command-runner.jar",
        "Args": [
          "spark-submit",
          "--executor-memory",
          "4g",
          "--executor-cores",
          "2",
          "s3://my-bucket/scripts/process.py",
          "--input",
          "s3://my-bucket/input/",
          "--output",
          "s3://my-bucket/output/"
        ]
      }
    }
  ]
}

خيارات ActionOnFailure

خطوة Hive

{
  "Name": "Hive Query",
  "HadoopJarStep": {
    "Jar": "command-runner.jar",
    "Args": [
      "hive-script",
      "--run-hive-script",
      "--args",
      "-f",
      "s3://my-bucket/scripts/transform.q"
    ]
  }
}

التوسع التلقائي

يمكن لـ EMR إضافة/إزالة عقد المهام بناءً على الحمل.

إنشاء سياسة التوسع التلقائي

aws emr put-auto-scaling-policy \
  --cluster-id j-ABC123DEF456 \
  --instance-group-id ig-ABC123 \
  --auto-scaling-policy '{
    "Constraints": {
      "MinCapacity": 2,
      "MaxCapacity": 10
    },
    "Rules": [
      {
        "Name": "ScaleOut",
        "Description": "Add nodes when memory is high",
        "Action": {
          "SimpleScalingPolicyConfiguration": {
            "AdjustmentType": "CHANGE_IN_CAPACITY",
            "ScalingAdjustment": 2,
            "CoolDown": 300
          }
        },
        "Trigger": {
          "CloudWatchAlarmDefinition": {
            "ComparisonOperator": "GREATER_THAN",
            "EvaluationPeriods": 3,
            "MetricName": "MemoryAvailableMB",
            "Namespace": "AWS/ElasticMapReduce",
            "Period": 300,
            "Threshold": 2000,
            "Statistic": "AVERAGE"
          }
        }
      }
    ]
  }'

مقاييس للتوسع

المراقبة والتسجيل

عرض قائمة المجموعات

aws emr list-clusters --states RUNNING

وصف المجموعة

aws emr describe-cluster --cluster-id j-ABC123DEF456

تتضمن الاستجابة:

{
  "Cluster": {
    "Id": "j-ABC123DEF456",
    "Name": "My Cluster",
    "Status": {
      "State": "RUNNING",
      "StateChangeReason": {},
      "Timeline": {
        "CreationDateTime": "2026-03-24T10:00:00.000Z"
      }
    },
    "Applications": [
      { "Name": "Spark", "Version": "3.5.0" }
    ],
    "InstanceCollectionType": "INSTANCE_GROUP",
    "LogUri": "s3://my-bucket/emr-logs/",
    "MasterPublicDnsName": "ec2-12-34-56-78.compute-1.amazonaws.com"
  }
}

عرض قائمة الخطوات

aws emr list-steps --cluster-id j-ABC123DEF456

حالة الخطوة

{
  "Id": "s-ABC123",
  "Name": "Process Data",
  "Status": {
    "State": "COMPLETED",
    "Timeline": {
      "StartDateTime": "2026-03-24T10:05:00.000Z",
      "EndDateTime": "2026-03-24T11:30:00.000Z"
    }
  }
}

تكامل CloudWatch

ينشر EMR المقاييس إلى CloudWatch:

تحسين التكلفة

استخدام المثيلات الفورية (Spot Instances)

تعتبر عقد المهام مثالية للمثيلات الفورية. إذا تم إنهاؤها، تستمر المهمة على العقد المتبقية.

{
  "Name": "TaskGroup",
  "InstanceRole": "TASK",
  "InstanceType": "m5.2xlarge",
  "InstanceCount": 4,
  "Market": "SPOT",
  "BidPrice": "0.10"
}

المجموعات العابرة (Transient Clusters)

إنشاء مجموعات، تشغيل المهام، ثم إنهاؤها تلقائيًا:

{
  "KeepJobFlowAliveWhenNoSteps": false,
  "Steps": [
    { ... step 1 ... },
    { ... step 2 ... }
  ]
}

تُنهى المجموعة بعد اكتمال جميع الخطوات.

أساطيل المثيلات بخيارات متعددة

دع EMR يختار الأرخص المتاح:

{
  "InstanceTypeConfigs": [
    {
      "InstanceType": "m5.2xlarge",
      "BidPrice": "0.15"
    },
    {
      "InstanceType": "m4.2xlarge",
      "BidPrice": "0.12"
    },
    {
      "InstanceType": "c5.2xlarge",
      "BidPrice": "0.10"
    }
  ]
}

الاختبار باستخدام Apidog

تعتبر مجموعات EMR مكلفة. اختبر التكوينات بعناية.

Apidog testing environment setup for AWS EMR APIs showing API requests and test scripts.

1. التحقق من صحة تكوينات المجموعة

احفظ قوالب المجموعة في Apidog:

pm.test('Cluster has required applications', () => {
  const config = pm.request.body.toJSON()
  const apps = config.Applications.map(a => a.Name)
  pm.expect(apps).to.include('Spark')
})

pm.test('Instance types are valid', () => {
  const config = pm.request.body.toJSON()
  const types = ['m5.xlarge', 'm5.2xlarge', 'm4.xlarge']
  pm.expect(types).to.include(config.Instances.MasterInstanceType)
})

2. اختبار تعريفات الخطوات

pm.test('Spark step has valid args', () => {
  const step = pm.request.body.toJSON().Steps[0]
  const args = step.HadoopJarStep.Args
  pm.expect(args[0]).to.eql('spark-submit')
  pm.expect(args).to.include('--deploy-mode')
})

3. متغيرات البيئة

AWS_REGION: us-east-1
EMR_SERVICE_ROLE: EMR_DefaultRole
EMR_EC2_ROLE: EMR_EC2_DefaultRole
S3_LOG_BUCKET: my-emr-logs
S3_SCRIPTS_BUCKET: my-emr-scripts

اختبر واجهات برمجة تطبيقات AWS باستخدام Apidog - مجانًا

الأخطاء الشائعة والإصلاحات

ValidationError: الخدمة_الدور (ServiceRole) غير صالح

السبب: دور IAM غير موجود أو لم يتم تكوينه لـ EMR.

الإصلاح: أنشئ دور خدمة في وحدة تحكم IAM أو استخدم الافتراضي لـ AWS: EMR_DefaultRole_V2.

فشل في توفير مثيلات EC2

السبب: نوع المثيل غير متاح في منطقة التوفر الخاصة بك، أو تم الوصول إلى حدود الخدمة.

الإصلاح:

فشلت الخطوة برمز خروج التطبيق 1

السبب: فشل مهمة Spark/Hadoop الفعلية.

الإصلاح: تحقق من السجلات في S3 (مسار LogUri). ابحث في stderr و stdout لهذه الخطوة.

المجموعة عالقة في حالة "بدء التشغيل" (STARTING)

السبب: فشل إجراءات التمهيد (bootstrap actions)، أو مشكلة في الأذونات.

الإصلاح: تحقق من إخراج وحدة تحكم مثيل EC2. تحقق من وصول S3 لبرامج التمهيد النصية.

البدائل والمقارنات

الميزة AWS EMR Google Dataproc Azure HDInsight Databricks
Hadoop/Spark مُدار Spark فقط
تكامل AWS ممتاز محدود محدود جيد
خيار بلا خادم (Serverless) EMR Serverless Dataproc Serverless محدود
التكلفة دعم المثيلات الفورية VMs قابلة للإلغاء المثيلات الفورية جيد
دعم التعلم الآلي EMR Studio Vertex AI Synapse MLflow مدمج

يتمتع EMR بأعمق تكامل مع AWS. بينما Databricks لديه أدوات Spark أفضل. Dataproc أرخص لمستخدمي GCP.

حالات الاستخدام الواقعية

تحويل واستخراج وتحميل البيانات (ETL) لبحيرة البيانات. تعالج شركة تجزئة بيانات المبيعات اليومية. تقوم مجموعات EMR بجمع ملفات CSV من S3، وتحويلها باستخدام Spark، وكتابة Parquet إلى بحيرة البيانات. تعمل المجموعات لمدة ساعتين يوميًا ثم تُنهى.

تحليلات السجلات. تعالج شركة SaaS سجلات التطبيقات. يقرأ Spark السجلات من S3، ويجمع المقاييس، ويكتبها إلى مستودع بيانات. يضيف التوسع التلقائي عقد المهام خلال أوقات ذروة حجم السجلات.

مسار التعلم الآلي. يقوم فريق علم البيانات بتدريب النماذج على EMR. يقرأ Spark الميزات من S3، ويدرب النماذج باستخدام MLlib، ويصدرها إلى SageMaker للتقديم.

الخلاصة

إليك ما تعلمته:

خطواتك التالية:

  1. إعداد أدوار IAM لـ EMR
  2. إنشاء مجموعة اختبار
  3. إرسال مهمة Spark بسيطة
  4. مراجعة السجلات في S3
  5. تطبيق استراتيجيات توفير التكلفة

اختبر واجهات برمجة تطبيقات AWS باستخدام Apidog - مجانًا

button

الأسئلة الشائعة

ما الفرق بين العقد الرئيسية (master)، الأساسية (core)، والمهام (task)؟

كيف يمكنني الوصول إلى العقدة الرئيسية عبر SSH؟

aws emr ssh --cluster-id j-ABC123DEF456 --key-pair-file my-key.pem

هل يمكنني تشغيل دفاتر Jupyter على EMR؟نعم. استخدم EMR Studio أو قم بتمكين تطبيق JupyterHub. أو استخدم دفاتر EMR (Jupyter مُدار).

ما هو EMR Serverless؟خيار بلا خادم حيث ترسل مهام Spark/Hive دون إدارة المجموعات. تدفع مقابل كل تشغيل مهمة. جيد لأحمال العمل المتقطعة.

كيف أقرأ من DynamoDB؟استخدم موصل DynamoDB:

spark-submit --conf spark.hadoop.dynamodb.servicename=dynamodb \
  --conf spark.hadoop.dynamodb.input.tableName=MyTable \
  --conf spark.hadoop.dynamodb.output.tableName=MyTable \
  --conf spark.hadoop.dynamodb.region=us-east-1 \
  my-job.jar

ما هو إصدار (release label) الذي يجب أن أستخدمه؟أحدث إصدار مستقر (emr-7.x لـ Spark 3.x). استخدم إصدارات متسقة عبر البيئات. تحقق من توافق التطبيق في ملاحظات الإصدار.

كيف أستكشف الأخطاء وإصلاحها للخطوات الفاشلة؟

  1. تحقق من حالة الخطوة: aws emr describe-step
  2. عرض السجلات في S3: s3://your-log-bucket/logs/j-ABC123/steps/s-DEF123/
  3. اتصل بـ SSH بالعقدة الرئيسية وتحقق من /mnt/var/log/

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات