Gudang data terdistribusi dalam konsep Danau Data: mulai dari mana

Dalam dunia perusahaan, ada kejenuhan dengan sistem front-end, data bus, dan sistem klasik lainnya yang telah diterapkan oleh semua orang selama 10-15 tahun terakhir. Tetapi ada satu segmen, yang sampai saat ini berada dalam status "semua orang inginkan, tetapi tidak ada yang tahu apa itu." Dan ini adalah Big Data. Kedengarannya indah, dipromosikan oleh perusahaan-perusahaan top Barat - bagaimana tidak menjadi berita gembira?



Tetapi sementara sebagian besar hanya menonton dan bertanya, beberapa perusahaan telah mulai secara aktif menerapkan solusi berdasarkan tumpukan teknologi ini ke lanskap TI mereka. Peran penting dalam hal ini dimainkan oleh kemunculan distribusi Apache Hadoop komersial, yang pengembangnya memberikan dukungan teknis kepada pelanggan mereka. Merasakan perlunya solusi seperti itu, salah satu pelanggan kami memutuskan untuk mengatur data warehouse terdistribusi dalam konsep Data Lake berdasarkan Apache Hadoop.

Tujuan proyek


Pertama, optimalkan kerja departemen manajemen risiko. Sebelum mulai bekerja, seluruh departemen terlibat dalam penghitungan faktor risiko kredit (FCR), dan semua perhitungan dilakukan secara manual. Penghitungan ulang memakan waktu sekitar satu bulan setiap kali, dan data yang mendasari itu punya waktu untuk menjadi usang. Oleh karena itu, tugas solusi termasuk pemuatan harian dari delta data ke dalam repositori, menghitung ulang PCF dan membangun data mart di alat BI (fungsi SpagoBI cukup untuk tugas ini) untuk memvisualisasikannya.


Kedua, untuk menyediakan alat Penambangan Data kinerja tinggi untuk karyawan bank yang terlibat dalam Ilmu Data. Alat-alat ini, seperti Jupyter dan Apache Zeppelin, dapat diinstal secara lokal dan juga dapat digunakan untuk mengeksplorasi data dan membangun model. Tetapi integrasi mereka dengan cluster Cloudera memungkinkan penggunaan sumber daya perangkat keras dari node sistem yang paling produktif untuk perhitungan, yang mempercepat tugas analisis data hingga puluhan atau bahkan ratusan kali.


Rak Oracle Big Data Appliance dipilih sebagai solusi perangkat keras target, jadi distribusi Clachede dari Apache Hadoop diambil sebagai dasarnya. Rak tersebut bepergian untuk beberapa waktu, dan untuk mempercepat prosesnya, server di cloud pribadi pelanggan dialokasikan untuk proyek ini. Solusinya masuk akal, tetapi ada sejumlah masalah, yang akan saya bahas di bawah ini.


Tugas-tugas berikut ini direncanakan dalam proyek:

  1. Menyebarkan CDH Cloudera (Distribusi Cloudera termasuk Apache Hadoop) dan layanan tambahan yang diperlukan untuk bekerja.
  2. Konfigurasikan perangkat lunak yang diinstal.
  3. Siapkan integrasi berkesinambungan untuk mempercepat proses pengembangan (akan dibahas dalam artikel terpisah).
  4. Instal BI-tools untuk membangun pelaporan dan alat-alat Penemuan Data untuk memastikan pekerjaan pusat data (akan dibahas dalam pos terpisah).
  5. Untuk mengembangkan aplikasi untuk mengunduh data yang diperlukan dari sistem akhir, serta pembaruan rutin mereka.
  6. Kembangkan formulir pelaporan untuk memvisualisasikan data dalam alat BI.

Ini bukan tahun pertama Neoflex mengembangkan dan mengimplementasikan sistem berbasis Apache Hadoop dan bahkan memiliki produk sendiri untuk pengembangan visual proses ETL - Neoflex Datagram. Untuk waktu yang lama saya ingin mengambil bagian dalam salah satu proyek kelas ini dan dengan senang hati mengelola sistem ini. Pengalaman itu ternyata sangat berharga dan memotivasi untuk mempelajari lebih lanjut topik ini, jadi saya segera membaginya dengan Anda. Semoga ini akan menarik.


Sumber daya


Sebelum memulai instalasi, Anda disarankan untuk menyiapkan semua yang Anda butuhkan.
Jumlah dan kekuatan zat besi secara langsung tergantung pada berapa banyak dan media mana yang perlu disebarkan. Untuk tujuan pengembangan, Anda dapat menginstal semua komponen pada setidaknya satu mesin virtual lemah, tetapi pendekatan ini tidak diterima.


Pada tahap uji coba proyek dan pengembangan aktif, ketika jumlah pengguna sistem minimal, hanya satu lingkungan utama sudah cukup - ini memungkinkan untuk mempercepat dengan mengurangi waktu memuat data dari sistem akhir (prosedur yang paling sering dan panjang untuk mengembangkan gudang data). Sekarang sistem telah stabil, kita telah sampai pada konfigurasi dengan tiga lingkungan - test, preprod dan prod (main).


Di cloud pribadi, server dialokasikan untuk mengatur 2 lingkungan - lingkungan utama dan pengujian. Spesifikasi media ditunjukkan pada tabel di bawah ini:

Janji temuJumlahvCPUvRAM, GbDisk, Gb
Lingkungan utama, layanan Cloudera38642.200
Lingkungan primer, HDFS3222885000
Lingkungan Inti, Alat Penemuan Data1161282200
Lingkungan uji, layanan Cloudera18642200
Lingkungan uji, HDFS2222564000
Lingkungan Inti, Alat Penemuan Data1161282200
Ci26481000

Kemudian, lingkungan utama bermigrasi ke Oracle BDA, dan server digunakan untuk mengatur lingkungan preprod.


Keputusan tentang migrasi dibenarkan - sumber daya yang dialokasikan untuk server HDFS secara objektif kurang. Kemacetan adalah disk kecil (apa 5 Tb untuk Data Besar?) Dan prosesor yang tidak cukup kuat, yang dimuat secara stabil pada 95% selama pekerjaan rutin tugas pemuatan data. Dengan server lain, situasinya sebaliknya - hampir sepanjang waktu mereka menganggur dan sumber daya mereka dapat digunakan untuk keuntungan besar pada proyek lain.


Dengan perangkat lunak, semuanya tidak mudah - karena fakta bahwa pengembangan dilakukan di cloud pribadi tanpa akses ke Internet, semua file harus ditransfer melalui layanan keamanan dan hanya dengan persetujuan. Dalam hal ini, saya harus memuat semua distribusi, paket, dan dependensi yang diperlukan.


Mengatur keepcache = 1 di file /etc/yum.conf (RHEL 7.3 digunakan sebagai OS) banyak membantu dalam tugas yang sulit ini - menginstal perangkat lunak yang diperlukan pada mesin dengan akses jaringan jauh lebih mudah daripada mengunduhnya secara manual dari repositori bersama dengan dependensi;)

Apa yang Anda perlu gunakan:

  1. Oracle JDK (tidak ada Java di mana pun).
  2. Database untuk menyimpan informasi yang dibuat dan digunakan oleh layanan CDH (misalnya, Hive Metastore). Dalam kasus kami, PostgreSQL versi 9.2.18 diinstal, tetapi salah satu layanan Cloudera yang didukung dapat digunakan (daftar berbeda untuk versi distribusi yang berbeda, lihat bagian Persyaratan dan Versi yang Didukung di situs web resmi). Di sini harus dicatat bahwa pilihan database tidak sepenuhnya berhasil - Oracle BDA datang dengan database MySQL (salah satu produk mereka, yang pergi ke mereka dengan pembelian Sun) dan akan lebih logis untuk menggunakan database yang sama untuk lingkungan lain, yang akan menyederhanakan proses migrasi. Disarankan untuk memilih distribusi berdasarkan solusi perangkat keras target.
  3. Daemon Chrony untuk sinkronisasi waktu di server.
  4. Server Manajer Cloudera.
  5. Demons Cloudera Manager.

Persiapan untuk instalasi


Sebelum memulai instalasi CDH, sejumlah pekerjaan persiapan harus dilakukan. Satu bagian berguna selama instalasi, yang lain akan menyederhanakan operasi.


Instalasi dan pengaturan OS


Pertama-tama, ada baiknya menyiapkan mesin virtual (dan nyata) yang akan meng-host sistem: instal versi yang didukung pada masing-masing (daftar berbeda untuk versi distribusi yang berbeda, lihat bagian "Persyaratan dan Versi yang Didukung" dari situs web resmi), tetapkan nama host adalah nama yang dapat dimengerti (misalnya, <system_name> master1,2,3 ..., <system_name> slave1,2,3 ...), serta menandai disk untuk penyimpanan file dan file sementara yang dibuat selama operasi sistem.


Rekomendasi markup adalah sebagai berikut:

  • Pada server dengan HDFS, buat volume setidaknya 500 Gb untuk file yang dibuat YARN selama bekerja dan tempatkan di direktori / yarn (di mana volume ini harus dipasang setelah menginstal CDH). Volume kecil (sekitar 100 Gb) harus dialokasikan untuk OS, layanan Cloudera, log, dan fasilitas lainnya. Semua ruang kosong yang akan tersisa setelah manipulasi ini harus digabungkan menjadi satu volume besar dan dipasang ke direktori / dfs sebelum memuat data ke dalam penyimpanan. HDFS menyimpan data dalam bentuk blok yang agak kecil dan lebih baik untuk tidak terlibat dalam transfer mereka sekali lagi. Juga, untuk kenyamanan menambahkan disk nanti, disarankan untuk menggunakan LVM - akan lebih mudah untuk memperluas penyimpanan (terutama ketika itu menjadi sangat BESAR).
  • Pada server dengan layanan Cloudera, Anda dapat me-mount semua ruang yang tersedia di direktori root - seharusnya tidak ada masalah dengan volume file yang besar, terutama jika Anda secara teratur membersihkan log. Satu-satunya pengecualian adalah server dengan basis data, yang digunakan layanan Cloudera untuk kebutuhan mereka - pada server ini masuk akal untuk menandai volume terpisah di bawah direktori di mana file-file dari basis data ini disimpan (akan tergantung pada distribusi yang dipilih). Layanan menulis cukup dan 500 Gb seharusnya lebih dari cukup. Untuk keamanan, Anda juga dapat menggunakan LVM.

Menyiapkan server http dan instalasi offline paket yum dan CDH


Karena perangkat lunak diinstal tanpa akses ke Internet, untuk menyederhanakan instalasi paket, disarankan untuk menaikkan server HTTP dan menggunakannya untuk membuat repositori lokal yang dapat diakses melalui jaringan. Anda dapat menginstal semua perangkat lunak secara lokal menggunakan, misalnya, rpm, tetapi dengan sejumlah besar server dan penampilan beberapa lingkungan, nyaman untuk memiliki repositori tunggal dari mana Anda dapat menginstal paket tanpa harus mentransfernya secara manual dari mesin ke mesin.


Instalasi dilakukan pada OS Red Hat 7.3, oleh karena itu, artikel akan berisi perintah khusus untuk itu dan sistem operasi berbasis CentOS lainnya. Ketika diinstal pada sistem operasi lain, urutannya akan serupa, hanya manajer paket yang akan berbeda.
Agar tidak menulis di mana-mana sudo, kami menganggap bahwa instalasi berasal dari root.


Inilah yang perlu Anda lakukan:
1. Mesin di mana server HTTP dan distribusi akan ditempatkan dipilih.
2. Pada mesin dengan OS serupa, tetapi terhubung ke Internet, atur flag keepcache = 1 pada file /etc/yum.conf dan httpd dengan semua dependensi diinstal:

yum install httpd 

Jika perintah ini tidak berhasil, maka Anda perlu menambahkan ke repositori yum repositori yang berisi paket-paket ini, misalnya, yang ini adalah centos.excellmedia.net/7/os/x86_64 :

 echo -e "\n[centos.excellmedia.net]\nname=excellmedia\nbaseurl=http://centos.excellmedia.net/7/os/x86_64/\nenabled=1\ngpgcheck=0" > /etc/yum.repos.d/excell.repo 

Setelah itu, menggunakan perintah repositori yum , kami memverifikasi bahwa repositori diperketat - repositori tambahan akan muncul dalam daftar repositori (repo id - centos.excellmedia.net; nama repo - excellmedia).
Sekarang periksa apakah Anda melihat paket yang kami butuhkan:

 yum list | grep httpd 

Jika output berisi paket yang diperlukan, maka Anda dapat menginstalnya dengan perintah di atas.

3. Untuk membuat repositori yum, kita memerlukan paket createrepo. Itu juga ada di repositori di atas dan diatur dengan cara yang sama:

 yum install createrepo 

4. Seperti yang saya katakan sebelumnya, layanan CDH membutuhkan database untuk berfungsi. Instal PostgreSQL untuk keperluan ini:

 yum install postgresql-server 

5. Salah satu prasyarat untuk operasi CDH yang benar adalah sinkronisasi waktu pada semua server yang termasuk dalam cluster. Untuk keperluan ini, paket chronyd digunakan (pada OS-OS di mana saya harus menggunakan CDH, itu diinstal secara default). Periksa ketersediaannya:

 chronyd -v 

Jika tidak diinstal, maka instal:

 yum install chrony 

Jika diinstal, maka unduh saja:

 yumdownloader --destdir=/var/cache/yum/x86_64/7Server/<repo id>/packages chrony 

6. Pada saat yang sama, segera unduh paket yang diperlukan untuk menginstal CDH. Mereka tersedia di archive.cloudera.com - archive.cloudera.com/cm <versi utama CDH> / <nama OS Anda> / <versi OS Anda> / x86_64 / cm / <versi lengkap CDH> / RPMS / x86_64 /. Anda dapat mengunduh paket secara manual (cloudera-manager-server dan cloudera-manager-daemon), atau menambahkan repositori dengan analogi dan menginstalnya:

 yum install cloudera-manager-daemons cloudera-manager-server 

7. Setelah instalasi, paket dan dependensinya di-cache di folder / var / cache / yum / x86_64 / 7Server / \ <repo id \> / paket. Kami mentransfernya ke mesin yang dipilih untuk server dan distribusi HTTP, dan menginstal:

 rpm -ivh < > 

8. Jalankan httpd, membuatnya terlihat dari host lain di cluster kami, dan juga menambahkannya ke daftar layanan yang mulai secara otomatis setelah memuat:

 systemctl start httpd systemctl enable httpd systemctl stop firewalld #       systemctl disable firewalld #       setenforce 0 

9. Sekarang kami memiliki server HTTP yang berfungsi. Direktori kerjanya adalah / var / www / html . Buat 2 folder di dalamnya - satu untuk repositori yum, yang lain untuk parser Cloudera (lebih lanjut tentang itu nanti):

 cd /var/www/html mkdir yum_repo parcels 

10. Untuk layanan Cloudera kita membutuhkan Java . Semua mesin memerlukan versi JDK yang sama diinstal; Cloudera merekomendasikan Hot Spot Oracle. Unduh paket distribusi dari situs web resmi (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) dan transfer ke folder yum_repo .

11. Buat repositori yum di folder yum_repo menggunakan utilitas createrepo sehingga paket JDK tersedia untuk instalasi dari mesin cluster:

 createrepo -v /var/www/html/yum_repo/ 

12. Setelah membuat repositori lokal kami di setiap host, Anda perlu menambahkan deskripsinya, mirip dengan paragraf 2:

 echo -e "\n[yum.local.repo]\nname=yum_repo\nbaseurl=http://<   httpd>/yum_repo/\nenabled=1\ngpgcheck=0" > /etc/yum.repos.d/yum_repo.repo 

Anda juga dapat melakukan pemeriksaan yang mirip dengan paragraf 2.

13. JDK tersedia, instal:

 yum install jdk1.8.0_161.x86_64 

Untuk menggunakan Java, Anda perlu mengatur variabel JAVA_HOME. Saya sarankan Anda mengekspornya segera setelah instalasi, serta menulisnya ke file / etc / environment dan / etc / default / bigtop-utils sehingga secara otomatis diekspor setelah me-restart server dan lokasinya disediakan ke layanan CDH:

 export JAVA_HOME=/usr/java/jdk1.8.0_161 echo "JAVA_HOME=/usr/java/jdk1.8.0_161" >> /etc/environment export JAVA_HOME=/usr/java/jdk1.8.0_144 >> /etc/default/bigtop-utils 

14. Dengan cara yang sama, instal chronyd pada semua mesin di cluster (kecuali, tentu saja, tidak ada):

 yum install chrony 

15. Pilih host tempat PostgreSQL akan bekerja, dan instal:

 yum install postgresql-server 

16. Demikian pula, pilih host di mana Cloudera Manager akan berjalan, dan instal:

 yum install cloudera-manager-daemons cloudera-manager-server 

17. Paket-paket diinstal, Anda dapat mulai mengkonfigurasi perangkat lunak sebelum instalasi.

Tambahan:


Selama pengembangan dan pengoperasian sistem, Anda perlu menambahkan paket ke repositori yum untuk menginstalnya pada host cluster (misalnya, distribusi Anaconda). Untuk melakukan ini, selain mentransfer file ke folder yum_repo, Anda perlu melakukan tindakan berikut:

  • pada mesin dengan httpd, jalankan perintah pembaruan repositori yum:

     createrepo -v --update /var/www/html/yum_repo/ 
  • Pada semua mesin tempat Anda ingin menginstal paket, lakukan flush cache yum:
  •  yum clean all 
  •  rm -rf /var/cache/yum 

Mengkonfigurasi perangkat lunak tambahan


Inilah saatnya untuk mengkonfigurasi PostgreSQL dan membuat basis data untuk layanan kami di masa depan. Pengaturan ini relevan untuk CDH versi 5.12.1, ketika menginstal versi distribusi lainnya, Anda disarankan untuk membaca bagian "Cloudera Manager dan Managed Service Datastores" di situs web resmi.


Untuk memulai, mari inisialisasi basis data:


 postgresql-setup initdb 

Sekarang kami mengatur interaksi jaringan dengan database. Di file /var/lib/pgsql/data/pg_hba.conf di bagian koneksi lokal IPv4, ubah metode untuk alamat 127.0.0.1/32 ke metode md5, tambahkan metode trust dan tambahkan subnet cluster dengan metode trust :

 vi /var/lib/pgsql/data/pg_hba.conf pg_hba.conf: ----------------------------------------------------------------------- # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 127.0.0.1/32 trust host all all <cluster_subnet> trust ----------------------------------------------------------------------- 

Kemudian kita akan membuat beberapa penyesuaian pada file /var/lib/pgsql/data/postgres.conf (Saya hanya akan memberikan baris yang perlu diubah atau diperiksa untuk kepatuhan:

 vi /var/lib/pgsql/data/postgres.conf postgres.conf: ----------------------------------------------------------------------- listen_addresses = '*' max_connections = 100 shared_buffers = 256MB checkpoint_segments = 16 checkpoint_completion_target = 0.9 logging_collector = on log_filename = 'postgresql-%a.log' log_truncate_on_rotation = on log_rotation_age = 1d log_rotation_size = 0 log_timezone = 'W-SU' datestyle = 'iso, mdy' timezone = 'W-SU' lc_messages = 'en_US.UTF-8' lc_monetary = 'en_US.UTF-8' lc_numeric = 'en_US.UTF-8' lc_time = 'en_US.UTF-8' default_text_search_config = 'pg_catalog.english' ----------------------------------------------------------------------- 

Setelah konfigurasi selesai, Anda perlu membuat basis data (bagi mereka yang lebih dekat dengan terminologi Oracle - skema) untuk layanan yang akan kami instal. Dalam kasus kami, layanan berikut dipasang: Layanan Manajemen Cloudera, HDFS, Hive, Hue, Impala, Oozie, Benang dan ZooKeeper. Dari semua ini, Hive, Hue, dan Oozie membutuhkan basis data, dan 2 pangkalan diperlukan untuk kebutuhan layanan Cloudera - satu untuk server Cloudera Manager, yang lain untuk manajer laporan, yang merupakan bagian dari Layanan Manajemen Cloudera. Luncurkan PostgreSQL dan tambahkan ke autoload:

 systemctl start postgresql systemctl enable postgresql 

Sekarang kita dapat terhubung dan membuat database yang diperlukan:

 sudo -u postgres psql > CREATE ROLE scm LOGIN PASSWORD '<password>'; > CREATE DATABASE scm OWNER scm ENCODING 'UTF8'; #    Cloudera Manager > CREATE ROLE rman LOGIN PASSWORD '<password>'; > CREATE DATABASE rman OWNER rman ENCODING 'UTF8'; #      > CREATE ROLE hive LOGIN PASSWORD '<password>'; > CREATE DATABASE metastore OWNER hive ENCODING 'UTF8'; #    Hive Metastore > ALTER DATABASE metastore SET standard_conforming_strings = off; #   PostgreSQL   8.2.23 > CREATE ROLE hue_u LOGIN PASSWORD '<password>'; > CREATE DATABASE hue_d OWNER hue_u ENCODING 'UTF8'; #    Hue > CREATE ROLE oozie LOGIN ENCRYPTED PASSWORD '<password>' NOSUPERUSER INHERIT CREATEDB NOCREATEROLE; > CREATE DATABASE "oozie" WITH OWNER = oozie ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1; #    Oozie    : > \q 

Untuk layanan lain, basis data dibuat dengan cara yang sama.


Jangan lupa untuk menjalankan skrip untuk menyiapkan database server Cloudera Manager, berikan data input untuk dihubungkan ke database yang dibuat untuknya:

 . /usr/share/cmf/schema/scm_prepare_database.sh postgresql scm scm <password> 

Membuat repositori dengan file CDH


Cloudera menyediakan 2 cara untuk menginstal paket menggunakan CDH dan menggunakan paket. Opsi pertama melibatkan mengunduh satu set paket dengan layanan dari versi yang diperlukan dan instalasi selanjutnya. Metode ini memberikan fleksibilitas besar dalam konfigurasi cluster, tetapi Cloudera tidak menjamin kompatibilitasnya. Oleh karena itu, versi kedua instalasi menggunakan parsel lebih populer - paket paket versi yang telah dibentuk sebelumnya. Versi terbaru tersedia di tautan berikut: archive.cloudera.com/cdh5/parcels/latest . Sebelumnya dapat ditemukan level yang lebih tinggi. Selain parsel dari CDH, Anda perlu mengunduh manifest.json dari direktori repositori yang sama.


Untuk menggunakan fungsionalitas yang dikembangkan, kami juga membutuhkan Spark 2.2, yang tidak termasuk dalam paket CDH (versi pertama dari layanan ini tersedia di sana). Untuk menginstalnya, Anda perlu mengunduh paket terpisah dengan layanan ini dan manifest.json yang sesuai, juga tersedia di arsip Cloudera .


Setelah memuat parsel dan manifest.json, Anda perlu mentransfernya ke folder yang sesuai di repositori kami. Buat folder terpisah untuk file CDH dan Spark:

 cd /var/www/html/parcels mkdir cdh spark 

Transfer file parsel dan manifest.json ke folder yang dibuat. Untuk membuatnya tersedia untuk instalasi melalui jaringan, kami mengeluarkan folder izin akses yang sesuai dengan parsel:

 chmod -R ugo+rX /var/www/html/parcels 

Anda dapat mulai menginstal CDH, yang akan saya bahas di posting berikutnya.

Source: https://habr.com/ru/post/id413149/


All Articles