Sık Kullanılan Hadoop HDFS Komutları
Giriş
Merhabalar bu yazımızda en sık kullanılan Hadoop hdfs komutlarına örnekler vereceğiz. Öncelikle belirtmem gerekir ki nasılki linux dünyasının süper kullanıcısı root ise hdfs dünyasının da süper kullanıcısı hdfs kullanıcıdır. Komutlar içinde sık sık hdfs kullanacağız. Bu hdfs’lerin bazısı kullanıcı bazısı da komuttur. Lütfen karıştırmayalım. Erişim yetkisi hatası almamak adına komutların başında bazen sudo -u hdfs kullanacağım. Buunun sebebi yapacağım işi süper kullanıcı hdfs adıyla yapacağım anlamına gelir. Ayrıca linux /home dizini karşılığı hdfs’te /user diznidir. Bu bilgilerden sonra örneklerimize başlayalım.
- Linux’tan HDFS’e dosya kopyalamak (put)
- HDFS diznini listelemek (ls)
- HDFS klasör/dizin oluşturma (mkdir)
- HDFS dosya taşıma (mv)
- HDFS Dosya kopyalama (cp)
- HDFS sahiplik yetkisi değiştirmek (chown)
- HDFS erişim yetkisi belirlemek (chmod)
- HDFS’deki bir dosyayı linux lokal dizine kopyalamak (hdfs copyToLocal, get)
- HDFS’de bir klasörün kapladığı alan nedir (du)
- HDFS klasör/dosya silmek (rm)
- HDFS’deki bir dosyayı okumak (head, tail, cat)
1. Linux’tan HDFS’e dosya kopyalamak (put)
[root@cdh1 ~]# sudo -u admin hdfs dfs -put /home/admin/iris.csv /user/admin/
Yukarıda komutu root kullanıcısı ile verdim ancak iris.csv dosyası /home/admin/ dizninde ve sahipliği de admin‘e ait olduğu için sudo -u admin kullandım. Ayrıca hedef hdfs dizni de /user/admin‘e ait bir hdfs dizni olduğundan bunu yaptık.
Benzer şekilde bir klasör ve içindeki dosyaları da put komutuyla hdfs’e kopyalayabiliriz.
[train@localhost ~]$ hdfs dfs -put datasets/retail_db /user/train/myHDFSFolder Kontrol: [train@localhost ~]$ hdfs dfs -ls /user/train/myHDFSFolder/retail_db Found 6 items -rw-r--r-- 1 train supergroup 1074 2020-07-23 22:07 /user/train/myHDFSFolder/retail_db/categories.csv -rw-r--r-- 1 train supergroup 953847 2020-07-23 22:07 /user/train/myHDFSFolder/retail_db/customers.csv -rw-r--r-- 1 train supergroup 88 2020-07-23 22:07 /user/train/myHDFSFolder/retail_db/departments.csv -rw-r--r-- 1 train supergroup 5408988 2020-07-23 22:07 /user/train/myHDFSFolder/retail_db/order_items.csv -rw-r--r-- 1 train supergroup 2999990 2020-07-23 22:07 /user/train/myHDFSFolder/retail_db/orders.csv -rw-r--r-- 1 train supergroup 174240 2020-07-23 22:07 /user/train/myHDFSFolder/retail_db/products.csv
2. HDFS diznini listelemek (ls)
[root@cdh1 ~]# hdfs dfs -ls /user/admin
Çıktı:
Found 3 items drwxrwxrwx - admin admin 0 2019-07-14 08:48 /user/admin/.scratchdir drwx------ - admin admin 0 2019-07-14 09:14 /user/admin/.staging -rw-r--r-- 3 admin admin 4765 2019-07-14 09:33 /user/admin/iris.csv
Yukarıda az önce kopyaladığımız iris.csv dosyasını görüyoruz.
3. HDFS klasör/dizin oluşturma (mkdir)
[root@cdh1 ~]# sudo -u admin hdfs dfs -mkdir /user/admin/data
Yukarıdaki komut ile hdfs /user/admin dizini içinde data adında yeni bir klasör oluşturduk. sudo -u admin kullanmamızın sebebi admin kullanıcısının hdfs dünyasındaki home dizni olan /user/admin içinde bu işi yapıyor olmamızdır. Dizin oluşmuş mu kontrol edelim.
[root@cdh1 ~]# hdfs dfs -ls /user/admin
Çıktı:
Found 4 items drwxrwxrwx - admin admin 0 2019-07-14 08:48 /user/admin/.scratchdir drwx------ - admin admin 0 2019-07-14 09:14 /user/admin/.staging drwxr-xr-x - admin admin 0 2019-07-14 10:24 /user/admin/data -rw-r--r-- 3 admin admin 4765 2019-07-14 09:33 /user/admin/iris.csv
Yukarıda yeni oluşan klasörü (/user/admin/data) görüyoruz.
4. HDFS dosya taşıma (mv)
[root@cdh1 ~]# sudo -u admin hdfs dfs -mv /user/admin/iris.csv /user/admin/data
iris.csv dosyasını yukarıda oluşturduğumuz data klasörü içine taşıdık. Kontrol edelim:
[root@cdh1 ~]# hdfs dfs -ls /user/admin/data
Çıktı:
Found 1 items -rw-r--r-- 3 admin admin 4765 2019-07-14 09:33 /user/admin/data/iris.csv
Görüldüğü gibi iris.csv data klasörü içine taşınmış. Ancak eski yerinde bir kopyası duruyor mu? Durmaması lazım. Kontrol edelim.
[root@cdh1 ~]# hdfs dfs -ls /user/admin
Çıktı:
Found 3 items drwxrwxrwx - admin admin 0 2019-07-14 08:48 /user/admin/.scratchdir drwx------ - admin admin 0 2019-07-14 09:14 /user/admin/.staging drwxr-xr-x - admin admin 0 2019-07-14 10:32 /user/admin/data
Artık göremiyoruz. Operasyon başarılı.
5. HDFS dosya kopyalama (cp)
Linux’ta olduğu gibi kopyalarken ismini de değiştirebiliriz.
[train@localhost ~]$ hdfs dfs -cp /user/train/myHDFSFolder/Advertising.csv /user/train/copied.csv Kontrol: [train@localhost ~]$ hdfs dfs -ls /user/train Found 4 items drwxr-xr-x - train supergroup 0 2020-07-22 16:54 /user/train/.sparkStaging -rw-r--r-- 1 train supergroup 4556 2020-07-23 21:53 /user/train/copied.csv drwxr-xr-x - train supergroup 0 2020-07-21 18:59 /user/train/datasets drwxr-xr-x - train supergroup 0 2020-07-23 20:12 /user/train/myHDFSFolder
6. HDFS sahiplik yetkisi değiştirmek (chown)
Sahiplik yetkisi komutu ve mantığı linux ile aynıdır. Eski sahiplik: -rw-r–r– 1 train supergroup 4556 2020-07-23 20:08 /user/train/myHDFSFolder/Advertising.csv şeklindeydi. Bunu train:train yapalım
[train@localhost ~]$ hdfs dfs -chown train:train /user/train/myHDFSFolder/Advertising.csv Sonucu görme [train@localhost ~]$ hdfs dfs -ls /user/train/myHDFSFolder Found 1 items -rw-r--r-- 1 train train 4556 2020-07-23 20:08 /user/train/myHDFSFolder/Advertising.csv
7. HDFS erişim yetkisi belirlemek (chmod)
En baştaki karakter dizin dosya olduğu kalan 9 karakter üçerli gruplar halinde kullanıcı-grup-değer herkes yetkilerini belirler. Her bir grup için bir rakam kullanabiliriz. Rakamların okuma-yazma ve çalıştırma yetkileri:
0 : — | 1 : –x | 2 : -w- | 3 : -wx
4 : r– | 5 : r-x | 6 : rw- | 7 : rwx
Yukarıdaki bilgiler ışığında dosyamıza sadece kullanıcı için okuma yazma yetkisi verelim kalan herkese kapatalım.
[train@localhost ~]$ hdfs dfs -chmod 600 /user/train/myHDFSFolder/Advertising.csv [train@localhost ~]$ hdfs dfs -ls /user/train/myHDFSFolder Found 1 items -rw------- 1 train train 4556 2020-07-23 20:08 /user/train/myHDFSFolder/Advertising.csv
8. HDFS’deki bir dosyayı linux lokal dizine kopyalamak (hdfs copyToLocal, get)
copyToLocal ve get: ikisi de aynı işi görür, hdfs’deki dosya kalır, linux yerel dosya sisteminde belirtilen yere dosya kopyalanır.
[train@localhost ~]$ hdfs dfs -get /user/train/myHDFSFolder/Advertising.csv /home/train Kontrol: [train@localhost ~]$ ls -l | grep Advertising -rw-r--r--. 1 train train 4556 Jul 23 21:49 Advertising.csv
9. HDFS’de bir klasörün kapladığı alan nedir (du)
-h human-readable, -s total, sum, -v başlıklarla beraber
[train@localhost ~]$ hdfs dfs -du -h /user/train/myHDFSFolder 4.4 K 4.4 K /user/train/myHDFSFolder/Advertising.csv 9.1 M 9.1 M /user/train/myHDFSFolder/retail_db [train@localhost ~]$ hdfs dfs -du -s -h /user/train/myHDFSFolder 9.1 M 9.1 M /user/train/myHDFSFolder [train@localhost ~]$ hdfs dfs -du -s -h -v /user/train/myHDFSFolder SIZE DISK_SPACE_CONSUMED_WITH_ALL_REPLICAS FULL_PATH_NAME 9.1 M 9.1 M /user/train/myHDFSFolder
Replication factor 1 olduğu için iki rakam da aynı, eğer 3 olsaydı sağdaki rakam diğerinin 3 katı civarında olacaktı.
10. HDFS klasör/dosya silmek (rm)
-r veya -R recursive olarak işlemi uygula. Shift+delete tarzında silmek için -skipTrash argümanını ekleyebilirsiniz.
[train@localhost ~]$ hdfs dfs -rm -r /user/train/folderToDelete Deleted /user/train/folderToDelete Kontrol: [train@localhost ~]$ hdfs dfs -ls /user/train Found 4 items drwxr-xr-x - train supergroup 0 2020-07-22 16:54 /user/train/.sparkStaging -rw-r--r-- 1 train supergroup 4556 2020-07-23 21:53 /user/train/copied.csv drwxr-xr-x - train supergroup 0 2020-07-21 18:59 /user/train/datasets drwxr-xr-x - train supergroup 0 2020-07-23 22:07 /user/train/myHDFSFolder
11. HDFS’deki bir dosyayı okumak (head, tail, cat)
1 KB içine kaç satır sığarsa head başını, tail sonunu okur; cat ise tamamını okur. Büyük dosyalar için cat tavsiye edilmez.
[train@localhost ~]$ hdfs dfs -head /user/train/myHDFSFolder/retail_db/orders.csv orderId,orderDate,orderCustomerId,orderStatus 1,2013-07-25 00:00:00.0,11599,CLOSED 2,2013-07-25 00:00:00.0,256,PENDING_PAYMENT 3,2013-07-25 00:00:00.0,12111,COMPLETE 4,2013-07-25 00:00:00.0,8827,CLOSED 5,2013-07-25 00:00:00.0,11318,COMPLETE 6,2013-07-25 00:00:00.0,7130,COMPLETE 7,2013-07-25 00:00:00.0,4530,COMPLETE 8,2013-07-25 00:00:00.0,2911,PROCESSING 9,2013-07-25 00:00:00.0,5657,PENDING_PAYMENT 10,2013-07-25 00:00:00.0,5648,PENDING_PAYMENT 11,2013-07-25 00:00:00.0,918,PAYMENT_REVIEW 12,2013-07-25 00:00:00.0,1837,CLOSED 13,2013-07-25 00:00:00.0,9149,PENDING_PAYMENT 14,2013-07-25 00:00:00.0,9842,PROCESSING 15,2013-07-25 00:00:00.0,2568,COMPLETE 16,2013-07-25 00:00:00.0,7276,PENDING_PAYMENT 17,2013-07-25 00:00:00.0,2667,COMPLETE 18,2013-07-25 00:00:00.0,1205,CLOSED 19,2013-07-25 00:00:00.0,9488,PENDING_PAYMENT 20,2013-07-25 00:00:00.0,9198,PROCESSING 21,2013-07-25 00:00:00.0,2711,PENDING 22,2013-07-25 00:00:00.0,333,COMPLETE 23,2013-07-25 00:00:00.0,4367,PENDING_PAYMENT 24,2013-07-25 00:00:00.0,11441,CLOSED