我试图在Amazon EMR集群上运行一个自定义JAR,使用自定义JAR的输入和输出参数作为S3 bucket(-input s3n://S3\u bucket\u name/ldas/in-output s3n://S3\u bucket\u name/ldas/out)
当集群运行此Custom JAR时,会发生以下异常。
Exception in thread "main" java.lang.IllegalArgumentException: **Wrong FS: s3n://s3_bucket_name/ldas/out, expected: hdfs://10.214.245.187:9000**
at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:644)
at org.apache.hadoop.hdfs.DistributedFileSystem.getPathName(DistributedFileSystem.java:181)
at org.apache.hadoop.hdfs.DistributedFileSystem.access$000(DistributedFileSystem.java:92)
at org.apache.hadoop.hdfs.DistributedFileSystem$11.doCall(DistributedFileSystem.java:585)
at org.apache.hadoop.hdfs.DistributedFileSystem$11.doCall(DistributedFileSystem.java:581)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.delete(DistributedFileSystem.java:581)
at cc.mrlda.ParseCorpus.run(ParseCorpus.java:101)
at cc.mrlda.ParseCorpus.run(ParseCorpus.java:77)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at cc.mrlda.ParseCorpus.main(ParseCorpus.java:727)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
如何纠正这个错误?如何在Amazon EMR中使用s3n桶作为文件系统?此外,我认为将默认文件系统更改为s3桶会很好,但我不确定如何做到。
我建议检查您的jar是否使用与此处所示相同的参数处理方法:http://java.dzone.com/articles/running-elastic-mapreduce-job
明确地
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
或者,我成功地添加了自定义脚本运行程序步骤,将文件从s3复制到hadoop,或者反之亦然。特别是如果您连续执行了几个流式处理步骤,那么将内容保留在HDF上会很有帮助。您应该能够使用以下内容制作一个简单的bash脚本
hadoop fs -cp s3://s3_bucket_name/ldas/in hdfs:///ldas/in
和
hadoop fs -cp hdfs:///ldas/out s3://s3_bucket_name/ldas/out
然后将您的流步骤设置为在hdfs:///ldas/in和hdfs:///ldas/out之间操作
10.2. 标准输入、输出和错误 UNIX 用户已经对标准输入,标准输出和标准错误的概念非常熟悉了。这一节是为其他不熟悉的人准备的。 标准输入和标准错误(通常缩写为 stdout 和 stderr)是內建在每一个 UNIX 系统中的管道。当你 print 某些东西时,结果前往 stdout 管道;当你的程序崩溃并打印出调试信息(类似于 Python 中的错误跟踪)的时候,信息前往 stderr 管
我在Windows 10上使用Logback 1.2.11和Java17。我正在使用以下: 如果在我的代码中我使用了
问题内容: 为什么我从以下代码中获得“ AAAAAAAAA”而不是“ 1A234A567”: 任何想法? 问题答案: 函数以正则表达式为参数。和正则表达式“。” 表示“任何字符”。您必须对其进行转义以指定它是您想要的字符:
问题内容: 我正在使用Python编写一些加密算法,但是我以前从未使用过Python。 首先,看一下这段代码,然后我将解释这个问题, x和y的值为, 我不明白代码的第三行。为了理解第三行,我不得不研究函数,我遇到了这个问题, zip函数帮助元组 根据这个问题的答案,代码, 将输出, 但是当我尝试打印时, 我得到这个输出, 为什么我的输出与原始输出不同? 问题答案: 在Python 3中返回一个迭代
文件 std::fs::File 本身实现了 Read 和 Write trait,所以文件的输入输出非常简单,只要得到一个 File 类型实例就可以调用读写接口进行文件输入与输出操作了。而要得到 File 就得让操作系统打开(open)或新建(create)一个文件。还是拿例子来说明 use std::io; use std::io::prelude::*; use std::fs::File;
我正在尝试制作一个程序,让很多人进入ArrayList,然后从中随机选择一个名字。代码运行正常,但请求名称输入的字符串在第一次运行时会显示两次。知道为什么会这样吗? 我希望它显示的内容:输入名称:。。。。。。 显示内容:输入名称:输入名称:。。。。。。