Tutorial HDFS: Arsitektur, Baca & Operasi Tulis menggunakan Java API

Daftar Isi:

Anonim

Apakah HDFS itu?

HDFS adalah sistem file terdistribusi untuk menyimpan file data yang sangat besar, berjalan pada kelompok perangkat keras komoditas. Ini toleran terhadap kesalahan, dapat diskalakan, dan sangat mudah untuk dikembangkan. Hadoop dibundel dengan HDFS ( Hadoop Distributed File Systems ).

Ketika data melebihi kapasitas penyimpanan pada satu mesin fisik, menjadi penting untuk membaginya ke sejumlah mesin terpisah. Sistem file yang mengelola operasi khusus penyimpanan di seluruh jaringan mesin disebut sistem file terdistribusi. HDFS adalah salah satu perangkat lunak semacam itu.

Dalam tutorial ini, kita akan belajar,

  • Apakah HDFS itu?
  • Arsitektur HDFS
  • Baca Operasi
  • Operasi Tulis
  • Akses HDFS menggunakan JAVA API
  • Akses HDFS Menggunakan COMMAND-LINE INTERFACE

Arsitektur HDFS

Kluster HDFS terutama terdiri dari NameNode yang mengelola Metadata sistem file dan DataNodes yang menyimpan data aktual .

  • NameNode: NameNode dapat dianggap sebagai master sistem. Ini memelihara pohon sistem file dan metadata untuk semua file dan direktori yang ada di sistem. Dua file 'Gambar ruang nama' dan 'log edit' digunakan untuk menyimpan informasi metadata. Namenode memiliki pengetahuan tentang semua datanode yang berisi blok data untuk file tertentu, namun, itu tidak menyimpan lokasi blok secara terus-menerus. Informasi ini direkonstruksi setiap kali dari datanode saat sistem dimulai.
  • DataNode: DataNodes adalah budak yang berada di setiap mesin dalam cluster dan menyediakan penyimpanan sebenarnya. Ini bertanggung jawab untuk melayani, membaca dan menulis permintaan untuk klien.

Operasi baca / tulis di HDFS beroperasi pada level blok. File data dalam HDFS dipecah menjadi potongan berukuran blok, yang disimpan sebagai unit independen. Ukuran blok default adalah 64 MB.

HDFS beroperasi pada konsep replikasi data di mana beberapa replika blok data dibuat dan didistribusikan pada node di seluruh cluster untuk memungkinkan ketersediaan data yang tinggi jika terjadi kegagalan node.

Tahukah kamu? File dalam HDFS, yang lebih kecil dari satu blok, tidak menempati penyimpanan penuh satu blok.

Baca Operasi Dalam HDFS

Permintaan baca data dilayani oleh HDFS, NameNode, dan DataNode. Sebut saja pembaca sebagai 'klien'. Diagram di bawah ini menggambarkan operasi pembacaan file di Hadoop.

  1. Klien memulai permintaan baca dengan memanggil metode 'open ()' dari objek FileSystem; itu adalah objek berjenis DistributedFileSystem .
  2. Objek ini terhubung ke namenode menggunakan RPC dan mendapatkan informasi metadata seperti lokasi blok file. Harap dicatat bahwa alamat ini adalah dari beberapa blok pertama dari sebuah file.
  3. Menanggapi permintaan metadata ini, alamat DataNodes yang memiliki salinan blok itu dikembalikan.
  4. Setelah alamat DataNodes diterima, objek jenis FSDataInputStream dikembalikan ke klien. FSDataInputStream berisi DFSInputStream yang menangani interaksi dengan DataNode dan NameNode. Pada langkah 4 yang ditunjukkan pada diagram di atas, klien memanggil metode 'read ()' yang menyebabkan DFSInputStream membuat sambungan dengan DataNode pertama dengan blok file pertama.
  5. Data dibaca dalam bentuk aliran di mana klien memanggil metode 'read ()' berulang kali. Proses operasi read () ini berlanjut hingga mencapai akhir blok.
  6. Setelah akhir blok tercapai, DFSInputStream menutup koneksi dan melanjutkan untuk menemukan DataNode berikutnya untuk blok berikutnya
  7. Setelah klien selesai membaca, ia memanggil metode close () .

Menulis Operasi Dalam HDFS

Pada bagian ini, kita akan memahami bagaimana data ditulis ke dalam HDFS melalui file.

  1. Klien memulai operasi tulis dengan memanggil metode 'create ()' dari objek DistributedFileSystem yang membuat file baru - Langkah no. 1 pada diagram di atas.
  2. Objek DistributedFileSystem terhubung ke NameNode menggunakan panggilan RPC dan memulai pembuatan file baru. Namun, file ini membuat operasi tidak mengaitkan blok apa pun dengan file tersebut. Ini adalah tanggung jawab NameNode untuk memverifikasi bahwa file (yang sedang dibuat) tidak ada dan klien memiliki izin yang benar untuk membuat file baru. Jika file sudah ada atau klien tidak memiliki izin yang memadai untuk membuat file baru, maka IOException dilemparkan ke klien. Jika tidak, operasi berhasil dan rekor baru untuk file tersebut dibuat oleh NameNode.
  3. Setelah record baru di NameNode dibuat, objek jenis FSDataOutputStream dikembalikan ke klien. Klien menggunakannya untuk menulis data ke HDFS. Metode penulisan data dipanggil (langkah 3 dalam diagram).
  4. FSDataOutputStream berisi objek DFSOutputStream yang menjaga komunikasi dengan DataNodes dan NameNode. Sementara klien terus menulis data, DFSOutputStream terus membuat paket dengan data ini. Paket-paket ini dimasukkan ke dalam antrian yang disebut sebagai DataQueue .
  5. Ada satu komponen lagi yang disebut DataStreamer yang menggunakan DataQueue ini . DataStreamer juga meminta NameNode untuk alokasi blok baru sehingga memilih DataNodes yang diinginkan untuk digunakan untuk replikasi.
  6. Sekarang, proses replikasi dimulai dengan membuat pipeline menggunakan DataNodes. Dalam kasus kami, kami telah memilih tingkat replikasi 3 dan karenanya ada 3 DataNodes di dalam pipa.
  7. DataStreamer menuangkan paket ke DataNode pertama di dalam pipeline.
  8. Setiap DataNode dalam pipeline menyimpan paket yang diterima olehnya dan meneruskan paket yang sama ke DataNode kedua dalam sebuah pipeline.
  9. Antrian lain, 'Ack Queue' dikelola oleh DFSOutputStream untuk menyimpan paket yang menunggu pengakuan dari DataNodes.
  10. Setelah pengakuan untuk paket dalam antrian diterima dari semua DataNodes di dalam pipa, itu dihapus dari 'Ack Queue'. Jika terjadi kegagalan DataNode, paket dari antrian ini digunakan untuk memulai kembali operasi.
  11. Setelah klien selesai menulis data, ia memanggil metode close () (Langkah 9 dalam diagram) Panggilan untuk menutup (), menghasilkan paket data yang tersisa ke pipeline diikuti dengan menunggu pengakuan.
  12. Setelah pengakuan akhir diterima, NameNode dihubungi untuk memberitahukan bahwa operasi penulisan file telah selesai.

Akses HDFS menggunakan JAVA API

Pada bagian ini, kami mencoba memahami antarmuka Java yang digunakan untuk mengakses sistem file Hadoop.

Untuk berinteraksi dengan sistem file Hadoop secara terprogram, Hadoop menyediakan beberapa kelas JAVA. Paket bernama org.apache.hadoop.fs berisi kelas yang berguna dalam manipulasi file di sistem file Hadoop. Operasi ini meliputi, buka, baca, tulis, dan tutup. Sebenarnya, API file untuk Hadoop bersifat umum dan dapat diperluas untuk berinteraksi dengan sistem file lain selain HDFS.

Membaca file dari HDFS, secara terprogram

Objek java.net.URL digunakan untuk membaca konten file. Untuk memulainya, kita perlu membuat Java mengenali skema URL hdfs Hadoop. Ini dilakukan dengan memanggil metode setURLStreamHandlerFactory pada objek URL dan instance FsUrlStreamHandlerFactory diteruskan ke sana. Metode ini hanya perlu dijalankan sekali per JVM, oleh karena itu metode ini disertakan dalam blok statis.

Contoh kode adalah-

public class URLCat {static {URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());}public static void main(String[] args) throws Exception {InputStream in = null;try {in = new URL(args[0]).openStream();IOUtils.copyBytes(in, System.out, 4096, false);} finally {IOUtils.closeStream(in);}}}

Kode ini membuka dan membaca konten file. Jalur file ini di HDFS diteruskan ke program sebagai argumen baris perintah.

Akses HDFS Menggunakan COMMAND-LINE INTERFACE

Ini adalah salah satu cara paling sederhana untuk berinteraksi dengan HDFS. Antarmuka baris perintah memiliki dukungan untuk operasi sistem file seperti membaca file, membuat direktori, memindahkan file, menghapus data, dan daftar direktori.

Kita dapat menjalankan '$ HADOOP_HOME / bin / hdfs dfs -help' untuk mendapatkan bantuan mendetail pada setiap perintah. Di sini, 'dfs' adalah perintah shell dari HDFS yang mendukung banyak sub-perintah.

Beberapa dari perintah yang banyak digunakan tercantum di bawah ini bersama dengan beberapa detail masing-masing.

1. Salin file dari sistem file lokal ke HDFS

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal temp.txt /

Perintah ini menyalin file temp.txt dari sistem file lokal ke HDFS.

2. Kita dapat membuat daftar file yang ada dalam direktori menggunakan -ls

$HADOOP_HOME/bin/hdfs dfs -ls /

Kita dapat melihat file 'temp.txt' (disalin sebelumnya) terdaftar di bawah direktori '/' .

3. Perintah untuk menyalin file ke sistem file lokal dari HDFS

$HADOOP_HOME/bin/hdfs dfs -copyToLocal /temp.txt

Kita dapat melihat temp.txt disalin ke sistem file lokal.

4. Perintah untuk membuat direktori baru

$HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory

Periksa apakah direktori dibuat atau tidak. Sekarang, Anda harus tahu cara melakukannya ;-)