2015-02-27 14 views
8

Bir kenar düğümünde çalışan bir java uygulamasında, varsa bir hdfs klasörünü silmem gerekir. Klasörde çıkan bir mapreduce işini (spark ile) çalıştırmadan önce bunu yapmam gerekiyor. javid'ten hdfs klasörünü sil

Ben Ancak yöntem

org.apache.hadoop.fs.FileUtil.fullyDelete(new File(url)) 

kullanabilirsiniz bulundu Ben sadece yerel klasörde (çalıştıran bilgisayarda yani dosya URL) ile çalışmak yapabilirsiniz. hdfs://hdfshost:port HDF'ler namenode IPC olmak

url = "hdfs://hdfshost:port/the/folder/to/delete"; 

: Ben böyle bir şey kullanmaya çalıştı. Mapreduce için kullanıyorum, bu yüzden doğru. Ancak hiçbir şey yapmıyor.

Peki, hangi URL'yi kullanmalıyım, yoksa başka bir yöntem var mı?

Not: here söz konusu basit bir projedir.

Configuration conf = new Configuration(); 
    conf.set("fs.hdfs.impl",org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()); 
    conf.set("fs.file.impl",org.apache.hadoop.fs.LocalFileSystem.class.getName()); 
    FileSystem hdfs = FileSystem.get(URI.create("hdfs://<namenode-hostname>:<port>"), conf); 
    hdfs.delete("/path/to/your/file", isRecusrive); 

Benim için dosya yolunda

cevap

9

Ben bu şekilde yapmak.

Sadece programı yapacak benim wordcount aşağıdaki kodları ekleyin:

import org.apache.hadoop.fs.*; 

... 
Configuration conf = new Configuration(); 

Path output = new Path("/the/folder/to/delete"); 
FileSystem hdfs = FileSystem.get(conf); 

// delete existing directory 
if (hdfs.exists(output)) { 
    hdfs.delete(output, true); 
} 

Job job = Job.getInstance(conf, "word count"); 
... 

Açıkça hdfs://hdfshost:port eklemek gerekmez.

+0

Mükemmel, işe yarıyor. Ayrıca diğer standart dosya sistemi işlemlerini yapmak için hdfs kullanabileceğimi umuyorum. –

+0

@Juh_ yup, 'hdfs' ile yukarıdakilerden çok şey yapabilirsiniz - dosyalar oluşturun, liste dosyaları, vb. Silin vb – Tucker

+2

Şimdi silme yöntemi kullanımdan kaldırılmıştır. –

13

Bu site eser hdfs://hdfshost:port/ gerekmez: