البرنامج التعليمي: استخراج البيانات ونقلها وتحميلها باستخدام Azure HDInsight

وفقًا للبرنامج التعليمي، يُمكنك تنفيذ عملية ETL: استخراج البيانات ونقلها وتحميلها. يُمكنك الحصول على ملف بيانات CSV بسيط واستيراده إلى نظام مجموعة HDInsight Azure ونقله باستخدام Apache Hive، وتحميله إلى Azure SQL Database باستخدام Apache Sqoop.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • استخراج البيانات وتحميلها إلى نظام مجموعة HDInsight.
  • نقل البيانات باستخدام Apache Hive.
  • تحميل البيانات إلى Azure SQL Database باستخدام Sqoop.

إذا لم يكن لديك اشتراك في Azure، فأنشئ free account قبل البدء.

المتطلبات الأساسية

تنزيل البيانات واستخراجها ثم تحميلها

في هذا القسم، يمكنك تنزيل نموذج بيانات الرحلة. بعد ذلك، يمكنك تحميل تلك البيانات إلى مجموعة HDInsight الخاصة بك ثم نسخ تلك البيانات إلى حساب Data Lake Storage Gen2 الخاص بك.

  1. قم بتنزيل ملف On_Time_Reporting_Carrier_On_Time_Performance_1987_present_2016_1.zip. يحتوي هذا الملف على بيانات الرحلة.

  2. فتح موجه الأوامر واستخدم الأمر التالي Secure Copy (Scp) لتحميل ملف .zip إلى عقدة رأس نظام المجموعة HDInsight:

    scp On_Time_Reporting_Carrier_On_Time_Performance_1987_present_2016_1.zip <ssh-user-name>@<cluster-name>-ssh.azurehdinsight.net:
    
    • <ssh-user-name> استبدل العنصر النائب باسم مستخدم SSH لنظام مجموعة HDInsight.
    • استبدال <cluster-name> العنصر النائب باسم نظام مجموعة HDInsight.

    إذا كنت تستخدم كلمة مرور لمصادقة اسم مستخدم SSH الخاص بك، فستتم مطالبتك بكلمة المرور.

    إذا كنت تستخدم مفتاحاً عاماً، فقد تحتاج إلى استخدام -i المعلمة وتحديد المسار إلى المفتاح الخاص المطابق. على سبيل المثال، ⁧scp -i ~/.ssh/id_rsa <file_name>.zip <user-name>@<cluster-name>-ssh.azurehdinsight.net:⁩.

  3. بعد انتهاء التحميل، عليك الاتصال بمجموعة النظام باستخدام SSH. في صفحة موجه الأوامر، أدخل الأمر التالي:

    ssh <ssh-user-name>@<cluster-name>-ssh.azurehdinsight.net
    
  4. استخدم الأمر التالي لفك ضغط ملف .zip:

    unzip <file-name>.zip
    

    إعطاء الأمر لاستخراج ملف .csv.

  5. استخدم الأمر التالي لإنشاء حاويةData Lake Storage Gen2.

    hadoop fs -D "fs.azure.createRemoteFileSystemDuringInitialization=true" -ls abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/
    

    استبدال <container-name> العنصر النائب بالاسم الذي تود إطلاقه على الحاوية.

    استبدال <storage-account-name> العنصر النائب باسم حساب التخزين.

  6. استخدام الأمر التالي لإنشاء الدليل.

    hdfs dfs -mkdir -p abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/data
    
  7. استخدام الأمر التالي لنسخ ملف .csv إلى الدليل:

    hdfs dfs -put "On_Time_Reporting_Carrier_On_Time_Performance_(1987_present)_2016_1.csv" abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/data/
    

    استخدم علامات الاقتباس المذكور بينها اسم الملف وذلك إذا كان اسم الملف يحتوي على مسافات أو أحرف خاصة.

تحويل البيانات

في هذا القسم، يُمكنك استخدام Beeline لتفعيل وظيفة Apache Hive.

كجزء من وظيفة Apache Hive، يُمكنك استيراد البيانات من ملف .csv إلى جدول Apache Hive المسمى تأخير.

  1. وفقاً لمطالبة SSH التي تمتلكها بالفعل لنظام مجموعة HDInsight، استخدم الأمر التالي لإنشاء وتحرير اسم ملف جديدflightdelays.hql:

    nano flightdelays.hql
    
  2. قم بتعديل النص التالي عن طريق استبدال العناصر النائبة <container-name> و <storage-account-name> باسم الحاوية وحساب التخزين. ثم انسخ النص والصقه في وحدة تحكم nano باستخدام الضغط على المفتاح SHIFT مع زر تحديد الماوس الأيمن.

      DROP TABLE delays_raw;
      -- Creates an external table over the csv file
      CREATE EXTERNAL TABLE delays_raw (
         YEAR string,
         FL_DATE string,
         UNIQUE_CARRIER string,
         CARRIER string,
         FL_NUM string,
         ORIGIN_AIRPORT_ID string,
         ORIGIN string,
         ORIGIN_CITY_NAME string,
         ORIGIN_CITY_NAME_TEMP string,
         ORIGIN_STATE_ABR string,
         DEST_AIRPORT_ID string,
         DEST string,
         DEST_CITY_NAME string,
         DEST_CITY_NAME_TEMP string,
         DEST_STATE_ABR string,
         DEP_DELAY_NEW float,
         ARR_DELAY_NEW float,
         CARRIER_DELAY float,
         WEATHER_DELAY float,
         NAS_DELAY float,
         SECURITY_DELAY float,
         LATE_AIRCRAFT_DELAY float)
      -- The following lines describe the format and location of the file
      ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
      LINES TERMINATED BY '\n'
      STORED AS TEXTFILE
      LOCATION 'abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/data';
    
      -- Drop the delays table if it exists
      DROP TABLE delays;
      -- Create the delays table and populate it with data
      -- pulled in from the CSV file (via the external table defined previously)
      CREATE TABLE delays
      LOCATION 'abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/processed'
      AS
      SELECT YEAR AS year,
         FL_DATE AS FlightDate, 
         substring(UNIQUE_CARRIER, 2, length(UNIQUE_CARRIER) -1) AS IATA_CODE_Reporting_Airline,
         substring(CARRIER, 2, length(CARRIER) -1) AS Reporting_Airline, 
         substring(FL_NUM, 2, length(FL_NUM) -1) AS Flight_Number_Reporting_Airline,
         ORIGIN_AIRPORT_ID AS OriginAirportID,
         substring(ORIGIN, 2, length(ORIGIN) -1) AS OriginAirportSeqID,
         substring(ORIGIN_CITY_NAME, 2) AS OriginCityName,
         substring(ORIGIN_STATE_ABR, 2, length(ORIGIN_STATE_ABR) -1)  AS OriginState,
         DEST_AIRPORT_ID AS DestAirportID,
         substring(DEST, 2, length(DEST) -1) AS DestAirportSeqID,
         substring(DEST_CITY_NAME,2) AS DestCityName,
         substring(DEST_STATE_ABR, 2, length(DEST_STATE_ABR) -1) AS DestState,
         DEP_DELAY_NEW AS DepDelay,
         ARR_DELAY_NEW AS ArrDelay,
         CARRIER_DELAY AS CarrierDelay,
         WEATHER_DELAY AS WeatherDelay,
         NAS_DELAY AS NASDelay,
         SECURITY_DELAY AS SecurityDelay,
         LATE_AIRCRAFT_DELAY AS LateAircraftDelay
      FROM delays_raw;
    
  3. احفظ الملف بكتابة CTRL+X ثم الكتابة Y عند مطالبتك بذلك.

  4. لبدء Hive وتشغيل الملف flightdelays.hql، استخدم الأمر التالي:

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -f flightdelays.hql
    
  5. بعد انتهاء البرنامج النصي flightdelays.hql من التشغيل، استخدم الأمر التالي لفتح جلسة Beeline تفاعلية:

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http'
    
  6. عندما تتلقى مطالبة jdbc:hive2://localhost:10001/>، استخدم الاستعلام التالي لاسترداد البيانات من بيانات تأخير الرحلة المستوردة:

    INSERT OVERWRITE DIRECTORY '/tutorials/flightdelays/output'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    SELECT regexp_replace(OriginCityName, '''', ''),
      avg(WeatherDelay)
    FROM delays
    WHERE WeatherDelay IS NOT NULL
    GROUP BY OriginCityName;
    

    يسترد هذا الاستعلام قائمة بالمدن التي تعرضت لتأخيرات بسبب الطقس، جنبًا إلى جنب مع متوسط وقت التأخير، ويحفظها في abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output. لاحقاً، يقرأ Sqoop البيانات من هذا الموقع ويصدرها إلى قاعدة بيانات azure SQL.

  7. للخروج من Beeline، إدخال !quit عند المطالبة.

أنشئ جدول قاعدة بيانات SQL

يلزم الحصول على اسم الخادم من قاعدة بيانات SQL لإجراء هذه العملية. استكمال هذه الخطوات للعثور على اسم الخادم.

  1. انتقل إلى مدخل Azure.

  2. حدد قواعد بيانات SQL.

  3. تحديد اسم قاعد المراد استخدامها. اسم الخادم مذكور في خانة اسم الخادم.

  4. تحديد اسم قاعدة البيانات المراد استخدامها. اسم الخادم مذكور في خانة اسم الخادم.

    الحصول على تفاصيل خادم Azure SQL

    هناك العديد من الطرق للاتصال بقاعدة بيانات SQL وإنشاء جدول. تستخدم الخطوات التالية FreeTDS من نظام مجموعة HDInsight.

  5. لتثبيت FreeTDS، استخدم الأمر التالي عن طريق الاتصال بــ SSH إلى نظام المجموعة:

    sudo apt-get --assume-yes install freetds-dev freetds-bin
    
  6. بعد اكتمال التثبيت، استخدم الأمر التالي للاتصال بقاعدة بيانات SQL.

    TDSVER=8.0 tsql -H '<server-name>.database.windows.net' -U '<admin-login>' -p 1433 -D '<database-name>'
    
    • استبدال <server-name> العنصر النائب باسم الخادم المنطقي لـ SQL.

    • استبدل <admin-login> العنصر النائب باسم مستخدم المسؤول لقاعدة بيانات SQL.

    • استبدال <database-name> العنصر النائب باسم قاعدة البيانات

    عند مطالبتك، أدخل كلمة المرور الخاصة باسم مستخدم مسؤول قاعدة بيانات SQL.

    الحصول على مخرجات مشابهة للنص التالي:

    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    Default database being set to sqooptest
    1>
    
  7. عند الدخول إلى 1> الموجه، أدخل العبارات التالية:

    CREATE TABLE [dbo].[delays](
    [OriginCityName] [nvarchar](50) NOT NULL,
    [WeatherDelay] float,
    CONSTRAINT [PK_delays] PRIMARY KEY CLUSTERED
    ([OriginCityName] ASC))
    GO
    
  8. عند GO إدخال العبارة، يجري تقييم العبارات السابقة.

    يُنشئ الاستعلام جدولاً يسمى التأخيرات، والذي يحتوي على فهرس نظام المجموعة.

  9. استخدم الاستعلام التالي للتحقق من إنشاء الجدول:

    SELECT * FROM information_schema.tables
    GO
    

    يتشابه الإخراج مع المثال التالي:

    TABLE_CATALOG   TABLE_SCHEMA    TABLE_NAME      TABLE_TYPE
    databaseName       dbo             delays        BASE TABLE
    
  10. أدخل exit المطالبة 1> للخروج من الأداة المساعدة tsql.

تصدير البيانات وتحميلها

في المقاطع السابقة، تتم عملية نسخ البيانات المنقولة في الموقعabfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output. في هذا القسم، يُمكنك استخدام Sqoop لتصدير البيانات من abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output وإلى الجدول الذي أنشأته في Azure SQL Database.

  1. استخدم الأمر التالي للتحقق من أن Sqoop يُمكن الإطلاع على قاعدة بيانات SQL:

    sqoop list-databases --connect jdbc:sqlserver://<SERVER_NAME>.database.windows.net:1433 --username <ADMIN_LOGIN> --password <ADMIN_PASSWORD>
    

    يقوم الأمر بإرجاع قائمة قواعد البيانات بما في ذلك قاعدة البيانات التي أنشأت فيها جدول التأخير.

  2. استخدم الأمر التالي لتصدير البيانات من جدول hivesampletable إلى جدول التأخير:

    sqoop export --connect 'jdbc:sqlserver://<SERVER_NAME>.database.windows.net:1433;database=<DATABASE_NAME>' --username <ADMIN_LOGIN> --password <ADMIN_PASSWORD> --table 'delays' --export-dir 'abfs://<container-name>@.dfs.core.windows.net/tutorials/flightdelays/output' --fields-terminated-by '\t' -m 1
    

    تتصل Sqoop بقاعدة البيانات التي تحتوي على جدول التأخيرات، وصادرات البيانات من /tutorials/flightdelays/output الدليل إلى جدول التأخيرات.

  3. بعد sqoop انتهاء الأمر، استخدم الأداة المساعدة tsql للاتصال بقاعدة البيانات:

    TDSVER=8.0 tsql -H <SERVER_NAME>.database.windows.net -U <ADMIN_LOGIN> -P <ADMIN_PASSWORD> -p 1433 -D <DATABASE_NAME>
    
  4. استخدم العبارات التالية للتحقق من أن البيانات تم تصديرها إلى جدول التأخيرات:

    SELECT * FROM delays
    GO
    

    ينبغي الاطلاع على قائمة البيانات المُدرجة في الجدول. يتضمن الجدول اسم المدينة ومتوسط وقت تأخير الرحلة لتلك المدينة.

  5. أدخل exit للخروج من الأداة المساعدة tsql.

تنظيف الموارد

تُعد جميع الموارد المستخدمة في البرنامج التعليمي موجودة مسبقاً. لا يلزم إجراء عملية التنظيف.

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

لمعرفة المزيد من الطرق للتعامل مع البيانات الواردة في HDInsight، يُرجى الرجوع إلى المقال التالي: