【问题标题】:WEBHDFS REST API to copy/move files from windows server/local folder/desktop to HDFSWEBHDFS REST API 将文件从 Windows 服务器/本地文件夹/桌面复制/移动到 HDFS
【发布时间】:2016-12-19 16:33:25
【问题描述】:

使用 WEBHDFS REST API 调用可以将文件从 Windows 机器(即 Windows 服务器或 Windows 本地文件夹或桌面)传输或复制到 Hadoop-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 文件夹。

有什么建议可以一步完成吗? Step-1) Windows -> HDFS 使用 webhdfs 一步到位。

【问题讨论】:

    标签: curl hdfs hadoop2 jira-rest-api webhdfs


    【解决方案1】:

    我们可以使用 scp 命令将文件从 windows 文件系统复制到 HDFS。

    scp source_file_name user@/path/file_name
    

    我们也可以通过使用 winscp 工具来实现这一点。您可以安装它并建立与 hdfs 服务器的连接,然后可以传输文件。

    【讨论】:

      【解决方案2】:
      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多