Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1
Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1
Terdapat banyak cara untuk mengotomatisasi proses penyediaan dan konfigurasi kotak. Walau apa pun alasannya, jika keseluruhan sistem kita pada masa ini hanya terdiri dari satu kotak, penyediaan infrastruktur SCM (Pengurusan Konfigurasi Perisian) penuh. Skrip shell adalah salah satu pilihan, tetapi kami juga dapat menggunakan versi SCM yang dilucutkan yang tersedia dalam beberapa alat di luar sana. Chef adalah salah satu pilihan yang popular dan "chef-solo" adalah mod konfigurasi mandiri Chef di mana kami tidak memerlukan simpul tambahan untuk bertindak sebagai "pelayan chef". Yang diperlukannya hanyalah URL atau jalan ke pakej tarball yang mengandungi buku masakan tukang masak. Berbanding dengan skrip shell, pendekatan jenis ini lebih bersifat deklaratif dan efisien di luar kotak dan juga merupakan pengenalan yang baik untuk memulakan proses SCM atau IaC (Infrastruktur sebagai Kod).
'Resipi' di dalam koki 'buku masakan' mempunyai DSL berasaskan ruby yang menggambarkan 'sumber' berada dalam keadaan tertentu pada simpul. Mari kita ikuti panduan untuk mengetahui beberapa konsep Chef yang juga berlaku untuk chef-solo. Tujuan kami adalah untuk menyiapkan node Ubuntu yang menjalankan aplikasi web Python / Django menggunakan Gunicorn dan NGINX.
Catatan: Kami tidak semestinya memerlukan ChefDK dipasang di "Chef workstation" (mesin kami), walaupun dengannya, kami dapat menggunakan perintah 'chef menghasilkan' untuk memulakan dengan struktur direktori untuk membuat buku masakan, resipi dan banyak lagi. Dalam artikel ini, kami akan menganggap ChefDK dipasang di stesen kerja kami. Perintah dijalankan menggunakan versi 4.7.26-1 ChefDK.
(Segala-galanya dari saat ini dan seterusnya, kecuali dinyatakan sebaliknya, akan dijalankan di mesin kami, juga disebut sebagai 'Chef Workstation')
Buku masakan di koki adalah unit yang dapat digunakan kembali yang mengandungi semua yang diperlukan untuk menyokong senario konfigurasi. Buku masakan boleh mengandungi pelbagai 'resipi' dan 'resipi' yang kebanyakannya terdiri daripada corak sumber. default.rb
adalah resipi lalai yang akan dijalankan semasa buku masakan dirujuk dalam senarai larian . Resipi yang berbeza memungkinkan untuk memisahkan masalah. Akan tetapi, untuk tutorial ini, kami akan menambahkan semua deklarasi sumber dalam satu fail resipi utama, yang merupakan default.rb
.
Buat folder bernama "my-chef-project" dan buat folder di dalamnya yang disebut "buku masakan". Dari ./my-chef-project/cookbooks/
, jalankan:
$ chef generate cookbook my-cookbook
Struktur direktori kami sekarang akan kelihatan seperti ini:
.
└── 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
Langkah pertama untuk menyiapkan simpul kami adalah mengenal pasti pakej apa yang diperlukan oleh aplikasi kami. Node kami dipilih untuk menjadi Ubuntu, jadi kita boleh bergantung pada pengurus pakej APT untuk mengumpulkan pergantungan. Memasang pakej yang disediakan oleh pengedaran OS adalah sekeping kek:
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'
Ini cukup jelas. Baris pertama akan mengemas kini repositori apt dan baris berikut akan memasang pakej tersebut.
Catatan: Pakej berikut 'nginx' diperlukan untuk menyusun beberapa pergantungan python melalui pip. Ini mungkin berbeza berdasarkan kebergantungan projek python / django anda yang dinyatakan dalam
requirements.txt
. Anda boleh menggunakan kaedah percubaan dan ralat untuk menentukan pakej ini yang perlu anda sertakan dalam buku masakan anda. Untuk melakukannya, jalankan manualsudo pip install -r requirements.txt
(Catatan: Ini memasang sistem pakej dengan lebar!) Pada mesin ubuntu yang baru dibuat untuk melihat apakah ia berjaya. Sekiranya tidak, stderr harus memberi anda petunjuk mengenai pakej apa yang tidak ada.
Setelah selesai menambahkan pakej yang diperlukan, kita perlu membuat pengguna Linux yang tidak istimewa yang akan memiliki kod sumber aplikasi.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Perhatikan bahawa kata laluan adalah format bayangan hash yang digunakan di Linux. Ia boleh diperoleh dengan menggunakan OpenSSL:
$ openssl passwd -1 -salt alilbitof mypassword
Sekarang mari sertakan kod sumber aplikasi Django ke buku masakan kami. Letakkan kod sumber di dalam ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
Buat ./my-chef-project/cookbooks/my-cookbook/files/default
direktori jika tidak ada.
Arahan untuk menyalin fail ini ke lokasi terpencil di simpul kami dijelaskan menggunakan sumber jauh_direktori :
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
Untuk memasang paket python requirements.txt
, kita dapat menggunakan sumber eksekusi untuk menjalankan perintah sewenang-wenangnya. Dalam kes ini, kita perlu melaksanakan perintah pemasangan pip di atasnya:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
Catatan: Perlu diingat bahawa ini akan dilaksanakan kerana pengguna root dan python library akan dipasang di seluruh sistem. Sekiranya simpul kami ditetapkan untuk menjalankan aplikasi python tunggal ini secara eksklusif, maka tidak banyak masalah. Walaupun begitu, pilihan yang lebih baik untuk menjaga kebersihan dan waras adalah mencari dan menggunakan buku masakan komuniti yang menguruskan pemasangan python atau 'virtualenvs'. (atau sekurang-kurangnya, menulis satu siri melaksanakan blok untuk meniru ini). Menggunakan virtualenvs di python memastikan bahawa sebarang alat sistem berasaskan python atau projek python lain tidak akan terjejas
Kini tiba masanya untuk menyediakan Pelayan HTTP Gunicorn WSGI dengan NGINX sebagai proksi terbalik kami. Nginx juga digunakan untuk menangani semua aset statik dari Django.
Untuk mendapatkan Gunicorn sebagai perkhidmatan di Ubuntu, Systemd dapat digunakan. The systemd_unit sumber termasuk dalam Chef sejak versi 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
Sekarang kita harus memasukkan konfigurasi proksi NGINX standard ke pelayan Gunicorn ini seperti yang ditunjukkan di bawah. Coretan ini boleh masuk ./my-cookbook/templates/nginx.conf.erb
. Buat direktori templat jika tidak ada.
Catatan: Templat Chef menyokong fail ruby tertanam yang boleh mengandungi pemboleh ubah, ungkapan ruby dan pernyataan. Walaupun fail ini mempunyai pelanjutan 'erb', kami tidak menggunakan penyataan atau ungkapan ruby. Demi kesederhanaan, kami hanya mempunyai konfigurasi nginx bukan HTTPS di sini (peringatan lembut; jangan lakukan ini dalam pengeluaran!)
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/;
}
}
Catatan: Terdapat juga alternatif dan konfigurasi yang lebih baik, di mana, misalnya, server Gunicorn terikat pada soket domain unix dan bukan sambungan loopback TCP. Perlu diterokai kerana alasan prestasi.
Untuk menyalin konfigurasi ini ke folder yang didayakan laman pada node, gunakan sumber templat dari Chef.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Mengaktifkan konfigurasi pada nginx biasanya dilakukan dengan membuat symlink yang menunjuk ke konfigurasi di folder sites-available
nginx sites-enabled
. Symlink dapat dinyatakan dalam buku masakan koki dengan sumber pautan seperti yang ditunjukkan di bawah:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
dan untuk menghapus symlink konfigurasi lalai:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
Dan akhirnya, untuk menghidupkan perkhidmatan nginx:
service 'nginx' do
action :enable
action :start
end
Run-list di chef adalah senarai peranan atau resipi yang disusun dalam buku masakan yang akan dilaksanakan secara berurutan pada simpul. Kami mempunyai satu buku masakan "buku masakan saya" dan resipi "lalai" di dalamnya yang perlu kami laksanakan di kotak Ubuntu, jadi runlist.json dalam direktori projek kami ( ./my-chef-project/runlist.json
) akan kelihatan seperti ini:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Buku masakan kami untuk Chef solo siap dihidangkan. Sudah tiba masanya untuk menyediakan mesin Ubuntu 18.04 dan memasang ChefDK padanya:
$ 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'
Kembali ke stesen kerja Chef kami , yang perlu kami lakukan adalah meletakkan folder buku masakan di dalam tarball, memindahkan tarball itu bersama dengan runlist.json
node jarak jauh yang kami sediakan di atas dan menjalankan perintah chef-solo:
(Perintah di bawah ini akan dijalankan di dalam nod atau 'chef client' dan bukan Chef Workstation)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
Atau inilah satu-kapal (Untuk dijalankan dari ./my-chef-project/
CWD di 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'
Itu sahaja! Tonton output standard yang diisi dengan aktiviti Chef yang cuba menggabungkan simpul anda dengan apa yang telah anda tentukan dalam buku masakan. Chef-solo akan memasang semua permata yang diperlukan untuk semua buku masakan. Sekiranya arahan chef-solo berjaya, kita akan mempunyai aplikasi Django yang berfungsi berjalan di belakang nginx pada kotak Ubuntu. Navigasi ke domain / IP untuk mengujinya.
Catatan: Ingat bahawa di django anda mungkin perlu menetapkan domain / ip ini dalam
ALLOWED_HOSTS
senarai disettings.py
.
Setiap kali kami membuat perubahan dalam kandungan direktori projek kami (resipi, templat atau kod sumber aplikasi dll), jalankan satu-pelapis di atas dari direktori projek.
Petua: Sekiranya buku masakan dikendalikan versi dengan git (sebagaimana mestinya), satu cadangan yang baik adalah menetapkan git hook untuk menjalankan satu-pelapik ini.
Sekiranya anda memerhatikan perintah chef-solo terakhir, perhatikan bahawa --recipe-url
ia dimaksudkan untuk mengambil URL. Ini bermaksud bahawa anda boleh mempunyai aliran kerja di mana CI akan membina tarball solo-chef anda, memuat naiknya di suatu tempat dan mengkonfigurasi nod anda untuk menariknya secara berkala.
Petua: Gunakan curl untuk menarik tarball yang berubah secara berkala sebagai cronjob.
curl -z $file
akan menghormatiIf-Modified-Since
tajuk dan hanya akan memuat turun tar bola jika fail jauh telah diubah sejak cap waktu di kawasan yang ada$file
.
Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1
Ramai daripada anda tahu Switch akan keluar pada Mac 2017 dan ciri baharunya. Bagi yang tidak tahu, kami telah menyediakan senarai ciri yang menjadikan 'Tukar' sebagai 'gajet yang mesti ada'.
Adakah anda menunggu gergasi teknologi memenuhi janji mereka? semak apa yang masih belum dihantar.
Baca blog untuk mengetahui lapisan berbeza dalam Seni Bina Data Besar dan fungsinya dengan cara yang paling mudah.
Baca ini untuk mengetahui cara Kecerdasan Buatan semakin popular di kalangan syarikat berskala kecil dan cara ia meningkatkan kebarangkalian untuk menjadikan mereka berkembang dan memberikan pesaing mereka kelebihan.
CAPTCHA telah menjadi agak sukar untuk diselesaikan oleh pengguna dalam beberapa tahun kebelakangan ini. Adakah ia dapat kekal berkesan dalam pengesanan spam dan bot pada masa hadapan?
Apabila Sains Berkembang pada kadar yang pantas, mengambil alih banyak usaha kita, risiko untuk menundukkan diri kita kepada Ketunggalan yang tidak dapat dijelaskan juga meningkat. Baca, apakah makna ketunggalan bagi kita.
Apakah teleperubatan, penjagaan kesihatan jauh dan impaknya kepada generasi akan datang? Adakah ia tempat yang baik atau tidak dalam situasi pandemik? Baca blog untuk mencari paparan!
Anda mungkin pernah mendengar bahawa penggodam memperoleh banyak wang, tetapi pernahkah anda terfikir bagaimana mereka memperoleh wang seperti itu? Mari berbincang.
Baru-baru ini Apple mengeluarkan macOS Catalina 10.15.4 kemas kini tambahan untuk menyelesaikan masalah tetapi nampaknya kemas kini itu menyebabkan lebih banyak masalah yang membawa kepada pemusnahan mesin mac. Baca artikel ini untuk mengetahui lebih lanjut