استيعاب بيانات Azure HPC Cache - أسلوب النسخ اليدوي

تقدم هذه المقالة إرشادات مفصلة لنسخ البيانات يدويا إلى حاوية تخزين Blob لاستخدامها مع Azure HPC Cache. ويستخدم عمليات متوازية متعددة مؤشرات الترابط لتحسين سرعة النسخ.

لمعرفة المزيد حول نقل البيانات إلى تخزين Blob ل Azure HPC Cache، اقرأ نقل البيانات إلى تخزين Azure Blob.

مثال على نسخة بسيطة

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

يتضمن الأمر Linux/UNIX cp الوسيطة -p للحفاظ على الملكية وبيانات تعريف mtime. إضافة هذه الوسيطة إلى الأوامر أدناه اختيارية. (تؤدي إضافة الوسيطة إلى زيادة عدد استدعاءات نظام الملفات المرسلة من العميل إلى نظام الملفات الوجهة لتعديل بيانات التعريف.)

ينسخ هذا المثال البسيط ملفين بالتوازي:

cp /mnt/source/file1 /mnt/destination1/ & cp /mnt/source/file2 /mnt/destination1/ &

بعد إصدار هذا الأمر، jobs سيظهر الأمر أن مؤشري ترابط قيد التشغيل.

نسخ البيانات بأسماء ملفات يمكن التنبؤ بها

إذا كانت أسماء الملفات الخاصة بك قابلة للتنبؤ، يمكنك استخدام التعبيرات لإنشاء مؤشرات ترابط نسخ متوازية.

على سبيل المثال، إذا كان الدليل يحتوي على 1000 ملف تم ترقيمها بالتسلسل من 0001 إلى 1000، يمكنك استخدام التعبيرات التالية لإنشاء 10 مؤشرات ترابط متوازية يقوم كل منها بنسخ 100 ملف:

cp /mnt/source/file0* /mnt/destination1/ & \
cp /mnt/source/file1* /mnt/destination1/ & \
cp /mnt/source/file2* /mnt/destination1/ & \
cp /mnt/source/file3* /mnt/destination1/ & \
cp /mnt/source/file4* /mnt/destination1/ & \
cp /mnt/source/file5* /mnt/destination1/ & \
cp /mnt/source/file6* /mnt/destination1/ & \
cp /mnt/source/file7* /mnt/destination1/ & \
cp /mnt/source/file8* /mnt/destination1/ & \
cp /mnt/source/file9* /mnt/destination1/

نسخ البيانات بأسماء ملفات غير منظمة

إذا كانت بنية تسمية الملفات غير قابلة للتنبؤ، يمكنك تجميع الملفات حسب أسماء الدليل.

يجمع هذا المثال دلائل بأكملها لإرسالها إلى cp الأوامر التي يتم تشغيلها كمهام في الخلفية:

/root
|-/dir1
| |-/dir1a
| |-/dir1b
| |-/dir1c
   |-/dir1c1
|-/dir1d

بعد تجميع الملفات، يمكنك تشغيل أوامر النسخ المتوازية لنسخ الدلائل الفرعية وكافة محتوياتها بشكل متكرر:

cp /mnt/source/* /mnt/destination/
mkdir -p /mnt/destination/dir1 && cp /mnt/source/dir1/* mnt/destination/dir1/ &
cp -R /mnt/source/dir1/dir1a /mnt/destination/dir1/ &
cp -R /mnt/source/dir1/dir1b /mnt/destination/dir1/ &
cp -R /mnt/source/dir1/dir1c /mnt/destination/dir1/ & # this command copies dir1c1 via recursion
cp -R /mnt/source/dir1/dir1d /mnt/destination/dir1/ &

متى يتم إضافة نقاط التحميل

بعد أن يكون لديك ما يكفي من مؤشرات الترابط المتوازية التي تسير مقابل نقطة تحميل نظام ملفات وجهة واحدة، ستكون هناك نقطة حيث لا تعطي إضافة المزيد من مؤشرات الترابط المزيد من معدل النقل. (سيتم قياس معدل النقل بالملفات/الثانية أو وحدات البايت/الثانية، اعتمادا على نوع البيانات.) أو الأسوأ من ذلك، يمكن أن يتسبب الترابط الزائد في بعض الأحيان في تدهور معدل النقل.

عند حدوث ذلك، يمكنك إضافة نقاط تحميل من جانب العميل إلى عناوين تحميل Azure HPC Cache الأخرى، باستخدام نفس مسار تحميل نظام الملفات البعيد:

10.1.0.100:/nfs on /mnt/sourcetype nfs (rw,vers=3,proto=tcp,addr=10.1.0.100)
10.1.1.101:/nfs on /mnt/destination1type nfs (rw,vers=3,proto=tcp,addr=10.1.1.101)
10.1.1.102:/nfs on /mnt/destination2type nfs (rw,vers=3,proto=tcp,addr=10.1.1.102)
10.1.1.103:/nfs on /mnt/destination3type nfs (rw,vers=3,proto=tcp,addr=10.1.1.103)

تتيح لك إضافة نقاط التحميل من جانب العميل نسخ أوامر النسخ الإضافية إلى نقاط التحميل الإضافية /mnt/destination[1-3] ، ما يحقق المزيد من التوازي.

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

cp /mnt/source/file0* /mnt/destination1/ & \
cp /mnt/source/file1* /mnt/destination2/ & \
cp /mnt/source/file2* /mnt/destination3/ & \
cp /mnt/source/file3* /mnt/destination1/ & \
cp /mnt/source/file4* /mnt/destination2/ & \
cp /mnt/source/file5* /mnt/destination3/ & \
cp /mnt/source/file6* /mnt/destination1/ & \
cp /mnt/source/file7* /mnt/destination2/ & \
cp /mnt/source/file8* /mnt/destination3/ & \

في المثال أعلاه، يتم استهداف جميع نقاط تحميل الوجهة الثلاث بواسطة عمليات نسخ ملف العميل.

متى يتم إضافة عملاء

وأخيرا، عند الوصول إلى قدرات العميل، لن تؤدي إضافة المزيد من مؤشرات ترابط النسخ أو نقاط التحميل الإضافية إلى أي زيادة إضافية في الملفات/الثانية أو وحدات البايت/ثانية. في هذه الحالة، يمكنك نشر عميل آخر بنفس مجموعة نقاط التحميل التي سيتم تشغيل مجموعاتها الخاصة من عمليات نسخ الملفات.

مثال:

Client1: cp -R /mnt/source/dir1/dir1a /mnt/destination/dir1/ &
Client1: cp -R /mnt/source/dir2/dir2a /mnt/destination/dir2/ &
Client1: cp -R /mnt/source/dir3/dir3a /mnt/destination/dir3/ &

Client2: cp -R /mnt/source/dir1/dir1b /mnt/destination/dir1/ &
Client2: cp -R /mnt/source/dir2/dir2b /mnt/destination/dir2/ &
Client2: cp -R /mnt/source/dir3/dir3b /mnt/destination/dir3/ &

Client3: cp -R /mnt/source/dir1/dir1c /mnt/destination/dir1/ &
Client3: cp -R /mnt/source/dir2/dir2c /mnt/destination/dir2/ &
Client3: cp -R /mnt/source/dir3/dir3c /mnt/destination/dir3/ &

Client4: cp -R /mnt/source/dir1/dir1d /mnt/destination/dir1/ &
Client4: cp -R /mnt/source/dir2/dir2d /mnt/destination/dir2/ &
Client4: cp -R /mnt/source/dir3/dir3d /mnt/destination/dir3/ &

إنشاء بيانات الملف

بعد فهم الأساليب المذكورة أعلاه (عدة سلاسل نسخ لكل وجهة، وجهات متعددة لكل عميل، وعملاء متعددين لكل نظام ملفات مصدر يمكن الوصول إليه عبر الشبكة)، ضع في اعتبارك هذه التوصية: إنشاء بيانات الملف ثم استخدامها مع أوامر النسخ عبر عملاء متعددين.

يستخدم هذا السيناريو أمر UNIX find لإنشاء بيانات الملفات أو الدلائل:

user@build:/mnt/source > find . -mindepth 4 -maxdepth 4 -type d
./atj5b55c53be6-01/support/gsi/2018-07-22T21:12:06EDT
./atj5b55c53be6-01/support/pcap/2018-07-23T01:34:57UTC
./atj5b55c53be6-01/support/trace/rolling
./atj5b55c53be6-03/support/gsi/2018-07-22T21:12:06EDT
./atj5b55c53be6-03/support/pcap/2018-07-23T01:34:57UTC
./atj5b55c53be6-03/support/trace/rolling
./atj5b55c53be6-02/support/gsi/2018-07-22T21:12:06EDT
./atj5b55c53be6-02/support/pcap/2018-07-23T01:34:57UTC
./atj5b55c53be6-02/support/trace/rolling

إعادة توجيه هذه النتيجة إلى ملف: find . -mindepth 4 -maxdepth 4 -type d > /tmp/foo

ثم يمكنك التكرار من خلال البيان، باستخدام أوامر BASH لحساب الملفات وتحديد أحجام الدلائل الفرعية:

ben@xlcycl1:/sps/internal/atj5b5ab44b7f > for i in $(cat /tmp/foo); do echo " `find ${i} |wc -l` `du -sh ${i}`"; done
244    3.5M    ./atj5b5ab44b7f-02/support/gsi/2018-07-18T00:07:03EDT
9      172K    ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-18T05:01:00UTC
124    5.8M    ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-19T01:01:01UTC
152    15M     ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-20T01:01:00UTC
131    13M     ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-20T21:59:41UTC_partial
789    6.2M    ./atj5b5ab44b7f-02/support/gsi/2018-07-20T21:59:41UTC
134    12M     ./atj5b5ab44b7f-02/support/gsi/stats_2018-07-20T22:22:55UTC_hpccache_catchup
7      16K     ./atj5b5ab44b7f-02/support/pcap/2018-07-18T17:12:19UTC
8      83K     ./atj5b5ab44b7f-02/support/pcap/2018-07-18T17:17:17UTC
575    7.7M    ./atj5b5ab44b7f-02/support/cores/armada_main.2000.1531980253.gsi
33     4.4G    ./atj5b5ab44b7f-02/support/trace/rolling
281    6.6M    ./atj5b5ab44b7f-01/support/gsi/2018-07-18T00:07:03EDT
15     182K    ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-18T05:01:00UTC
244    17M     ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-19T01:01:01UTC
299    31M     ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-20T01:01:00UTC
256    29M     ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-20T21:59:41UTC_partial
889    7.7M    ./atj5b5ab44b7f-01/support/gsi/2018-07-20T21:59:41UTC
262    29M     ./atj5b5ab44b7f-01/support/gsi/stats_2018-07-20T22:22:55UTC_hpccache_catchup
11     248K    ./atj5b5ab44b7f-01/support/pcap/2018-07-18T17:12:19UTC
11     88K     ./atj5b5ab44b7f-01/support/pcap/2018-07-18T17:17:17UTC
645    11M     ./atj5b5ab44b7f-01/support/cores/armada_main.2019.1531980253.gsi
33     4.0G    ./atj5b5ab44b7f-01/support/trace/rolling
244    2.1M    ./atj5b5ab44b7f-03/support/gsi/2018-07-18T00:07:03EDT
9      158K    ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-18T05:01:00UTC
124    5.3M    ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-19T01:01:01UTC
152    15M     ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-20T01:01:00UTC
131    12M     ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-20T21:59:41UTC_partial
789    8.4M    ./atj5b5ab44b7f-03/support/gsi/2018-07-20T21:59:41UTC
134    14M     ./atj5b5ab44b7f-03/support/gsi/stats_2018-07-20T22:25:58UTC_hpccache_catchup
7      159K    ./atj5b5ab44b7f-03/support/pcap/2018-07-18T17:12:19UTC
7      157K    ./atj5b5ab44b7f-03/support/pcap/2018-07-18T17:17:17UTC
576    12M     ./atj5b5ab44b7f-03/support/cores/armada_main.2013.1531980253.gsi
33     2.8G    ./atj5b5ab44b7f-03/support/trace/rolling

وأخيرا، يجب صياغة أوامر نسخ الملف الفعلي للعملاء.

إذا كان لديك أربعة عملاء، فاستخدم هذا الأمر:

for i in 1 2 3 4 ; do sed -n ${i}~4p /tmp/foo > /tmp/client${i}; done

إذا كان لديك خمسة عملاء، فاستخدم شيئا مثل هذا:

for i in 1 2 3 4 5; do sed -n ${i}~5p /tmp/foo > /tmp/client${i}; done

ولستة... الاستقراء حسب الحاجة.

for i in 1 2 3 4 5 6; do sed -n ${i}~6p /tmp/foo > /tmp/client${i}; done

ستحصل على الملفات الناتجة N ، واحد لكل عميل من عملاء N الذي يحتوي على أسماء المسار إلى دلائل المستوى الرابع التي تم الحصول عليها كجزء من الإخراج من find الأمر .

استخدم كل ملف لإنشاء أمر النسخ:

for i in 1 2 3 4 5 6; do for j in $(cat /tmp/client${i}); do echo "cp -p -R /mnt/source/${j} /mnt/destination/${j}" >> /tmp/client${i}_copy_commands ; done; done

سيعطيك ما سبق ملفات N ، كل منها مع أمر نسخ لكل سطر، والتي يمكن تشغيلها كبرنامج نصي BASH على العميل.

الهدف هو تشغيل مؤشرات ترابط متعددة من هذه البرامج النصية بشكل متزامن لكل عميل بالتوازي على عملاء متعددين.