نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول
نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول
هناك العديد من الطرق لأتمتة عملية إعداد المربع وتكوينه. لأي سبب من الأسباب ، إذا كان نظامنا بالكامل في هذه المرحلة يتألف من مربع واحد فقط ، فإن إعداد بنية تحتية كاملة لـ SCM (إدارة تكوين البرامج) هو مبالغة. تعد برامج نصية Shell أحد الخيارات ، ولكن يمكننا أيضًا استخدام نسخة مجردة من SCM والتي تتوفر في عدد قليل من الأدوات الموجودة. يعد Chef أحد الخيارات الشائعة و "chef-solo" هو وضع التكوين المستقل لـ Chef حيث لا نحتاج إلى عقدة إضافية لتكون بمثابة "خادم الشيف". كل ما تحتاجه هو عنوان URL أو مسار لحزمة tarball التي تحتوي على كتب الطهاة. مقارنة بالنصوص البرمجية ، يعتبر هذا النوع من النهج أكثر تعبيراً وفعالية خارج الصندوق وهو أيضاً مقدمة جيدة لبدء عمليات SCMs أو IaC (البنية التحتية ككود).
تحتوي "الوصفات" الموجودة في كتاب الطبخ "chef" على DSL قائم على الياقوت يصف "الموارد" لتكون في حالة معينة على عقدة. دعنا ننتقل إلى جولة إرشادية للتعرف على بعض مفاهيم الشيف التي تنطبق أيضًا على الشيف المنفرد. هدفنا هو إعداد عقدة Ubuntu تقوم بتشغيل تطبيق ويب Python / Django باستخدام Gunicorn و NGINX.
ملاحظة: لا نطلب بالضرورة تثبيت ChefDK على "محطة عمل الشيف" (الجهاز الخاص بنا) ، على الرغم من أنه باستخدامه ، يمكننا استخدام أوامر "chef الإنشاء" للبدء بهيكل دليل لإنشاء كتب الطبخ والوصفات والمزيد. في هذه المقالة ، سنفترض أن ChefDK مثبت على محطة العمل الخاصة بنا. تم تشغيل الأوامر باستخدام الإصدار 4.7.26-1 من ChefDK.
(سيتم تشغيل كل شيء من هذه النقطة فصاعدًا ، ما لم ينص على خلاف ذلك ، على جهازنا ، ويشار إليه أيضًا باسم "محطة عمل الشيف")
كتب الطهي في الطاهي هي وحدات قابلة لإعادة الاستخدام تحتوي على كل ما يلزم لدعم سيناريو التكوين. يمكن أن تحتوي كتب الطبخ على العديد من "الوصفات" و "الوصفات" تتكون في الغالب من أنماط الموارد. default.rb
هي الوصفة الافتراضية التي سيتم تشغيلها عند الإشارة إلى كتاب الطبخ في قائمة التشغيل . تسمح الوصفات المختلفة بفصل المخاوف. في هذا البرنامج التعليمي ، ومع ذلك ، سنضيف جميع إعلانات الموارد في ملف وصفة رئيسي واحد ، وهو default.rb
.
قم بإنشاء مجلد باسم "my-chef-project" وقم بإنشاء مجلد بداخله يسمى "كتب الطبخ". من ./my-chef-project/cookbooks/
، تشغيل:
$ chef generate cookbook my-cookbook
سيبدو هيكل الدليل الآن كما يلي:
.
└── my-chef-project
└── cookbooks
└── my-cookbook
├── CHANGELOG.md
├── LICENSE
├── Policyfile.rb
├── README.md
├── chefignore
├── kitchen.yml
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
الخطوة الأولى لإعداد عقدة لدينا هي تحديد الحزم التي يتطلبها تطبيقنا. تم اختيار العقدة الخاصة بنا لتكون Ubuntu ، لذا يمكننا الاعتماد على مدير حزم APT لجمع التبعيات. تثبيت الحزم التي يوفرها توزيع نظام التشغيل هو قطعة من الكعكة:
apt_update
package 'python3'
package 'python3-pip'
package 'nginx'
package 'pkg-config'
package 'libcairo2-dev'
package 'libjpeg-dev'
package 'libgif-dev'
package 'libgirepository1.0-dev'
هذه تفسر نفسها إلى حد كبير. سيقوم السطر الأول بتحديث مستودع apt وسيقوم الأسطر التالية بتثبيت هذه الحزم.
ملاحظة: الحزم التالية "nginx" مطلوبة لتجميع بعض تبعيات الثعبان من خلال النقطة. قد تختلف هذه بناءً على تبعيات مشروع python / django المحددة في
requirements.txt
. يمكنك استخدام طريقة التجربة والخطأ لتحديد هذه الحزم التي تحتاج إلى تضمينها في كتاب الطبخ الخاص بك. للقيام بذلك ، قم بإجراء دليلsudo pip install -r requirements.txt
(ملاحظة: هذا يثبت الحزم على مستوى النظام!) على جهاز أوبونتو حديثًا لمعرفة ما إذا كان يعمل بنجاح. إذا لم يكن الأمر كذلك ، يجب أن يمنحك stderr تلميحات حول الحزم المفقودة.
بمجرد الانتهاء من إضافة الحزم المطلوبة ، نحتاج إلى إنشاء مستخدم Linux غير مميز يمتلك شفرة مصدر التطبيق.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
لاحظ أن كلمة المرور هي تنسيق تجزئة ظل مستخدم في Linux. يمكن اشتقاقها باستخدام OpenSSL:
$ openssl passwd -1 -salt alilbitof mypassword
الآن دعونا نضيف كود مصدر تطبيق Django إلى كتاب الطبخ الخاص بنا. ضع التعليمات البرمجية المصدر داخل ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
إنشاء ./my-chef-project/cookbooks/my-cookbook/files/default
الدليل إذا لم يكن موجودًا.
يتم وصف تعليمات نسخ هذه الملفات إلى موقع بعيد على العقدة الخاصة بنا باستخدام مورد remote_directory :
remote_directory '/home/bob/myapp' do
source 'myapp' # This is the name of the folder containing our source code that we kept in ./my-cookbook/files/default/
owner 'bob'
group 'users'
mode '0755'
action :create
end
لتثبيت حزم بايثون requirements.txt
، يمكننا استخدام المورد التنفيذ لتشغيل أمر تعسفي. في هذه الحالة ، نحتاج إلى تنفيذ الأمر pip install عليه:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
ملاحظة: ضع في اعتبارك أن هذا سيتم تنفيذه حيث سيتم تثبيت المستخدم الجذر ومكتبات الثعبان على مستوى النظام. إذا تم تعيين العقدة الخاصة بنا لتشغيل تطبيق الثعبان الواحد هذا حصريًا ، فلن تكون مشكلة كبيرة. على الرغم من ذلك ، فإن الخيار الأفضل للحفاظ على نظافة الأشياء وعقلها هو العثور على كتاب طبخ المجتمع واستخدامه الذي يدير عمليات تثبيت الثعبان أو "Virtualenvs". (أو على الأقل ، اكتب سلسلة من كتل التنفيذ لتكرار ذلك). يضمن استخدام virtualenvs في python ألا تتأثر أي أدوات نظام تعتمد على python أو مشاريع أخرى من python
حان الوقت الآن لإعداد خادم Gunicorn WSGI HTTP مع NGINX كخادم وكيل عكسي. يستخدم Nginx أيضًا للتعامل مع جميع الأصول الثابتة من Django.
لربط Gunicorn كخدمة على Ubuntu ، يمكن استخدام Systemd. تم تضمين مورد systemd_unit في Chef منذ الإصدار 12.11.
systemd_unit 'gunicorn.service' do
content({
Unit: {
Description: 'Django on Gunicorn',
After: 'network.target',
},
Service: {
ExecStart: '/usr/local/bin/gunicorn --workers 3 --bind localhost:8080 myapp.wsgi:application',
User: 'bob',
Group: 'www-data',
WorkingDirectory: '/home/bob/myapp'
Restart: 'always',
},
Install: {
WantedBy: 'multi-user.target',
}
})
action [:create, :enable, :start]
end
علينا الآن تضمين تكوين وكيل NGINX قياسي لخادم Gunicorn هذا كما هو موضح أدناه. يمكن أن يدخل هذا المقتطف ./my-cookbook/templates/nginx.conf.erb
. قم بإنشاء دليل القوالب إذا لم يكن موجودًا.
ملاحظة: تدعم قوالب الشيف ملفات روبي المضمنة التي يمكن أن تحتوي على متغيرات وتعبيرات روبي وعبارات. على الرغم من أن هذا الملف يحتوي على امتداد 'erb' ، إلا أننا لم نستخدم أيًا من عبارات أو تعبيرات الياقوت. أيضًا ، من أجل البساطة ، لدينا فقط تكوين غير HTTPS nginx هنا (تذكير لطيف ؛ يرجى عدم القيام بذلك في الإنتاج!)
server {
listen 80;
server_name http://example.com/;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bob/myapp/myapp/static;
}
location / {
include proxy_params;
proxy_pass http://localhost:8080/;
}
}
ملاحظة: هناك أيضًا بديل وتكوين أفضل ، حيث ، على سبيل المثال ، خادم Gunicorn مرتبط بمقبس مجال unix بدلاً من اتصال استرجاع TCP. من الجدير استكشاف ذلك لأسباب الأداء.
للنسخ عبر هذا التكوين إلى المجلد الممكّن للمواقع على العقدة ، استخدم مورد القالب من Chef.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
يتم تنشيط التهيئة على nginx عادةً عن طريق إنشاء ارتباط رمزي يشير إلى التكوين sites-available
في sites-enabled
مجلد nginx . يمكن التصريح عن الروابط في كتب الطهي مع مورد الرابط كما هو موضح أدناه:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
ولحذف ارتباط التكوين الافتراضي:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
وأخيرًا ، لتنشيط خدمة nginx:
service 'nginx' do
action :enable
action :start
end
قوائم التشغيل في الطاهي هي قائمة مرتبة من الأدوار أو الوصفات في كتاب طهي سيتم تنفيذها بالتسلسل على العقدة. لدينا كتاب طبخ واحد "my-cookbook" والوصفة "الافتراضية" بداخله التي نحتاج إلى تنفيذها في مربع Ubuntu ، لذا ./my-chef-project/runlist.json
يجب أن تبدو قائمة runlist.json في دليل مشروعنا ( ) كما يلي:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
كتاب الطهي الخاص بشيف منفرد جاهز لتقديمه. حان الوقت لتوفير جهاز Ubuntu 18.04 وتثبيت ChefDK عليه:
$ ssh [email protected] 'apt-get update && yes | apt-get install curl && curl https://packages.chef.io/files/current/chefdk/4.7.45/ubuntu/18.04/chefdk_4.7.45-1_amd64.deb -o chefdk.deb && yes | dpkg -i chefdk.deb && rm chefdk.deb'
الذهاب إلى لدينا محطة الشيف ، كل ما عليك القيام به هو وضع كتب الطبخ مجلد داخل كتل القطران، ونقل أن كتل القطران جنبا إلى جنب مع runlist.json
لالعقدة البعيدة نحن المشروطة أعلاه وتشغيل الأمر الشيف منفردا:
(يتم تشغيل الأمر أدناه داخل العقدة أو "عميل الشيف" وليس محطة عمل الشيف)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
أو هنا خط واحد (يتم تشغيله من ./my-chef-project/
CWD على Chef Workstation):
tar zvcf chef-solo.tar.gz ./cookbooks &&\
scp chef-solo.tar.gz runlist.json [email protected]:~/ &&\
ssh [email protected] 'chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept'
هذا هو! شاهد المخرجات القياسية الممتلئة بنشاط الشيف الذي يحاول التقريب بين العقدة وبين ما حددته في كتب الطهي. يقوم شيف سولو بتثبيت جميع الأحجار الكريمة المطلوبة لجميع كتب الطبخ. إذا نجح الأمر chef-solo ، فسيكون لدينا تطبيق Django يعمل خلف nginx في مربع Ubuntu. انتقل إلى المجال / IP لاختباره.
ملاحظة: تذكر أنه في django قد تحتاج إلى تعيين هذا المجال / ip في
ALLOWED_HOSTS
القائمة فيsettings.py
.
كلما قمنا بإجراء تغيير في محتوى دليل المشروع الخاص بنا (الوصفات أو القوالب أو رمز مصدر التطبيق وما إلى ذلك) ، قم ببساطة بتشغيل سطر واحد أعلاه من دليل المشروع.
نصيحة: إذا تم التحكم في إصدار كتاب الطهي باستخدام git (كما ينبغي) ، فإن إحدى التوصيات الجيدة هي تعيين خطافات git لتشغيل هذه البطانة الواحدة.
إذا نظرت عن كثب إلى آخر أمر chef-solo ، فلاحظ أن --recipe-url
الغرض منه هو أخذ عنوان URL. هذا يعني أنه يمكن أن يكون لديك سير عمل حيث يقوم CI ببناء لعبة tarf-solo الخاصة بك ، وتحميلها في مكان ما وتكوين عقدة لسحبها بشكل دوري.
نصيحة: استخدم حليقة لسحب كرة القماش المتغيرة بشكل دوري كرونجوب.
curl -z $file
ستحترمIf-Modified-Since
الرؤوس وستقوم بتنزيل كرة القطران فقط إذا تم تغيير الملف البعيد منذ الطابع الزمني الموجود على المستوى المحلي الحالي$file
.
نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول
يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".
هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.
اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.
اقرأ هذا لمعرفة مدى انتشار الذكاء الاصطناعي بين الشركات الصغيرة وكيف أنه يزيد من احتمالات نموها ومنح منافسيها القدرة على التفوق.
لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟
مع تطور العلم بمعدل سريع ، واستلام الكثير من جهودنا ، تزداد أيضًا مخاطر تعريض أنفسنا إلى تفرد غير قابل للتفسير. اقرأ ، ماذا يمكن أن يعني التفرد بالنسبة لنا.
ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!
ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.
أصدرت Apple مؤخرًا macOS Catalina 10.15.4 تحديثًا تكميليًا لإصلاح المشكلات ولكن يبدو أن التحديث يتسبب في المزيد من المشكلات التي تؤدي إلى إنشاء أجهزة macOS. قراءة هذه المادة لمعرفة المزيد