Belajar Hadoop: Mengenal Perintah HDFS

mengenal-perintah-hdfs

Hadoop merupakan framework terdistribusi yang digunakan untuk menyimpan dan memproses file berukuran besar. Hadoop Distributed File System (HDFS) adalah salah satu komponen utama dari Hadoop yang menangani penyimpanan data. Komponen lain dari Hadoop adalah MapReduce yang menangani komputasi, dan Yarn yang menangani manajemen proses dan sumber daya dalam klaster Hadoop.

Artikel ini akan membahas mengenai perintah-perintah yang banyak digunakan untuk mengakses dan memproses data di HDFS.

Sebelum dapat menjalankan perintah hdfs, pastikan bahwa service hadoop sudah berjalan dan dapat diakses dari terminal yang kita gunakan.

Gunakan perintah jps untuk menampilkan service yang berjalan

 

hadoop fs atau hdfs dfs?

Hadoop menyediakan dua cara untuk memanggil perintah-perintah terkait sistem file, yaitu hadoop fs dan hdfs dfs

Kedua cara tersebut menggunakan perintah dan parameter yang sama, dan menghasilkan output yang relatif sama. Perbedaan antara kedua perintah tersebut adalah, hadoop fs dapat juga digunakan untuk S3, Azure, Cassandra, dll. Sedangkan hdfs dfs khusus digunakan untuk Hadoop (hdfs) saja. Sebelumnya perintah khusus untuk hdfs adalah hadoop dfs, akan tetapi pilihan ini sudah deprecated, dan digantikan dengan hdfs dfs.

Perintah-perintah hadoop sangat mirip dengan perintah UNIX, sehingga cukup intuitif terutama bagi pengguna yang sudah familiar dengan UNIX commands.

 

Menampilkan bantuan : -help

Untuk menampilkan bantuan, gunakan perintah -help. Fungsi ini akan menampilkan daftar semua perintah yang tersedia untuk hadoop fs (perintah-perintah yang sama digunakan juga untuk hdfs dfs), diikuti dengan keterangan mengenai masing-masing perintah tersebut.

hdfs dfs -help

 

Menampilkan bantuan secara singkat : -usage

Jika opsi -help menampilkan informasi yang relatif lengkap mengenai perintah-perintah dalam hadoop fs, maka untuk menampilkan bantuan secara singkat, gunakan -usage.

hdfs dfs -usage [cmd]

 

Jika dipanggil tanpa parameter tambahan, perintah -usage akan menampilkan semua sintaks perintah hdfs.

Jika dipanggil dengan menyebutkan salah satu command tertentu, maka akan ditampilkan sintaks untuk perintah tersebut.

Misalnya, perintah berikut akan menampilkan sintaks atau cara penggunaan perintah ls

hdfs dfs -usage ls

 

Home directory

Secara default, perintah hdfs dfs yang dipanggil tanpa parameter path akan mengakses home directory dari user yang bersangkutan

Home directory di hdfs pada umumnya adalah /user/namauser. Biasanya hadoop admin yang bertugas membuatkan direktori sesuai nama user yang membutuhkan, dan memberikan akses direktori tersebut kepada user yang bersangkutan.

Misalnya untuk perintah ls. Jika user tidak memiliki home direktori, maka perintah hdfs dfs -ls akan memberikan pesan error ‘.’: No such file or directory.

 

Menampilkan list file : -ls

Sama dengan perintah ls pada UNIX. Sintaksnya adalah  

hdfs dfs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>

Secara default, perintah -ls tanpa menyebutkan absolute path, akan mengakses home direktori. Perintah berikut untuk user kmo

hdfs dfs -ls input

akan menampilkan konten dari direktori /user/kmo/input

 

Untuk menampilkan direktori /input, kita gunakan absolute path /input

hdfs dfs -ls  /input

 

Untuk menampilkan semua file dan subdirektori dalam direktori /user, dan menampilkan ukurannya dalam human readable form

hdfs dfs -ls -R -h /user

 

Menampilkan isi sebuah file : -cat

Serupa dengan perintah cat pada UNIX

hdfs dfs -cat [-ignoreCrc] URI [URI ...]

Untuk menampilkan file /user/kmo/input/buah.txt

hdfs dfs -cat input/buah.txt

 

Membuat direktori : -mkdir

hadoop fs -mkdir [-p] <paths>

Secara default, current user akan menjadi owner dari direktori yang terbentuk.

Parameter -p fungsinya mirip dengan parameter -p pada perintah UNIX mkdir, yaitu :
tidak mengembalikan error jika direktori sudah ada, atau
jika parent direktori belum ada, maka secara otomatis akan dibuatkan

Misalnya kita membuat direktori /user/kmo/dir1/dir2/dir3, tanpa parameter -p perintah akan gagal dengan pesan error "mkdir: `hdfs://localhost:9000/user/kmo/dir1/dir2': No such file or directory"

hdfs dfs -mkdir /user/kmo/dir1/dir2/dir3


Dengan parameter -p, parent directory dir1 dan dir2 akan dibuat secara otomatis

hdfs dfs -mkdir -p /dir1/dir2/dir3

 

Mengunggah file ke hdfs : -put atau -copyFromLocal

Untuk mengunggah atau menyalin file dari file sistem lokal ke hdfs, gunakan perintah put

hdfs dfs -put [-f] [-p] [-l] [-d] [-t <thread count>] [-q <thread pool queue size>] [ - | <localsrc> ...] <dest>

Untuk mengunggah file1.txt dari direktori input di lokal sistem ke direktori /user/kmo di hdfs

hdfs dfs -put input/file1.txt /user/kmo

Atau

hdfs dfs -copyFromLocal file1.txt /user/kmo

 

Kita bisa mengunggah beberapa file sekaligus dengan menulis nama-nama file yang akan diunggah, atau dengan menggunakan wildcard. Untuk mengunggah file1.txt dan file2.txt ke direktori /user/kmo

hdfs dfs -put file1.txt file2.txt /user/kmo

Atau

hdfs dfs -put file*.txt /user/kmo
dfs-put-multifile

 

Pastikan bahwa :

  • Path dan nama file yang akan diunggah sudah sesuai
  • User memiliki privilege untuk menulis ke direktori target di hdfs
  • File dengan nama yang sama belum ada di direktori target

Untuk menimpa file yang lama (overwrite) jika file sudah ada, gunakan opsi -f

hdfs dfs -put -f file1.txt /user/kmo

 

Mengunduh file ke lokal : -get atau -copyToLocal

Untuk mendownload file dari hdfs ke file sistem lokal , gunakan perintah get atau copyToLocal

hdfs dfs -get [-ignorecrc] [-crc] [-p] [-f] [-t <thread count>] [-q <thread pool queue size>] <src> ... <localdst>

Untuk mengunduh file /user/kmo/file1.txt ke direktori /home/kmo/test di file system lokal

hdfs dfs -get /user/kmo/file1.txt /home/kmo/test

Atau

hdfs dfs -copyToLocal /user/kmo/file1.txt /home/kmo/test

 

Kita bisa mendownload beberapa file sekaligus dengan menulis nama-nama file yang akan diunggah, atau dengan menggunakan wildcard. Untuk mengunduh file1.txt dan file2.txt dari direktori /user/kmo

hdfs dfs -get /user/kmo/file1.txt /user/kmo/file2.txt /home/kmo/test

Atau

hdfs dfs -get /user/kmo/file*.txt /home/kmo/test

 

Jika file yang didownload sudah ada di direktori lokal, file akan mengembalikan pesan error. Untuk melakukan overwrite, gunakan parameter -f

hdfs dfs -get -f /user/kmo/file1.txt /user/kmo/file2.txt /home/kmo/test

 

Mengcopy file : -cp

Perintah -cp digunakan untuk menyalin file dari satu lokasi ke lokasi lain di hdfs. Pastikan bahwa user memiliki hak read untuk direktori source dan write untuk direktori target.

hdfs dfs -cp [-f] [-p | -p[topax]] [-t <thread count>] [-q <thread pool queue size>] URI [URI ...] <dest>

Mengkopi file1.txt dari direktori /input ke direktori output :

hdfs dfs -cp /input/file1.txt /output

 

Mengkopi lebih dari 1 file dapat dilakukan dengan menyebutkan semua nama file input, atau menggunakan wildcard. Target harus berupa direktori. Misalnya untuk mengkopi file1.txt dan file2.txt dari direktori input ke direktori output

hdfs dfs -cp /input/file1.txt /input/file2.txt /output

Atau

hdfs dfs -cp /input/file*.txt /output

 

Perintah cp akan error jika file sudah ada di direktori target. Untuk melakukan overwrite jika file sudah ada, gunakan opsi -f

hdfs dfs -cp -f /input/file1.txt /output

 

Memindahkan atau me-rename file : -mv

Perintah untuk memindahkan file dari satu lokasi ke lokasi lain di hdfs. Pastikan bahwa user memiliki hak akses untuk menulis di direktori source dan target/destinasi.

hdfs dfs -mv URI [URI ...] <dest>

Memindahkan file1.txt dari direktori input ke direktori output

hdfs dfs -mv /input/file1.txt /output

 

Memindahkan lebih dari 1 file dapat dilakukan dengan menyebutkan semua nama file input, atau menggunakan wildcard. Target harus berupa direktori.
Misalnya untuk memindahkan file1.txt dan file2.txt dari direktori /input ke direktori /output

hdfs dfs -mv /input/file1.txt /input/file2.txt /output

Atau

hdfs dfs -mv /input/file*.txt /output

 

Perintah mv akan gagal jika file dengan nama sama sudah ada di direktori target

 

Menghapus file : -rm

Perintah -rm digunakan untuk menghapus file dari hdfs. Serupa dengan perintah UNIX rm

hdfs dfs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]

Misalnya untuk menghapus file1.txt di direktori output

hdfs dfs -rm /output/file1.txt

 

Untuk menghapus direktori beserta seluruh sub direktori dan file di dalamnya, gunakan perintah -r atau -R

Misalnya untuk menghapus direktori /user/kmo/input yang tidak kosong

hdfs dfs -rm -r /user/kmo/input

 

Jika trash diaktifkan, sistem akan memindahkan file yang dihapus ke direktori trash. Saat ini fitur trash pada hdfs dinonaktifkan secara default. Untuk mengaktifkan fitur tersebut, set parameter  fs.trash.interval di file core-site.xml dengan nilai yang lebih besar dari 0.

 

Menghapus direktori : -rmdir

Perintah rmdir digunakan untuk menghapus direktori yang kosong.

hdfs dfs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]

Misalnya untuk menghapus empty directory /user/kmo/test

hdfs dfs -rm -r /user/kmo/test

 

Untuk menghapus direktori yang tidak kosong (non-empty) beserta seluruh isinya, gunakan rm -r

Menampilkan awal file : -head

Perintah head menampilkan satu kilobyte pertama dari file ke stdout.

hdfs dfs -head /input/testfile.txt

 

Menampilkan akhir file : tail

Perintah tail menampilkan satu kilobyte terakhir dari file ke stdout.

hdfs dfs -tail /input/file1.txt

 

Mengunggah file ke hdfs dan menghapus file lokalnya : -moveFromLocal

Perintah moveFromLocal mirip dengan put, yaitu mengunggah file dari lokal file system ke hdfs, tetapi dengan menghapus file aslinya dari file sistem lokal.

hdfs fs -moveFromLocal <localsrc> <dest>

Untuk mengunggah file file1.txt dari direktori input di lokal ke direktori /input di hdfs, dan menghapus file file1.txt dari lokal sistem :

hdfs dfs -moveFromLocal input/file1.txt /input

 

Kita dapat mengunggah dan menghapus dari lokal beberapa file sekaligus. Misalnya untuk mengunggah dan menghapus file2.txt dan file3.txt dari direktori input di lokal file sistem, ke direktori /input di hdfs

hdfs dfs -moveFromLocal input/file2.txt input/file3.txt /input

 

Jika file dengan nama sama sudah ada di hdfs, perintah -moveFromLocal akan gagal/error

 

Untuk melakukan overwrite, gunakan parameter -f

hdfs dfs -moveFromLocal -f file1.txt /input

 

Mengunggah beberapa file ke dalam 1 file : -appendToFile

Untuk mengunggah beberapa file dari sistem file lokal ke dalam 1 file di hdfs, gunakan perintah -appendToFile

hadoop fs -appendToFile <localsrc> ... <dst>

Misalnya untuk meng-upload file1.txt dan file2.txt ke sebuah file satuFile.txt di direktori /input

hdfs dfs -appendToFile file1.txt file2.txt /input/satuFile.txt

 

Jika file /input/satuFile.txt sudah ada sebelumnya, maka yang diupload akan ditambahkan ke file tersebut.

 

Mengunduh beberapa file menjadi 1 file lokal : -getmerge

Perintah getmerge digunakan untuk mengunduh beberapa file dari hdfs ke dalam 1 file di file sistem lokal.

Misalnya untuk mengunduh file-file /output/file1.txt dan /output/file2.txt di hdfs ke dalam file file_merged.txt

hdfs dfs -getmerge /output/file1.txt /output/file2.txt file_merged.txt

 

Jika file dengan nama sama sudah ada di file sistem lokal, maka perintah -getmerge akan melakukan overwrite terhadap file tersebut.

Misalnya kita mendownload ulang file /output/file1.txt di hdfs ke dalam file_merged.txt dengan perintah -getmerged. File ini akan ditimpa/di-overwrite

hdfs dfs -getmerge /output/file1.txt file_merged.txt

 

Membuat file berukuran nol byte : -touchz

Perintah touchz digunakan untuk membuat file berukuran nol byte di sistem file HDFS.

Untuk membuat file /user/kmo/zerosize.dat berukuran 0 byte di hdfs

hdfs dfs -touchz /user/kmo/zerosize.dat

 

Jika file /input/zerosize.dat sudah ada sebelumnya, touchz akan memperbarui timestamp-nya.

 

Akan tetapi jika file tersebut ukurannya > 0 byte, touchz akan mengembalikan error.

 

Update timestamp file : -touch

Perintah touch digunakan untuk mengupdate timestap sebuah file di hdfs. Atau jika file belum ada, akan membuat file berukuran nol byte.

Misalnya untuk mengupdate timestamp file /user/kmo/file1.dat di hdfs

hdfs dfs -touch /user/kmo/file1.dat

 

Jika file tersebut belum ada, akan dibuat file 0 byte seperti pada perintah -touchz

hdfs dfs -touch /input/newfile.dat

 

Wrapping Up

HDFS merupakan komponen file sistem dalam framework Hadoop. Perintah-perintah dalam hdfs mirip dengan perintah pada UNIX shell, sehingga cukup intuitif bagi user yang sudah terbiasa dengan UNIX shell.