2012-07-13 21 views
7

पर फ़ाइल की प्रतिलिपि बनाना मुझे एचडीएफएस फाइल सिस्टम से फ़ाइल को "स्थानीय" फ़ाइल में डाउनलोड करने की कोशिश करने में समस्या है। (भले ही विपरीत ऑपरेशन किसी समस्या के बिना काम करता हो)। * नोट:एचडीएफएस से स्थानीय मशीन

Configuration conf = new Configuration(); 
    conf.set("fs.defaultFS", "${NAMENODE_URI}"); 
    FileSystem hdfsFileSystem = FileSystem.get(conf); 

    String result = ""; 

    Path local = new Path("${SOME_LOCAL_PATH}"); 
    Path hdfs = new Path("${SOME_HDFS_PATH}"); 

    String fileName = hdfs.getName(); 

    if (hdfsFileSystem.exists(hdfs)) 
    { 
     hdfsFileSystem.copyToLocalFile(hdfs, local); 
     result = "File " + fileName + " copied to local machine on location: " + localPath; 
    } 
    else 
    { 
     result = "File " + fileName + " does not exist on HDFS on location: " + localPath; 
    } 

    return result; 

अपवाद है कि मैं पीछा कर रहा है मिल:

12/07/13 14:57:46 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
Exception in thread "main" java.io.IOException: Cannot run program "cygpath": CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(Unknown Source) 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:206) 
    at org.apache.hadoop.util.Shell.run(Shell.java:188) 
    at org.apache.hadoop.fs.FileUtil$CygPathCommand.<init>(FileUtil.java:412) 
    at org.apache.hadoop.fs.FileUtil.makeShellPath(FileUtil.java:438) 
    at org.apache.hadoop.fs.FileUtil.makeShellPath(FileUtil.java:465) 
    at org.apache.hadoop.fs.RawLocalFileSystem.execCommand(RawLocalFileSystem.java:573) 
    at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:565) 
    at org.apache.hadoop.fs.FilterFileSystem.setPermission(FilterFileSystem.java:403) 
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:452) 
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:420) 
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:774) 
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:755) 
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:654) 
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:259) 
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:232) 
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:183) 
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1837) 
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1806) 
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1782) 
    at com.hmeter.hadoop.hdfs.hdfsoperations.HdfsOperations.fileCopyFromHdfsToLocal(HdfsOperations.java:75) 
    at com.hmeter.hadoop.hdfs.hdfsoperations.HdfsOperations.main(HdfsOperations.java:148) 
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(Unknown Source) 
    at java.lang.ProcessImpl.start(Unknown Source) 
    ... 22 more 

किसी भी विचार क्या हो सकता है फ़ाइल निर्दिष्ट पथ

यहाँ पर HDFS फाइल सिस्टम पर मौजूद है एक कोड का टुकड़ा है एक मुद्दा? साइगविन के लिए साइक्पाथ की आवश्यकता क्यों है? मैं विंडोज पर इस कोड चल रहा हूँ 7.

धन्यवाद

उत्तर

9

एपीआई से इस पद्धति का उपयोग का प्रयास करें: के साथ

hdfsFileSystem.copyToLocalFile(hdfs, local); 

: की जगह

//where delSrc is do you want to delete the source, src and dst you already have and useRawLocalFileSystem should be set to true in your case 
hdfsFileSystem.copyToLocalFile(delSrc, src, dst, useRawLocalFileSystem); 
अपने मामले में

hdfsFileSystem.copyToLocalFile(false, hdfs, local, true); 
+0

क्या यह काम करता है, ओजी के माध्यम से नौकरी जमा करते समय? – Abhinay

+0

@Abhinay मुझे इस बारे में कोई जानकारी नहीं है कि अब इसके साथ काम नहीं कर रहा है – ant

6

आप नीचे दिखाए गए कोड का पालन कर सकते हैं:

public static void main(String args[]){ 
    try { 
     Configuration conf = new Configuration(); 
     conf.set("fs.defaultFS", "hdfs://localhost:54310/user/hadoop/"); 
     FileSystem fs = FileSystem.get(conf); 
     FileStatus[] status = fs.listStatus(new Path("hdfsdirectory")); 
     for(int i=0;i<status.length;i++){ 
      System.out.println(status[i].getPath()); 
      fs.copyToLocalFile(false, status[i].getPath(), new Path("localdir")); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 
संबंधित मुद्दे