Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop Amazon Elastic MapReduce的模式匹配输入文件_Hadoop_Amazon Web Services_Elastic Map Reduce_Emr - Fatal编程技术网

Hadoop Amazon Elastic MapReduce的模式匹配输入文件

Hadoop Amazon Elastic MapReduce的模式匹配输入文件,hadoop,amazon-web-services,elastic-map-reduce,emr,Hadoop,Amazon Web Services,Elastic Map Reduce,Emr,我正在尝试运行一个MapReduce流作业,它从s3存储桶中匹配给定模式的目录中获取输入文件。模式类似于bucket name/[date]/product/logs/[hour]/[logfilename]。一段时间后将出现一个日志示例,如bucket name/2013-05-02/product/logs/05/log123456789 我可以通过仅将文件名的小时部分作为通配符传递来使作业正常工作。例如:bucket name/2013-05-02/product/logs/*/。这将成功

我正在尝试运行一个MapReduce流作业,它从s3存储桶中匹配给定模式的目录中获取输入文件。模式类似于
bucket name/[date]/product/logs/[hour]/[logfilename]
。一段时间后将出现一个日志示例,如
bucket name/2013-05-02/product/logs/05/log123456789

我可以通过仅将文件名的小时部分作为通配符传递来使作业正常工作。例如:
bucket name/2013-05-02/product/logs/*/
。这将成功地从每个小时中提取每个日志文件,并将它们分别传递给映射者

问题在于,我还尝试将日期设置为通配符,例如:
bucket name/*/product/logs/*/
。当我这样做时,会创建作业,但不会创建任务,最终会失败。此错误将打印在系统日志中

2013-05-02 08:03:41,549 ERROR org.apache.hadoop.streaming.StreamJob (main): Job not successful. Error: Job initialization failed:
java.lang.OutOfMemoryError: Java heap space
    at java.util.regex.Matcher.<init>(Matcher.java:207)
    at java.util.regex.Pattern.matcher(Pattern.java:888)
    at org.apache.hadoop.conf.Configuration.substituteVars(Configuration.java:378)
    at org.apache.hadoop.conf.Configuration.get(Configuration.java:418)
    at org.apache.hadoop.conf.Configuration.getLong(Configuration.java:523)
    at org.apache.hadoop.mapred.SkipBadRecords.getMapperMaxSkipRecords(SkipBadRecords.java:247)
    at org.apache.hadoop.mapred.TaskInProgress.<init>(TaskInProgress.java:146)
    at org.apache.hadoop.mapred.JobInProgress.initTasks(JobInProgress.java:722)
    at org.apache.hadoop.mapred.JobTracker.initJob(JobTracker.java:4238)
    at org.apache.hadoop.mapred.EagerTaskInitializationListener$InitJob.run(EagerTaskInitializationListener.java:79)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

2013-05-02 08:03:41,549 INFO org.apache.hadoop.streaming.StreamJob (main): killJob...
2013-05-02 08:03:41549错误org.apache.hadoop.streaming.StreamJob(main):作业未成功。错误:作业初始化失败:
java.lang.OutOfMemoryError:java堆空间
位于java.util.regex.Matcher。(Matcher.java:207)
位于java.util.regex.Pattern.matcher(Pattern.java:888)
位于org.apache.hadoop.conf.Configuration.substituteVars(Configuration.java:378)
位于org.apache.hadoop.conf.Configuration.get(Configuration.java:418)
位于org.apache.hadoop.conf.Configuration.getLong(Configuration.java:523)
位于org.apache.hadoop.mapred.SkipBadRecords.getMapperMaxSkipRecords(SkipBadRecords.java:247)
位于org.apache.hadoop.mapred.TaskInProgress(TaskInProgress.java:146)
位于org.apache.hadoop.mapred.JobInProgress.initTasks(JobInProgress.java:722)
位于org.apache.hadoop.mapred.JobTracker.initJob(JobTracker.java:4238)
位于org.apache.hadoop.mapred.热切TaskInitializationListener$InitJob.run(热切TaskInitializationListener.java:79)
位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
运行(Thread.java:662)
2013-05-02 08:03:41549 INFO org.apache.hadoop.streaming.StreamJob(main):killJob。。。

在进一步的测试中,多重通配符语法的工作方式与预期的相同。一开始,我很难让它正常工作,后来才意识到需要Ruby 1.8.7意味着它需要Ruby 1.8.7,以后就不需要了。

是的,我正在通过rbenv使用1.8.7-p370,但在使用1.9.x时运气不佳