2016-08-12 109 views
2

使用WEBHDFS REST API調用可以將文件從Windows機器(即Windows服務器或Windows本地文件夾或桌面)傳輸或複製到Hadoop- HDFS文件系統?WEBHDFS REST API將文件從Windows服務器/本地文件夾/桌面複製/移動到HDFS

如果是有任何示例命令信息?我使用了
Windows - >(使用ftp) - > Linux目錄 - >(使用webhdfs) - > HDFS,這是兩個步驟的過程,我正在尋找一個步驟的過程直接從Windows - >(webhdfs) - > HDFS。

我在https://hadoop.apache.org/docs/r1.0.4/webhdfs.html也提到了有用的信息。

示例:如果我的文件位於E:\ user \ accounts.txt中,並且我想使用webhdfs將此文件移動到HDFS/user/kumar /文件夾。

目前我正在做的是 第1步)ftp帳戶文件從Windows到linux目錄。
步驟2)運行curl命令將文件從linux機器移動到HDFS文件夾。

任何建議在一個步驟中完成它? 步驟1)Windows - >使用webhdfs的HDFS一步到位。

回答

0
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.URI; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.IOUtils; 

import jcifs.smb.NtlmPasswordAuthentication; 
import jcifs.smb.SmbFile; 
import jcifs.smb.SmbFileInputStream; 

public class FileWriteToHDFS 
{ 
    public static void main(String[] args) throws Exception 
    { 
     String src = args[0]; 
     String dest = args[1]; 

     Console console = System.console(); 
     String username = console.readLine("Username: "); 
     String password = new String(console.readPassword("Password: ")); 
     String domain = console.readLine("Authentication Domain: "); 

     NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, username, password); 
     SmbFile srcSMB = new SmbFile (src, auth); 

     InputStream in = new SmbFileInputStream(srcSMB); 

     Configuration myConf = new Configuration(); 

     FileSystem fs = FileSystem.get(URI.create(dest), myConf); 
     OutputStream out = fs.create(new Path(dest)); 
     try 
     { 
      IOUtils.copyBytes(in, out, 4096, false); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      IOUtils.closeStream(in); 
     } 
    } 
} 

該代碼使用JCIFS通過SMB協議將複製到HDFS

相關問題