Tutorial HDFS: Architekstur, Baca & Tulis Operamenggunakan Java API
Apa itu HDFS?
HDFS adalah sistem file terdistribusi untuk menyimpan file data yang sangat besar, berjalan pada cluster perangkat keras komoditas. Ini toleran terhadap kesalahan, terukur, dan sangat mudah untuk diperluas. Hadoop disertakan dengan HDFS (Sistem File Terdistribusi Hadoop).
Ketika data melebihi kapasitas penyimpanan pada satu mesin fisik, maka penting untuk membaginya ke beberapa mesin yang terpisah. Sistem file yang mengelola operasi penyimpanan tertentu di seluruh jaringan mesin disebut sistem file terdistribusi. HDFS adalah salah satu perangkat lunak tersebut.
HDFS Architekstur
Cluster HDFS terutama terdiri dari a NamaNode yang mengelola sistem file Metadata dan DataNode yang menyimpan data aktual.
- NamaNode: NameNode dapat dianggap sebagai master sistem. Ia memelihara pohon sistem file dan metadata untuk semua file dan direktori yang ada dalam sistem. Dua file 'Gambar ruang nama' dan 'edit catatan' digunakan untuk menyimpan informasi metadata. Namenode memiliki pengetahuan tentang semua datanode yang berisi blok data untuk file tertentu, namun ia tidak menyimpan lokasi blok secara terus-menerus. Informasi ini direkonstruksi setiap saat dari datanode ketika sistem dimulai.
- simpul data: DataNodes adalah budak yang berada di setiap mesin dalam sebuah cluster dan menyediakan penyimpanan sebenarnya. Bertanggung jawab untuk melayani, membaca dan menulis permintaan untuk klien.
Operasi baca/tulis di HDFS beroperasi pada tingkat blok. File data di HDFS dipecah menjadi potongan-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.
Apakah Anda tahu? File dalam HDFS, yang lebih kecil dari satu blok, tidak menempati penyimpanan penuh satu blok.
Baca Operation Dalam HDFS
Permintaan pembacaan data dilayani oleh HDFS, NameNode, dan DataNode. Sebut saja pembaca sebagai 'klien'. Diagram di bawah ini menggambarkan operasi pembacaan file Hadoop.
- Klien memulai permintaan baca dengan menelepon 'membuka()' metode objek FileSystem; itu adalah objek bertipe Sistem File Terdistribusi.
- Objek ini terhubung ke namenode menggunakan RPC dan mendapatkan informasi metadata seperti lokasi blok file. Harap dicatat bahwa alamat-alamat ini adalah beberapa blok pertama dari sebuah file.
- Menanggapi permintaan metadata ini, alamat DataNodes yang memiliki salinan blok tersebut dikembalikan.
-
Setelah alamat DataNodes diterima, objek akan bertipe FSDataInputStream dikembalikan ke klien. FSDataInputStream mengandung DFSInputStream yang menangani interaksi dengan DataNode dan NameNode. Pada langkah 4 yang ditunjukkan pada diagram di atas, klien memanggil 'membaca()' metode yang menyebabkan DFSInputStream untuk membuat koneksi dengan DataNode pertama dengan blok pertama sebuah file.
-
Data dibaca dalam bentuk aliran dimana klien dipanggil 'membaca()' metode berulang kali. Proses ini Baca() operasi berlanjut hingga mencapai akhir blok.
- Setelah akhir blok tercapai, DFSInputStream menutup koneksi dan melanjutkan untuk menemukan DataNode berikutnya untuk blok berikutnya
- Setelah klien selesai membaca, ia memanggil dekat() Metode.
Menulis Operation Dalam HDFS
Di bagian ini, kita akan memahami bagaimana data ditulis ke dalam HDFS melalui file.
- Klien memulai operasi penulisan dengan memanggil metode 'create()' dari objek DistributedFileSystem yang membuat file baru โ Langkah no. 1 pada diagram di atas.
- Objek DistributedFileSystem terhubung ke NameNode menggunakan panggilan RPC dan memulai pembuatan file baru. Namun, operasi pembuatan file ini tidak mengaitkan blok apa pun dengan file tersebut. NameNode bertanggung jawab untuk memverifikasi bahwa file (yang sedang dibuat) belum 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 Pengecualian IO dilemparkan ke klien. Jika tidak, operasi berhasil dan rekaman baru untuk file tersebut dibuat oleh NameNode.
- Setelah catatan baru di NameNode dibuat, objek bertipe FSDataOutputStream dikembalikan ke klien. Klien menggunakannya untuk menulis data ke dalam HDFS. Metode penulisan data dipanggil (langkah 3 dalam diagram).
- 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 Antrean Data.
- Ada satu komponen lagi yang disebut Pengaliran Data yang mengkonsumsi ini Antrean Data. DataStreamer juga meminta NameNode untuk alokasi blok baru sehingga memilih DataNode yang diinginkan untuk digunakan untuk replikasi.
- Sekarang, proses replikasi dimulai dengan membuat pipeline menggunakan DataNodes. Dalam kasus kami, kami telah memilih tingkat replikasi 3 dan karenanya ada 3 DataNode di dalam pipeline.
- DataStreamer menuangkan paket ke DataNode pertama dalam pipeline.
- Setiap DataNode dalam pipeline menyimpan paket yang diterimanya dan meneruskannya ke DataNode kedua dalam pipeline.
- Antrian lainnya, 'Ack Queue' dikelola oleh DFSOutputStream untuk menyimpan paket yang menunggu pengakuan dari DataNodes.
- Setelah pengakuan untuk sebuah paket dalam antrian diterima dari semua DataNodes di dalam pipeline, paket tersebut akan dihapus dari 'Ack Queue'. Jika terjadi kegagalan DataNode, paket dari antrean ini digunakan untuk memulai kembali operasi.
- Setelah klien selesai menulis data, ia memanggil metode close() (Langkah 9 dalam diagram) Panggilan ke close(), yang mengakibatkan membuang sisa paket data ke pipeline diikuti dengan menunggu pengakuan.
- 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 Java antarmuka 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-kelas yang berguna dalam manipulasi file di sistem file Hadoop. Operasi ini meliputi, buka, baca, tulis, dan tutup. Sebenarnya, file API 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 isi file. Untuk memulainya, kita perlu membuat Java mengenali skema URL hdfs Hadoop. Ini dilakukan dengan menelepon setURLStreamHandlerFactory metode pada objek URL dan sebuah instance dari FsUrlStreamHandlerFactory diteruskan ke sana. Metode ini perlu dijalankan hanya sekali per FMV, oleh karena itu ia diapit dalam blok statis.
Contoh kodenya 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 isi 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 membuat daftar direktori.
Kita bisa lari '$HADOOP_HOME/bin/hdfs dfs -bantuan' untuk mendapatkan bantuan mendetail pada setiap perintah. Di Sini, 'dfs' adalah perintah shell HDFS yang mendukung banyak subperintah.
Beberapa perintah yang umum digunakan tercantum di bawah ini beserta beberapa rinciannya.
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 di direktori menggunakan -l
$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 bisa 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 belum. Sekarang, Anda harus tahu cara melakukannya ๐




