【问题标题】:Copy file from Hdfs to Hdfs scala将文件从 Hdfs 复制到 Hdfs scala
【发布时间】:2019-11-14 10:51:23
【问题描述】:

有没有一种已知的方法使用 Hadoop api / spark scala 将文件从一个目录复制到 Hdfs 上的另一个目录?

我尝试过使用 copyFromLocalFile 但没有帮助

【问题讨论】:

标签: scala apache-spark hdfs


【解决方案1】:

据我了解您的问题,答案就像 abc 一样简单。实际上,您的操作系统文件系统和其他一些分布式版本在基本概念(例如在其中复制文件)方面没有区别。确实,每个命令都有自己的规则。例如,当您想将文件从一个目录复制到另一个目录时,您可以执行以下操作:

hdfs dfs -cp /dir_1/file_1.txt /dir_2/file_1_new_name.txt

示例命令的第一部分只是让命令被路由到真正的目的地,而不是操作系统自己的文件系统。

如需进一步阅读,您可以使用:copying data in hdfs

【讨论】:

  • 这是使用 shell 而不是 scala / spark 编程
  • 您说的是一种已知的方法,没有已知的标准方法可以使用并非设计用于执行此操作的工具来执行此操作。标准的一种是提到的一种。为什么要使用 spark 来做呢?
  • 我在多个目录中有一堆 Json 文件,我想将它们复制到另一个目录,以便我可以通过将 hive 表指向该 Hdfs 位置来使用 hive 读取它
  • 好的,您是否需要在每次 Spark 程序开始运行时都进行此复制?或者你可能第一次需要它?如果需要完成,为什么不使用 shell 命令?如果这些数据是使用另一个进程提供的,为什么不将进程设置为将其输出保存到要使用 hive 访问的目标?
  • 这是一个工作流程,无法更改。我正在寻找每次作业运行时使用 spark 复制文件的解决方案
【解决方案2】:

尝试 Hadoop 的 FileUtil.copy() 命令,如下所述:https://hadoop.apache.org/docs/r2.8.5/api/org/apache/hadoop/fs/FileUtil.html#copy(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path,%20boolean,%20org.apache.hadoop.conf.Configuration)

val conf = new org.apache.hadoop.conf.Configuration()
val srcPath = new org.apache.hadoop.fs.Path("hdfs://my/src/path")
val dstPath = new org.apache.hadoop.fs.Path("hdfs://my/dst/path")

org.apache.hadoop.fs.FileUtil.copy(
srcPath.getFileSystem(conf), 
srcPath, 
dstPath.getFileSystem(conf), 
dstPath, 
true, 
conf
) 

【讨论】:

  • 感谢上述内容,但它会移动文件,而不仅仅是制作副本。
  • 阅读链接,在我的例子中你只需要改变 true -> false。
  • 即使在将标志设置为 false 之后......它也会尝试删除文件......如何解决这个问题
猜你喜欢
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 2023-04-02
  • 2020-12-22
  • 2014-07-08
  • 1970-01-01
相关资源
最近更新 更多