Apa itu HDFS?
HDFS adalah sistem fail yang diedarkan untuk menyimpan fail data yang sangat besar, berjalan di sekumpulan perkakasan komoditi. Ia bertoleransi, boleh diskalakan, dan sangat mudah dikembangkan. Hadoop dibundel dengan HDFS ( Hadoop Distused File Systems ).
Apabila data melebihi kapasiti penyimpanan pada mesin fizikal tunggal, penting untuk membaginya di sebilangan mesin yang berasingan. Sistem fail yang menguruskan operasi khusus penyimpanan di rangkaian mesin disebut sistem fail diedarkan. HDFS adalah salah satu perisian tersebut.
Dalam tutorial ini, kita akan belajar,
- Apa itu HDFS?
- Senibina HDFS
- Baca Operasi
- Tulis Operasi
- Akses HDFS menggunakan JAVA API
- Akses HDFS Menggunakan INTERFACE COMMAND-LINE
Senibina HDFS
Kluster HDFS terutamanya terdiri dari NameNode yang menguruskan Metadata sistem fail dan DataNodes yang menyimpan data sebenar .
- NameNode: NameNode boleh dianggap sebagai penguasa sistem. Ini mengekalkan struktur sistem fail dan metadata untuk semua fail dan direktori yang ada dalam sistem. Dua fail 'Namespace image' dan 'edit log' digunakan untuk menyimpan maklumat metadata. Namenode mempunyai pengetahuan tentang semua datanod yang mengandungi blok data untuk fail tertentu, namun, tidak menyimpan lokasi blok secara berterusan. Maklumat ini dibina semula setiap kali dari datanod ketika sistem dimulakan.
- DataNode: DataNode adalah hamba yang berada di setiap mesin dalam kluster dan menyediakan penyimpanan yang sebenarnya. Ia bertanggungjawab untuk melayani, membaca dan menulis permintaan untuk pelanggan.
Operasi membaca / menulis dalam HDFS beroperasi pada tahap blok. Fail data dalam HDFS dipecah menjadi potongan berukuran blok, yang disimpan sebagai unit bebas. Ukuran blok lalai ialah 64 MB.
HDFS beroperasi pada konsep replikasi data di mana banyak replika blok data dibuat dan diedarkan pada nod di seluruh kelompok untuk membolehkan ketersediaan data yang tinggi sekiranya berlaku kegagalan nod.
Adakah awak tahu? Fail dalam HDFS, yang lebih kecil daripada satu blok, tidak memenuhi simpanan penuh blok.
Baca Operasi Dalam HDFS
Permintaan membaca data dilayan oleh HDFS, NameNode, dan DataNode. Mari panggil pembaca sebagai 'pelanggan'. Gambar rajah di bawah menunjukkan operasi membaca fail di Hadoop.
- Seorang pelanggan memulakan permintaan membaca dengan memanggil kaedah 'open ()' objek FileSystem; ia adalah objek jenis DistributedFileSystem .
- Objek ini menyambung ke namenode menggunakan RPC dan mendapat maklumat metadata seperti lokasi blok fail. Harap maklum bahawa alamat ini terdiri daripada beberapa blok pertama fail.
- Sebagai tindak balas kepada permintaan metadata ini, alamat DataNodes yang mempunyai salinan blok itu dikembalikan.
- Setelah alamat DataNodes diterima, objek jenis FSDataInputStream dikembalikan kepada klien. FSDataInputStream mengandungi DFSInputStream yang mengurus interaksi dengan DataNode dan NameNode. Pada langkah 4 yang ditunjukkan dalam gambar rajah di atas, klien menggunakan kaedah 'read ()' yang menyebabkan DFSInputStream menjalin hubungan dengan DataNode pertama dengan blok pertama fail.
- Data dibaca dalam bentuk aliran di mana pelanggan menggunakan kaedah 'read ()' berulang kali. Proses operasi baca () ini berterusan sehingga mencapai hujung blok.
- Setelah akhir blok dicapai, DFSInputStream menutup sambungan dan bergerak untuk mencari DataNode seterusnya untuk blok seterusnya
- Setelah pelanggan selesai dengan pembacaan, ia memanggil kaedah tutup () .
Tulis Operasi Dalam HDFS
Di bahagian ini, kita akan memahami bagaimana data ditulis ke dalam HDFS melalui fail.
- Seorang pelanggan memulakan operasi menulis dengan memanggil kaedah 'create ()' objek TerdistribusiFileSystem yang membuat fail baru - Langkah No. 1 dalam rajah di atas.
- Objek DistributedFileSystem menyambung ke NameNode menggunakan panggilan RPC dan memulakan pembuatan fail baru. Walau bagaimanapun, fail ini membuat operasi tidak mengaitkan blok dengan fail. Adalah tanggungjawab NameNode untuk mengesahkan bahawa fail (yang sedang dibuat) belum ada dan pelanggan mempunyai kebenaran yang betul untuk membuat fail baru. Sekiranya fail sudah ada atau klien tidak mempunyai kebenaran yang mencukupi untuk membuat fail baru, maka IOException dilemparkan ke klien. Jika tidak, operasi berjaya dan rekod baru untuk fail dibuat oleh NameNode.
- Setelah rekod baru di NameNode dibuat, objek jenis FSDataOutputStream dikembalikan kepada klien. Pelanggan menggunakannya untuk menulis data ke dalam HDFS. Kaedah penulisan data dipanggil (langkah 3 dalam rajah).
- FSDataOutputStream mengandungi objek DFSOutputStream yang menjaga komunikasi dengan DataNodes dan NameNode. Semasa pelanggan terus menulis data, DFSOutputStream terus membuat paket dengan data ini. Paket-paket ini dimasukkan ke dalam barisan yang dipanggil sebagai DataQueue .
- Terdapat satu lagi komponen yang disebut DataStreamer yang menggunakan DataQueue ini . DataStreamer juga meminta NameNode untuk peruntukan blok baru sehingga memilih DataNodes yang diinginkan untuk digunakan untuk replikasi.
- Sekarang, proses replikasi dimulakan dengan membuat saluran paip menggunakan DataNodes. Dalam kes kami, kami telah memilih tahap replikasi 3 dan oleh itu terdapat 3 DataNodes dalam perancangan.
- DataStreamer menuangkan paket ke DataNode pertama dalam perancangan.
- Setiap DataNode dalam saluran paip menyimpan paket yang diterima olehnya dan meneruskannya sama dengan DataNode kedua dalam saluran paip.
- Antrian lain, 'Ack Queue' dikendalikan oleh DFSOutputStream untuk menyimpan paket yang sedang menunggu pengakuan dari DataNodes.
- Setelah pengakuan untuk paket dalam barisan diterima dari semua DataNodes yang sedang dalam perancangan, ia dikeluarkan dari 'Ack Queue'. Sekiranya terdapat kegagalan DataNode, paket dari barisan ini digunakan untuk memulakan semula operasi.
- Setelah pelanggan selesai dengan penulisan data, ia memanggil kaedah tutup () (Langkah 9 dalam rajah) Panggilan untuk menutup (), menghasilkan pembilasan paket data yang tersisa ke saluran pipa diikuti dengan menunggu pengakuan.
- Setelah pengakuan akhir diterima, NameNode dihubungi untuk memberitahu bahawa operasi penulisan fail selesai.
Akses HDFS menggunakan JAVA API
Pada bahagian ini, kami mencoba memahami antara muka Java yang digunakan untuk mengakses sistem fail Hadoop.
Untuk berinteraksi dengan sistem fail Hadoop secara terprogram, Hadoop menyediakan beberapa kelas JAVA. Pakej bernama org.apache.hadoop.fs mengandungi kelas yang berguna dalam manipulasi fail dalam sistem fail Hadoop. Operasi ini merangkumi, membuka, membaca, menulis, dan menutup. Sebenarnya, API fail untuk Hadoop bersifat generik dan dapat diperluas untuk berinteraksi dengan sistem fail lain selain HDFS.
Membaca fail dari HDFS, secara program
Objek java.net.URL digunakan untuk membaca kandungan fail. Sebagai permulaan, kita perlu membuat Java mengenali skema URL hdfs Hadoop. Ini dilakukan dengan memanggil kaedah setURLStreamHandlerFactory pada objek URL dan contoh FsUrlStreamHandlerFactory diteruskan kepadanya. Kaedah ini perlu dilaksanakan hanya sekali setiap JVM, oleh itu kaedah ini dilampirkan dalam blok statik.
Contoh kod 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);}}}
Kod ini membuka dan membaca kandungan fail. Laluan fail ini pada HDFS diteruskan ke program sebagai argumen baris perintah.
Akses HDFS Menggunakan INTERFACE COMMAND-LINE
Ini adalah salah satu kaedah termudah untuk berinteraksi dengan HDFS. Antaramuka baris perintah mempunyai sokongan untuk operasi sistem fail seperti membaca fail, membuat direktori, memindahkan fail, menghapus data, dan menyenaraikan direktori.
Kita boleh menjalankan '$ HADOOP_HOME / bin / hdfs dfs -help' untuk mendapatkan bantuan terperinci pada setiap arahan. Di sini, 'dfs' adalah perintah shell HDFS yang menyokong beberapa subkomando.
Beberapa arahan yang banyak digunakan disenaraikan di bawah bersama dengan beberapa perincian setiap perintah.
1. Salin fail dari sistem fail tempatan ke HDFS
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal temp.txt /
Perintah ini menyalin temp.txt fail dari sistem fail tempatan ke HDFS.
2. Kami dapat menyenaraikan fail yang ada di direktori menggunakan -ls
$HADOOP_HOME/bin/hdfs dfs -ls /
Kita dapat melihat fail 'temp.txt' (disalin sebelumnya) disenaraikan di bawah direktori '/' .
3. Perintah untuk menyalin fail ke sistem fail tempatan dari HDFS
$HADOOP_HOME/bin/hdfs dfs -copyToLocal /temp.txt
Kita dapat melihat temp.txt disalin ke sistem fail tempatan.
4. Perintah untuk membuat direktori baru
$HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory
Periksa sama ada direktori dibuat atau tidak. Sekarang, anda harus tahu bagaimana melakukannya ;-)