Tutorial Apache Flume: Apa itu, Archicontoh tekstur & Hadoop

⚡ Ringkasan Cerdas

Apache Flume adalah layanan terdistribusi untuk mengumpulkan, menggabungkan, dan memindahkan sejumlah besar data log ke HDFS, yang dibangun di sekitar agen yang menghubungkan sumber, saluran, dan tujuan secara berantai.

  • 🔘 Anatomi agen: Setiap agen Flume adalah proses JVM yang memegang sumber, satu atau lebih saluran, dan sink.
  • ☑️ Keandalan: Pengiriman dengan upaya terbaik tidak mentolerir kegagalan node; pengiriman ujung-ke-ujung tetap bertahan meskipun terjadi beberapa kegagalan node.
  • Setup: Kelas sumber kustom dikompilasi menjadi file JAR yang kemudian ditempatkan ke dalam direktori lib Flume.
  • 🧪 Konfigurasi: Satu file properti memberi nama sumber, saluran, dan tujuan serta menetapkan jalur HDFS dan batasan roll.
  • Meluncurkan: Mulai pipeline dengan agen flume-ng, beri nama agen dan arahkan ke flume.conf.
  • ⚠️ Contoh yang sudah ketinggalan zaman: Endpoint streaming Twitter v1.1 ditutup pada Maret 2023, jadi anggap latihan ini sebagai pola sumber kustom.

Tutorial Apache Flume yang membahas arsitektur agen, konfigurasi, dan contoh streaming Hadoop.

Apa itu Apache Flume di Hadoop?

Apache Flume adalah sistem yang andal dan terdistribusi untuk mengumpulkan, menggabungkan, dan memindahkan sejumlah besar data log. Sistem ini memiliki arsitektur yang sederhana namun fleksibel berdasarkan aliran data streaming. Apache Flume digunakan untuk mengumpulkan data log yang terdapat dalam file log dari server web dan menggabungkannya menjadi beberapa bagian. HDFS untuk analisis.

Flume di Hadoop mendukung berbagai sumber, termasuk:

  • 'tail' (yang mengalirkan data dari file lokal dan menuliskannya ke HDFS melalui Flume, mirip dengan perintah Unix 'tail')
  • Log sistem
  • Apache log4j (yang memungkinkan) Java aplikasi untuk menulis acara ke file dalam HDFS melalui Flume).

Rilis saat ini adalah Flume 1.11.0, diterbitkan pada 25 Oktober 2022 dan tersedia dari Halaman unduhan Apache FlumePanduan ini ditulis berdasarkan versi 1.4.0, jadi beberapa langkah di bawah ini memiliki catatan di mana versi terbaru berperilaku berbeda.

Mengalir Architekstur

Agen Flume adalah seorang FMV Suatu proses dengan tiga komponen – sumber Flume, saluran Flume, dan sink Flume – di mana peristiwa merambat setelah dipicu di sumber eksternal. Diagram di bawah ini menunjukkan bagaimana ketiganya terhubung.

Diagram arsitektur Flume yang menunjukkan agen dengan sumber, saluran, dan sink yang memberi makan HDFS.

  1. Peristiwa yang dihasilkan oleh sumber eksternal (server web) dikonsumsi oleh sumber Flume. Sumber eksternal mengirimkan peristiwa ke sumber Flume dalam format yang dikenali oleh sumber target.
  2. Sumber Flume menerima sebuah peristiwa dan menyimpannya ke dalam satu atau lebih saluran. Saluran tersebut bertindak sebagai penyimpanan yang menjaga peristiwa tersebut hingga dikonsumsi oleh penerima Flume. Saluran ini dapat menggunakan sistem file lokal untuk menyimpan peristiwa-peristiwa ini.
  3. Flume sink menghapus event dari sebuah channel dan menyimpannya ke dalam repositori eksternal seperti HDFS. Mungkin ada beberapa agent Flume, dalam hal ini Flume sink meneruskan event tersebut ke source Flume dari agent berikutnya dalam alur kerja.

Beberapa Fitur Penting dari Flume

  • Flume memiliki desain fleksibel yang berbasis pada aliran data streaming. Sistem ini toleran terhadap kesalahan dan tangguh, dengan berbagai mekanisme failover dan pemulihan. Flume menawarkan berbagai tingkat keandalan, termasuk 'pengiriman upaya terbaik' ke 'pengiriman ujung ke ujung'. Pengiriman dengan upaya terbaik tidak mentolerir kegagalan node Flume apa pun, sedangkan pengiriman ujung ke ujung menjamin pengiriman bahkan jika terjadi kegagalan pada beberapa node.
  • Flume mentransfer data antara sumber dan tujuan. Pengumpulan data ini dapat dijadwalkan atau berdasarkan peristiwa. Flume memiliki mesin pemrosesan kueri sendiri, yang memudahkan transformasi setiap kumpulan data baru sebelum dipindahkan ke tujuan yang dimaksud.
  • Mungkin Flume tenggelam termasuk HDFS dan HBaseFlume juga dapat mentransfer data peristiwa seperti data lalu lintas jaringan, data yang dihasilkan oleh situs web media sosial, dan pesan email.

Penyiapan Flume, pustaka, dan kode sumber

Sebelum kita memulai proses sebenarnya, pastikan Anda telah menginstal Hadoop; jika belum, ikuti langkah-langkah berikut. cara menginstal Hadoop Pertama, ubah pengguna menjadi 'hduser' (ID yang digunakan saat mengkonfigurasi Hadoop; Anda dapat beralih ke ID pengguna yang digunakan selama konfigurasi Hadoop Anda sendiri).

Terminal mengganti pengguna Linux ke hduser sebelum pengaturan Flume dimulai.

Langkah 1) Buat direktori baru dengan nama 'FlumeTutorial'.

sudo mkdir FlumeTutorial
  1. Berikan izin baca, tulis, dan eksekusi.
    sudo chmod -R 777 FlumeTutorial
  2. Salin file-file tersebut Sumber Twitter Saya.java ke MyTwitterSourceForFlume.java ke dalam direktori ini.

Unduh File Masukan Dari Sini

Periksa izin akses semua file ini, seperti di bawah ini, dan berikan izin 'baca' jika izin tersebut belum ada.

Terminal menampilkan izin akses file pada file yang diunduh. Java berkas sumber

Langkah 2) Unduh 'Apache Flume' dari https://flume.apache.org/download.html.

Apache Flume 1.4.0 telah digunakan dalam tutorial Flume ini.

Halaman unduhan Apache Flume yang menampilkan tautan tarball biner untuk dipilih.

Selanjutnya, klik tautan ke halaman mirror.

Halaman mirror Apache dapat diakses setelah mengklik tautan tarball Flume.

Langkah 3) Salin file tarball yang diunduh ke direktori pilihan Anda dan jalankan.tracTampilkan isi menggunakan perintah berikut.

sudo tar -xvf apache-flume-1.4.0-bin.tar.gz

Terminal extracMengekstraksi file tar Flume dengan perintah sudo tar -xvf

Ini akan membuat direktori baru bernama apache-flume-1.4.0-bin dan extracmemasukkan file-file tersebut ke dalamnya. Direktori tersebut disebut sebagai di bagian selanjutnya dari artikel ini.

Langkah 4) Instalasi pustaka Flume. Salin twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar dan flume-ng-sdk-1.4.0.jar ke

/lib/

Salah satu atau semua file JAR yang disalin mungkin memiliki izin eksekusi, yang dapat menyebabkan masalah pada kompilasi kode, jadi cabut izin tersebut. Dalam kasus saya, twitter4j-core-4.0.1.jar memiliki izin eksekusi. Saya mencabutnya seperti di bawah ini.

sudo chmod -x twitter4j-core-4.0.1.jar

Terminal mencabut izin eksekusi pada JAR inti twitter4j.

Setelah itu, perintah di bawah ini memberikan izin 'baca' pada twitter4j-core-4.0.1.jar kepada semua pengguna.

sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar

Harap dicatat bahwa saya mengunduh twitter4j-core-4.0.1.jar dari Repositori Maven, dan semua JAR Flume, yaitu flume-ng-*-1.4.0.jar, dari artefak org.apache.flume.

Muat data dari Twitter menggunakan Flume

Langkah 1) Masuk ke direktori yang berisi file kode sumber.

Langkah 2) Atur CLASSPATH agar berisi /lib/* dan ~/FlumeTutorial/flume/mytwittersource/*.

export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"

Terminal mengekspor CLASSPATH yang mengarah ke direktori lib dan source Flume.

Langkah 3) Kompilasi kode sumber menggunakan perintah di bawah ini.

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Terminal sedang mengkompilasi keduanya. Java file sumber dengan javac

Langkah 4) Buat file JAR. Pertama, buat file Manifest.txt menggunakan editor teks pilihan Anda dan tambahkan baris di bawah ini ke dalamnya.

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

Di sini, `flume.mytwittersource.MyTwitterSourceForFlume` adalah nama kelas utama. Harap perhatikan bahwa Anda harus menekan tombol Enter di akhir baris ini, seperti yang ditunjukkan di bawah ini.

Buka Manifest.txt di editor teks dengan entri Main-Class.

Sekarang, buat file JAR 'MyTwitterSourceForFlume.jar' sebagai berikut.

jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class

Terminal mengemas kelas-kelas yang telah dikompilasi ke dalam MyTwitterSourceForFlume.jar

Langkah 5) Salin file JAR ini ke /lib/.

sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/

Terminal menyalin file JAR sumber kustom ke direktori lib Flume.

Langkah 6) Masuk ke direktori konfigurasi Flume, /konflik.

Jika file flume.conf tidak ada, salin file flume-conf.properties.template dan ganti namanya menjadi flume.conf.

sudo cp flume-conf.properties.template flume.conf

Terminal menyalin flume-conf.properties.template ke flume.conf

Jika file flume-env.sh tidak ada, salin file flume-env.sh.template dan ganti namanya menjadi flume-env.sh.

sudo cp flume-env.sh.template flume-env.sh

Terminal menyalin flume-env.sh.template ke flume-env.sh

Membuat Aplikasi Twitter

Baca ini dulu. Streaming v1.1 statuses/filter Endpoint yang dibutuhkan twitter4j 4.0.1 telah dihentikan pada 9 Maret 2023, dan API v2 yang memfilter aliran yang menggantikannya, sekarang berada di pengembang.x.com, berada di balik tingkatan berbayar. Perlakukan layar di bawah ini sebagai pola sumber kustom, lalu arahkan agen yang sama ke file, eksekusi, atau sumber Kafka.

Langkah 1) Buat aplikasi Twitter dengan masuk ke portal pengembang.

Halaman masuk pengembang Twitter digunakan untuk mengakses daftar aplikasi.

Halaman beranda akun pengembang Twitter yang ditampilkan setelah masuk.

Langkah 2) Buka 'Aplikasi saya' (opsi ini akan muncul saat tombol 'Telur' di pojok kanan atas diklik).

Halaman Aplikasi Saya di portal pengembang Twitter

Langkah 3) Buat aplikasi baru dengan mengklik 'Buat Aplikasi Baru'.

Langkah 4) Isilah detail aplikasi dengan menentukan nama aplikasi, deskripsi, dan situs web. Anda dapat merujuk pada catatan yang diberikan di bawah setiap kotak input.

Formulir pembuatan aplikasi Twitter dengan kolom nama, deskripsi, dan situs web.

Langkah 5) Gulir ke bawah halaman, setujui persyaratan dengan memberi tanda 'Ya, saya setuju' dan klik tombol 'Buat aplikasi Twitter Anda'.

Kotak centang Persyaratan dan tombol Buat Aplikasi di bagian bawah formulir Twitter

Langkah 6) Pada jendela aplikasi yang baru dibuat, buka tab 'Kunci API', gulir ke bawah halaman, lalu klik tombol 'Buat token akses saya'.

Tab Kunci API di aplikasi Twitter baru sebelum token akses ada.

Detail token akses akan ditampilkan setelah tombol Buat token akses saya digunakan.

Langkah 7) Segarkan halaman.

Langkah 8) Klik 'Uji OAuth'. Ini akan menampilkan pengaturan 'OAuth' aplikasi.

Layar uji OAuth yang menampilkan pengaturan OAuth aplikasi.

Langkah 9) Ubah file 'flume.conf' menggunakan pengaturan OAuth ini. Langkah-langkah untuk mengubah file 'flume.conf' diberikan di bawah ini.

Pengaturan OAuth yang mencantumkan nilai kunci konsumen, rahasia konsumen, dan token akses.

Kita perlu menyalin kunci konsumen, rahasia konsumen, token akses, dan rahasia token akses untuk memperbarui 'flume.conf'.

Catatan: Nilai-nilai ini milik pengguna dan karenanya bersifat rahasia, jadi tidak boleh dibagikan.

Ubah File 'flume.conf'

Langkah 1) Buka 'flume.conf' dalam mode tulis dan atur nilai untuk parameter di bawah ini.

sudo gedit flume.conf

Salin isi di bawah ini.

MyTwitAgent.sources = Twitter
MyTwitAgent.channels = MemChannel
MyTwitAgent.sinks = HDFS
MyTwitAgent.sources.Twitter.type = flume.mytwittersource.MyTwitterSourceForFlume
MyTwitAgent.sources.Twitter.channels = MemChannel
MyTwitAgent.sources.Twitter.consumerKey = <Copy consumer key value from Twitter App>
MyTwitAgent.sources.Twitter.consumerSecret = <Copy consumer secret value from Twitter App>
MyTwitAgent.sources.Twitter.accessToken = <Copy access token value from Twitter App>
MyTwitAgent.sources.Twitter.accessTokenSecret = <Copy access token secret value from Twitter App>
MyTwitAgent.sources.Twitter.keywords = guru99
MyTwitAgent.sinks.HDFS.channel = MemChannel
MyTwitAgent.sinks.HDFS.type = hdfs
MyTwitAgent.sinks.HDFS.hdfs.path = hdfs://localhost:54310/user/hduser/flume/tweets/
MyTwitAgent.sinks.HDFS.hdfs.fileType = DataStream
MyTwitAgent.sinks.HDFS.hdfs.writeFormat = Text
MyTwitAgent.sinks.HDFS.hdfs.batchSize = 1000
MyTwitAgent.sinks.HDFS.hdfs.rollSize = 0
MyTwitAgent.sinks.HDFS.hdfs.rollCount = 10000
MyTwitAgent.channels.MemChannel.type = memory
MyTwitAgent.channels.MemChannel.capacity = 10000
MyTwitAgent.channels.MemChannel.transactionCapacity = 1000

Buka file flume.conf di editor dengan properti sumber, saluran, dan tujuan MyTwitAgent.

Langkah 2) Selain itu, atur TwitterAgent.sinks.HDFS.hdfs.path seperti di bawah ini.

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweet/

Properti hdfs.path sink HDFS diatur ke nama host, nomor port, dan direktori home HDFS.

Untuk menemukan , Dan , lihat nilai parameter 'fs.defaultFS' yang diatur dalam $HADOOP_HOME/etc/hadoop/core-site.xml, seperti yang ditunjukkan di bawah ini.

Properti fs.defaultFS di dalam core-site.xml, yang menyediakan nama host dan port.

Langkah 3) Untuk memindahkan data ke HDFS saat data tersebut tiba, hapus entri di bawah ini jika ada.

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Contoh: Streaming Data Twitter menggunakan Flume

Langkah 1) Buka 'flume-env.sh' dalam mode tulis dan atur nilai untuk parameter di bawah ini.

JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"

Buka file flume-env.sh di editor dengan variabel lingkungan JAVA_HOME dan FLUME_CLASSPATH sudah diatur.

Langkah 2) Mulai Hadoop.

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Langkah 3) Dua file JAR dari tarball Flume tidak kompatibel dengan Hadoop 2.2.0, jadi dalam contoh Apache Flume ini kita mengikuti langkah-langkah di bawah ini untuk membuat Flume kompatibel dengan Hadoop 2.2.0. Penggantian JAR ini adalah perbaikan era 1.4.0; Flume 1.11.0 sudah menyertakan build protobuf dan Guava terbaru, jadi tarball modern biasanya tidak memerlukannya.

a. Pindahkan protobuf-java-2.4.1.jar keluar dari ' /lib'. Masuk ke direktori itu terlebih dahulu.

CD /lib

sudo mv protobuf-java-2.4.1.jar ~/

Terminal memindahkan protobuf-java-2.4.1.jar keluar dari direktori lib Flume.

b. Temukan file JAR 'guava' seperti di bawah ini.

find . -name "guava*"

Perintah terminal find untuk menemukan file JAR guava yang terbundel.

Pindahkan guava-10.0.1.jar keluar dari ' /lib'.

sudo mv guava-10.0.1.jar ~/

Terminal memindahkan guava-10.0.1.jar keluar dari direktori lib Flume.

c. Unduh guava-17.0.jar dari Repositori Maven, ditunjukkan di bawah ini.

Halaman repositori Maven untuk guava 17.0, JAR pengganti untuk diunduh

Sekarang, salin file JAR yang telah diunduh ini ke ' /lib'.

Langkah 4) Pergi ke ' /bin' dan jalankan Flume sebagai berikut.

./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf

Terminal menjalankan agen Flume bernama MyTwitAgent dengan perintah flume-ng.

Tampilan jendela command prompt tempat Flume mengambil tweet terlihat seperti ini.

Tampilan command prompt yang menunjukkan agen Flume mengambil tweet dan menuliskannya ke HDFS.

Dari pesan jendela perintah, kita dapat melihat bahwa output ditulis ke direktori /user/hduser/flume/tweets/. Sekarang, buka direktori ini menggunakan peramban web.

Langkah 5) Untuk melihat hasil pemuatan data, buka http://localhost:50070/ di browser, telusuri sistem file, lalu masuk ke direktori tempat data telah dimuat, yaitu

/flume/tweet/

Port 50070 adalah antarmuka pengguna web NameNode pada Hadoop 2; Hadoop 3 memindahkan halaman yang sama ke port 9870.

Browser HDFS menampilkan direktori flume/tweets dengan file tweet yang telah dimuat.

Flume adalah setengah dari proses penyerapan: Skup mengimpor tabel secara bertahap, Flume mengalirkan peristiwa, lalu Babi or Sarang lebah bentuk file dan Oozie menjadwalkan rantai tersebut. Lihat juga alat analisis data besar, Penggabungan dan penghitung MapReduce ke Talend.

Pertanyaan Umum Demo Slot

Tidak seperti yang tertulis. Endpoint status/filter streaming v1.1 telah dihentikan pada 9 Maret 2023 dan pengganti API v2 memerlukan tingkatan berbayar. Mekanisme Flume masih berlaku sebagai latihan sumber kustom.

Model tersebut menetapkan volume log normal dan bentuk pesan sebagai acuan, kemudian menandai penyimpangan yang tidak terdeteksi oleh ambang batas tetap. Mereka juga mengelompokkan tumpukan berulang. tracmenggabungkan semuanya menjadi satu insiden dan menyusun penyebab yang mungkin, sehingga mempersingkat proses triase.

Copilot membuat draf blok sumber, saluran, dan tujuan dengan cepat, tetapi ia menciptakan nama properti dan mencampur rilis. Periksa setiap kunci terhadap Panduan Pengguna Flume untuk versi Anda sebelum memulai agen.

Flume mengalirkan data peristiwa seperti log secara terus menerus ke HDFS. Sqoop memindahkan tabel terstruktur antara basis data relasional dan Hadoop dalam batch terjadwal. Keduanya mencakup bagian yang berbeda dari proses penyerapan data dan saling melengkapi dengan baik.

Saluran memori adalah yang tercepat tetapi kehilangan peristiwa yang di-buffer jika agen mati. Saluran file menulis ke disk dan tetap berfungsi meskipun agen dihidupkan ulang, dengan throughput yang lebih rendah. Utamakan daya tahan untuk apa pun yang tidak dapat Anda kirim ulang.

Kafka kini menjadi pilihan default karena mampu menyimpan data dan melayani banyak konsumen. Flume 1.11.0, yang dirilis Oktober 2022, masih cocok untuk pengumpulan log satu arah sederhana ke HDFS.

Hampir selalu terjadi bentrokan JAR: tarball Flume menggabungkan versi Guava dan protobuf-nya sendiri, yang bertentangan dengan versi yang dimuat oleh Hadoop. Menghapus JAR bawaan yang lebih lama biasanya menyelesaikan masalah ini.

Mereka menentukan kapan sink menutup file dan membuka file baru: rollSize berdasarkan byte, rollCount berdasarkan jumlah kejadian, rollInterval berdasarkan detik. Angka nol menonaktifkan pemicu tertentu itu.

Ringkaslah postingan ini dengan: