来自 Windows 的 rxHadoopCopyFromLocal

rxHadoopCopyFromLocal from Windows

从 Windows 复制到远程 HDFS 的正确语法是什么?

我正在尝试使用 RStudio 将文件从我的本地计算机复制到远程 hadoop 集群

rxHadoopCopyFromLocal("C:/path/to/file.csv", "/target/on/hdfs/")

这会抛出

copyFromLocal '/path/to/file.csv': no such file or directory`

注意 C:/ 消失了。

这个语法也不行

rxHadoopCopyFromLocal("C:\path\to\file.csv", "/target/on/hdfs/")

有错误

-copyFromLocal: Can not create a Path from a null string

这是一个常见的错误。

原来 rxHadoopCopyFromLocal 命令是 hdfs fs -copyFromLocal 的包装器。它所做的只是从本地文件系统复制到 hdfs 目标。

在这种情况下,rxSetComputeContext(remotehost) 被设置为远程集群。在远程机器上,没有 C:\path\to\file.csv

这里有几种获取文件的方法。

为远程 Hdfs 集群配置本地 hdfs-site.xml

  • 确保您在本地计算机上安装了 hadoop 工具
  • 编辑您的本地 hdfs-site.xml 以指向远程集群
  • 确保rxSetComputeContext("local")
  • 运行 rxHadoopCopyFromLocal("C:\local\path\to\file.csv", "/target/on/hdfs/")

SCP 和远程计算上下文

  • 使用 scp C:\local\path\to\file.csv user@remotehost:/tmp
  • 将您的文件复制到远程计算机
  • 确保rxSetComputeContext(remotehost)
  • 运行 rxHadoopCopyFromLocal("/tmp/file.csv", "/target/on/hdfs/")

dev version of dplyrXdf 现在支持 HDFS 中的文件。您可以按如下方式从本机文件系统上传文件;这既适用于边缘节点,也适用于来自远程客户端的

hdfs_upload("c\path\to\file.csv", "/target/on/hdfs")

如果你有一个数据集(一个R对象)你想上传,你也可以使用标准的dplyr copy_to动词。这会将数据导入 Xdf 文件并上传,返回指向上传文件的 RxXdfData 数据源。

txt <- RxTextData("file.csv")
hd <- RxHdfsFileSystem()
hdfs_xdf <- copy_to(hd, txt, name="uploaded_xdf")