2015-02-27 3 views
8

से एचडीएफएस फ़ोल्डर हटाएं किनारे नोड पर चल रहे जावा ऐप में, यदि यह मौजूद है, तो मुझे एक hdfs फ़ोल्डर को हटाना होगा। मुझे मैप्रिडस जॉब (स्पार्क के साथ) चलाने से पहले फ़ोल्डर में आउटपुट करने से पहले ऐसा करने की ज़रूरत है।जावा

मैंने पाया मैं विधि

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

इस्तेमाल कर सकते हैं लेकिन, मैं केवल यह स्थानीय फ़ोल्डर (चला रहे कंप्यूटर पर अर्थात फ़ाइल यूआरएल) के साथ काम कर सकते हैं। hdfs://hdfshost:port जा रहा है HDFS namenode आईपीसी के साथ

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

: मैं की तरह कुछ का उपयोग करने की कोशिश की। मैं इसे मैड्रिड के लिए उपयोग करता हूं, इसलिए यह सही है। हालांकि यह कुछ भी नहीं करता है।

तो, मुझे किस यूआरएल का उपयोग करना चाहिए, या कोई और तरीका है?

नोट: here प्रश्न में सरल परियोजना है।

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); 

तुम मेरे लिए

उत्तर

9

मैं इसे इस तरह से करते हैं।

बस मेरे शब्दसंख्या में निम्नलिखित कोड जोड़ने कार्यक्रम करना होगा:

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"); 
... 

आप hdfs://hdfshost:port स्पष्ट रूप से जोड़ने की जरूरत नहीं है।

+0

बिल्कुल सही, यह काम करता है। इसके अलावा मैं उम्मीद करता हूं कि मैं अन्य मानक फाइल सिस्टम संचालन करने के लिए 'hdfs' का उपयोग कर सकता हूं। –

+0

@Juh_ yup आप उपरोक्त से 'hdfs' के साथ बहुत कुछ कर सकते हैं - फाइलें, सूची फाइलें, हटाएं इत्यादि आदि – Tucker

+2

ऐसा लगता है कि डिलीट विधि अब बहिष्कृत है। –

13

यह site काम करता है अपनी फ़ाइल पथ में hdfs://hdfshost:port/ की जरूरत नहीं है: