当前位置: 首页 > 知识库问答 >
问题:

如何使用hadoop FS shell将hadoop中的两个文件连接成一个文件?

祝锐
2023-03-14

我正在使用Hadoop 0.20.2,如果可能的话,我想使用-cat shell命令将两个文件连接成一个文件(来源:http://hadoop.apache.org/common/docs/r0.19.2/hdfs_shell.html)

这是我正在提交的命令(名称已更改):

**/path/path/path/hadoop-0.20.2> bin/hadoop fs -cat /user/username/folder/csv1.csv /user/username/folder/csv2.csv > /user/username/folder/outputdirectory/**

它返回bash: /user/username/folder/outputdirectory/:没有这样的文件或目录

我还尝试创建该目录,然后再次运行它--仍然出现“没有这样的文件或目录”错误。

我还尝试使用-cp命令将两者复制到一个新文件夹中,并使用-getmerge将其合并,但getmerge也没有成功。

在hadoop中这样做的原因是这些文件非常庞大,在hadoop之外下载、合并和重新上传需要很长时间。

共有2个答案

卢作人
2023-03-14

要将文件夹中的所有文件连接到输出文件,请执行以下操作:

hadoop fs -cat myfolder/* | hadoop fs -put - myfolder/output.txt

如果您在hdfs上有多个文件夹,并且您想连接每个文件夹中的文件,您可以使用外壳脚本来执行此操作。(注意:这不是很有效,并且可能很慢)

语法:

for i in `hadoop fs -ls <folder>| cut -d' ' -f19` ;do `hadoop fs -cat $i/* | suy hadoop fs -put - $i/<outputfilename>`; done

例如:

for i in `hadoop fs -ls my-job-folder | cut -d' ' -f19` ;do `hadoop fs -cat $i/* |hadoop fs -put - $i/output.csv`; done

说明:因此,您基本上循环所有文件,并将每个文件夹的内容分类到hdfs上的输出文件中。

史昀
2023-03-14

该错误与您试图将命令的标准输出重新定向回HDFS有关。有几种方法可以做到这一点,使用hadoop fs-put命令,源参数是炒作:

bin/hadoop fs -cat /user/username/folder/csv1.csv /user/username/folder/csv2.csv | hadoop fs -put - /user/username/folder/output.csv

getmerge也输出到本地文件系统,而不是HDFS

不幸的是,没有一种有效的方法可以将多个文件合并到一个文件中(除非您想查看Hadoop的“附加”,但在您的Hadoop版本中,默认情况下这是禁用的,并且可能存在错误),而无需将文件复制到一台机器上,然后再返回到HDFS中,无论您在

  • 一个自定义map reduce作业,包含一个reducer和一个保留文件顺序的自定义mapper reducer(请记住,每一行都将按键排序,因此您的键需要是输入文件名和行号的某种组合,值将是行本身)
 类似资料:
  • 我正试图在hadoop中编写一个数据连接映射Reduce作业。我觉得我很接近,但我有一个问题,阻止地图1馈入地图2。 我有两个映射器和一个减少,并试图强制Map1从一个文件读取,同时强制Map2从另一个文件读取。我想在减少器中解析结果以格式化连接输出。 我知道默认情况下,当在作业中链接映射器时,作业的输出将是下一个作业的输入,我知道这可以被覆盖,但不成功。来自 map1 的数据被确认将馈送到 ma

  • 我已经用python创建了一个GUI(使用Tkinter),在使用os的GUI中单击一个按钮就可以运行python文件。系统('python_file.py')。我想把所有这些python文件打包成单个文件。通过将Tkinter文件保留为主文件,使用pyinstaller创建exe文件。 我创造了这个世界。通过在命令行中执行以下操作来创建exe文件: pyinstaller--debug--one

  • 问题内容: 我是PHP的新手,我使用Eclipse SDE构建一个简单的Web应用程序。 我的方案是: 我有 index.php 页面,其中包括登录表单( 2个文本框和Login Button ) 我有包含两个表的MySQL数据库:system_users和user_errors 每当用户成功在index.php页面中登录时,这都应将其重定向到 page1.php ,然后从user_errors表

  • 问题内容: 如何使用Java合并两个WAV文件? 我试过了,但是没有正常工作,他们还有其他方法吗? 问题答案: 如果直接使用wav文件的字节,则可以在任何编程语言中使用相同的策略。对于此示例,我将假设两个源文件具有相同的比特率/数字通道,并且具有相同的长度/大小。(否则,您可能可以在开始合并之前对其进行编辑)。 首先看一下WAV规范,我在斯坦福课程网站上找到了一个很好的人: 常见的标头长度为44或

  • 我遇到问题< code >没有要连接的对象。我不能进口。csv文件,将它们连接成一个数据帧。我在用熊猫。旧答案没有帮助我,所以请不要标记为重复。 文件夹结构就是这样 < li >不起作用

  • 问题内容: 我正在尝试将我的reducer的结果输出到多个文件。数据结果全部包含在一个文件中,其余结果根据它们所尊重的文件中的类别进行划分。我知道使用0.18可以使用MultipleOutputs做到这一点,并且它尚未被删除。但是,我正在尝试使我的应用程序兼容0.20+。现有的多输出功能仍然需要JobConf(我的应用程序使用Job和Configuration)。如何根据密钥生成多个输出? 问题答