البرنامج التعليمي: استخراج البيانات ونقلها وتحميلها باستخدام Azure HDInsight
وفقًا للبرنامج التعليمي، يُمكنك تنفيذ عملية ETL: استخراج البيانات ونقلها وتحميلها. يُمكنك الحصول على ملف بيانات CSV بسيط واستيراده إلى نظام مجموعة HDInsight Azure ونقله باستخدام Apache Hive، وتحميله إلى Azure SQL Database باستخدام Apache Sqoop.
في هذا البرنامج التعليمي، تتعلم كيفية:
- استخراج البيانات وتحميلها إلى نظام مجموعة HDInsight.
- نقل البيانات باستخدام Apache Hive.
- تحميل البيانات إلى Azure SQL Database باستخدام Sqoop.
إذا لم يكن لديك اشتراك في Azure، فأنشئ free account قبل البدء.
المتطلبات الأساسية
حساب تخزين يحتوي على مساحة أسماء هرمية (Azure Data Lake Storage Gen2) تم تكوينها ل HDInsight
يُرجى مراجعة استخدامAzure Data Lake Storage Gen2 مع أنظمة مجموعة HDInsight Azure.
نظام مجموعة Linux-based Hadoop المُتاحة على HDInsight
يُرجى الرجوع إلى قائمة التشغيل السريع: بدء استخدام Apache Hadoop وApache Hive في Azure HDInsight باستخدام مدخل Azure.
قاعدة بيانات Azure SQL
يمكنك استخدام Azure SQL Database كمخزن بيانات وجهة. إذا لم تكن لديك قاعدة بيانات في SQL Database، فيُرجى الرجوع إلى إنشاء قاعدة بيانات في Azure SQL Database في مدخل Azure.
Azure CLI
إذا لم تكن قد قمت بتثبيت Azure CLI، فشاهد تثبيت Azure CLI.
عميل Secure Shell (SSH)
لمزيد من المعلومات، راجع الاتصال ب HDInsight (Hadoop) باستخدام SSH.
تنزيل البيانات واستخراجها ثم تحميلها
في هذا القسم، يمكنك تنزيل نموذج بيانات الرحلة. بعد ذلك، يمكنك تحميل تلك البيانات إلى مجموعة HDInsight الخاصة بك ثم نسخ تلك البيانات إلى حساب Data Lake Storage Gen2 الخاص بك.
قم بتنزيل ملف On_Time_Reporting_Carrier_On_Time_Performance_1987_present_2016_1.zip. يحتوي هذا الملف على بيانات الرحلة.
فتح موجه الأوامر واستخدم الأمر التالي 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:
.بعد انتهاء التحميل، عليك الاتصال بمجموعة النظام باستخدام SSH. في صفحة موجه الأوامر، أدخل الأمر التالي:
ssh <ssh-user-name>@<cluster-name>-ssh.azurehdinsight.net
استخدم الأمر التالي لفك ضغط ملف .zip:
unzip <file-name>.zip
إعطاء الأمر لاستخراج ملف .csv.
استخدم الأمر التالي لإنشاء حاوية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>
العنصر النائب باسم حساب التخزين.استخدام الأمر التالي لإنشاء الدليل.
hdfs dfs -mkdir -p abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/data
استخدام الأمر التالي لنسخ ملف .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 المسمى تأخير.
وفقاً لمطالبة SSH التي تمتلكها بالفعل لنظام مجموعة HDInsight، استخدم الأمر التالي لإنشاء وتحرير اسم ملف جديدflightdelays.hql:
nano flightdelays.hql
قم بتعديل النص التالي عن طريق استبدال العناصر النائبة
<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;
احفظ الملف بكتابة CTRL+X ثم الكتابة
Y
عند مطالبتك بذلك.لبدء Hive وتشغيل الملف
flightdelays.hql
، استخدم الأمر التالي:beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -f flightdelays.hql
بعد انتهاء البرنامج النصي
flightdelays.hql
من التشغيل، استخدم الأمر التالي لفتح جلسة Beeline تفاعلية:beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http'
عندما تتلقى مطالبة
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.للخروج من Beeline، إدخال
!quit
عند المطالبة.
أنشئ جدول قاعدة بيانات SQL
يلزم الحصول على اسم الخادم من قاعدة بيانات SQL لإجراء هذه العملية. استكمال هذه الخطوات للعثور على اسم الخادم.
انتقل إلى مدخل Azure.
حدد قواعد بيانات SQL.
تحديد اسم قاعد المراد استخدامها. اسم الخادم مذكور في خانة اسم الخادم.
تحديد اسم قاعدة البيانات المراد استخدامها. اسم الخادم مذكور في خانة اسم الخادم.
هناك العديد من الطرق للاتصال بقاعدة بيانات SQL وإنشاء جدول. تستخدم الخطوات التالية FreeTDS من نظام مجموعة HDInsight.
لتثبيت FreeTDS، استخدم الأمر التالي عن طريق الاتصال بــ SSH إلى نظام المجموعة:
sudo apt-get --assume-yes install freetds-dev freetds-bin
بعد اكتمال التثبيت، استخدم الأمر التالي للاتصال بقاعدة بيانات 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>
عند الدخول إلى
1>
الموجه، أدخل العبارات التالية:CREATE TABLE [dbo].[delays]( [OriginCityName] [nvarchar](50) NOT NULL, [WeatherDelay] float, CONSTRAINT [PK_delays] PRIMARY KEY CLUSTERED ([OriginCityName] ASC)) GO
عند
GO
إدخال العبارة، يجري تقييم العبارات السابقة.يُنشئ الاستعلام جدولاً يسمى التأخيرات، والذي يحتوي على فهرس نظام المجموعة.
استخدم الاستعلام التالي للتحقق من إنشاء الجدول:
SELECT * FROM information_schema.tables GO
يتشابه الإخراج مع المثال التالي:
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE databaseName dbo delays BASE TABLE
أدخل
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.
استخدم الأمر التالي للتحقق من أن Sqoop يُمكن الإطلاع على قاعدة بيانات SQL:
sqoop list-databases --connect jdbc:sqlserver://<SERVER_NAME>.database.windows.net:1433 --username <ADMIN_LOGIN> --password <ADMIN_PASSWORD>
يقوم الأمر بإرجاع قائمة قواعد البيانات بما في ذلك قاعدة البيانات التي أنشأت فيها جدول التأخير.
استخدم الأمر التالي لتصدير البيانات من جدول 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
الدليل إلى جدول التأخيرات.بعد
sqoop
انتهاء الأمر، استخدم الأداة المساعدة tsql للاتصال بقاعدة البيانات:TDSVER=8.0 tsql -H <SERVER_NAME>.database.windows.net -U <ADMIN_LOGIN> -P <ADMIN_PASSWORD> -p 1433 -D <DATABASE_NAME>
استخدم العبارات التالية للتحقق من أن البيانات تم تصديرها إلى جدول التأخيرات:
SELECT * FROM delays GO
ينبغي الاطلاع على قائمة البيانات المُدرجة في الجدول. يتضمن الجدول اسم المدينة ومتوسط وقت تأخير الرحلة لتلك المدينة.
أدخل
exit
للخروج من الأداة المساعدة tsql.
تنظيف الموارد
تُعد جميع الموارد المستخدمة في البرنامج التعليمي موجودة مسبقاً. لا يلزم إجراء عملية التنظيف.
الخطوات التالية
لمعرفة المزيد من الطرق للتعامل مع البيانات الواردة في HDInsight، يُرجى الرجوع إلى المقال التالي:
يُرجى الرجوع إلى استخدامAzure Data Lake Storage Gen2 مع أنظمة مجموعة HDInsight Azure