Forem

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

Posted on • Originally published at apidog.com

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

خلاصة (TL;DR)

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

جرّب Apidog اليوم

مقدمة

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

أنت تتحكم في:

  • أنواع المثيلات (رئيسية، أساسية، تنفيذية)
  • التطبيقات المثبتة (Spark، Hadoop، Hive، Presto، HBase)
  • إجراءات التمهيد (bootstrap actions) لنصوص الإعداد
  • الخطوات (المهام) التي سيتم تنفيذها

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

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

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

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

  • إنشاء وتكوين مجموعات EMR عبر API
  • إرسال المهام كخطوات
  • إدارة التوسع التلقائي للمجموعة
  • مراقبة صحة المجموعة وتقدم المهام
  • تحسين التكاليف باستخدام أساطيل المثيلات والمثيلات الفورية (spot instances)

المصادقة مع 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
  }
})
Enter fullscreen mode Exit fullscreen mode

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

يتطلب توقيع AWS Signature Version 4. استخدم SDKs مثل boto3 أو AWS CLI أو أنشئ التوقيعات يدويًا.

aws emr list-clusters --region us-east-1
Enter fullscreen mode Exit fullscreen mode

أذونات IAM

لتمكين إدارة EMR، استخدم هذه السياسة كحد أدنى:

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

إنشاء مجموعة

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

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
Enter fullscreen mode Exit fullscreen mode

عبر 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" }
  ]
}
Enter fullscreen mode Exit fullscreen mode

استجابة API:

{
  "JobFlowId": "j-ABC123DEF456"
}
Enter fullscreen mode Exit fullscreen mode

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

  • مجموعات المثيلات (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"
          }
        }
      }
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

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

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

إضافة خطوة Spark عبر CLI

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/"
        ]
      }
    }
  ]'
Enter fullscreen mode Exit fullscreen mode

عبر 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/"
        ]
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

خيارات ActionOnFailure

  • TERMINATE_CLUSTER: إيقاف المجموعة عند الفشل
  • CANCEL_AND_WAIT: إلغاء الخطوات المتبقية وإبقاء المجموعة تعمل
  • CONTINUE: متابعة الخطوات التالية

خطوة Hive

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

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

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

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

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"
          }
        }
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

أهم المقاييس

  • MemoryAvailableMB: الذاكرة المتاحة
  • MemoryTotalMB: إجمالي الذاكرة
  • HDFSUtilization: استخدام مساحة HDFS
  • AppsRunning: تطبيقات YARN قيد التشغيل
  • AppsPending: تطبيقات YARN بانتظار التنفيذ

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

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

aws emr list-clusters --states RUNNING
Enter fullscreen mode Exit fullscreen mode

وصف مجموعة

aws emr describe-cluster --cluster-id j-ABC123DEF456
Enter fullscreen mode Exit fullscreen mode

استجابة:

{
  "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"
  }
}
Enter fullscreen mode Exit fullscreen mode

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

aws emr list-steps --cluster-id j-ABC123DEF456
Enter fullscreen mode Exit fullscreen mode

حالة الخطوة

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

تكامل CloudWatch

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

  • JobsFailed
  • JobsRunning
  • MemoryAvailableMB
  • MemoryTotalMB
  • HDFSUtilization

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

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

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

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

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

شغّل مجموعة، نفّذ المهام، وأنهِها تلقائيًا لتقليل التكلفة:

{
  "KeepJobFlowAliveWhenNoSteps": false,
  "Steps": [
    { ... step 1 ... },
    { ... step 2 ... }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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

اسمح لـ EMR باختيار الأرخص أو الأكثر توفرًا تلقائيًا:

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

الاختبار باستخدام 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)
})
Enter fullscreen mode Exit fullscreen mode

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

تحقق من أن خطوات Spark تحتوي على الوسائط الصحيحة:

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')
})
Enter fullscreen mode Exit fullscreen mode

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

حدد متغيرات البيئة في Apidog لأتمتة الاختبارات:

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
Enter fullscreen mode Exit fullscreen mode

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


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

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

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

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

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

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

الإصلاح:

  • استخدم أساطيل مثيلات بأنواع متعددة
  • اطلب زيادة الحد
  • جرب أنواع مثيلات أخرى

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

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

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

المجموعة عالقة في "STARTING"

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

الإصلاح: راجع إخراج وحدة تحكم 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 لبحيرة البيانات: شركة تجزئة تعالج بيانات المبيعات اليومية. تجمع ملفات CSV من S3، وتحولها باستخدام Spark، وتكتب Parquet إلى بحيرة البيانات. تعمل المجموعات لساعتين يوميًا ثم تُنهى تلقائيًا.
  • تحليلات السجلات: شركة SaaS تعالج سجلات التطبيقات باستخدام Spark، تجمع المقاييس وتخزنها في مستودع بيانات. التوسع التلقائي يضيف عقدًا إضافية عند الحاجة.
  • مسار التعلم الآلي: فريق علم بيانات يدرب النماذج على EMR باستخدام MLlib وتصدير النماذج إلى SageMaker.

الخلاصة

ما تعلمته:

  • إنشاء مجموعات باستخدام API RunJobFlow
  • إرسال المهام كخطوات
  • استخدام التوسع التلقائي لتحسين التكلفة
  • المراقبة باستخدام CloudWatch
  • تحسين التكاليف عبر المثيلات الفورية والمجموعات العابرة

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

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

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


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

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

  • الرئيسية (Master): تدير المجموعة (YARN ResourceManager, HDFS NameNode)
  • الأساسية (Core): تعالج البيانات وتخزن HDFS
  • المهام (Task): تعالج فقط، لا تخزن HDFS (مناسبة للمثيلات الفورية)

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

aws emr ssh --cluster-id j-ABC123DEF456 --key-pair-file my-key.pem
Enter fullscreen mode Exit fullscreen mode

هل يمكنني تشغيل دفاتر Jupyter على EMR؟

نعم. استخدم EMR Studio أو فعّل JupyterHub أو استخدم دفاتر EMR.

ما هو 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
Enter fullscreen mode Exit fullscreen mode

ما هو إصدار (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/

لمزيد من الأتمتة والاختبار، جرّب Apidog اليوم.

Top comments (0)