gpt4 book ai didi

java - 使用Java代码进行映射器和化简器的EMR流作业

转载 作者:行者123 更新时间:2023-12-02 21:57:54 25 4
gpt4 key购买 nike

我目前有流作业,使用以ruby编写的mapper和reducer代码运行。我想将它们转换为Java。我不知道如何使用Java使用EMR hadoop运行流作业。亚马逊EMR网站上的cloudburst提供的示例过于复杂。以下是我目前如何运行作业的详细信息。

开始工作的代码:

        elastic-mapreduce --create --alive --plain-output --master-instance-type m1.small 
--slave-instance-type m1.xlarge --num-instances 2 --name "Job Name" --bootstrap-action
s3://bucket-path/bootstrap.sh

代码添加一个步骤:
    elastic-mapreduce -j <job_id> --stream --step-name "my_step_name" 
--jobconf mapred.task.timeout=0 --mapper s3://bucket-path/mapper.rb
--reducer s3://bucket-path/reducerRules.rb --cache s3://bucket-path/cache/cache.txt
--input s3://bucket-path/input --output s3://bucket-path/output

映射器代码从上面提到的EMR缓存参数的csv文件中读取,以及从也有一些csv文件的输入s3存储桶中读取,进行一些计算并将csv输出行打印到标准输出中。
//mapper.rb 
CSV_OPTIONS = {
// some CSV options
}

begin
file = File.open("cache.txt")
while (line = file.gets)
// do something
end
file.close
end

input = FasterCSV.new(STDIN, CSV_OPTIONS)
input.each{
// do calculations and get result
puts (result)
}

//reducer.rb

$stdin.each_line do |line|
// do some aggregations and get aggregation_result
if(some_condition) puts(aggregation_result)
end

最佳答案

如果您使用的是Java,则不使用流式传输。您可以直接根据MapReduce API构建Jar。

请查看hadoop源代码的examples文件夹,以获取一些良好的示例,包括臭名昭著的wordcount:
https://github.com/apache/hadoop/tree/trunk/src/examples/org/apache/hadoop/examples

我不确定您为什么要使用Java,但是直接对API进行编码可能会很痛苦。您可能要尝试以下方法之一:
Java项目:

  • 级联http://www.cascading.org/
  • 紧缩http://www.cloudera.com/blog/2011/10/introducing-crunch/

  • 非Java:
  • Hive(类似于SQL)https://cwiki.apache.org/confluence/display/Hive/Home
  • pig http://pig.apache.org/#Getting+Started
  • 史酷比(scala)https://github.com/NICTA/scoobi

  • FWIW我认为Pig可能是我的选择,并且在EMR上开箱即用。

    关于java - 使用Java代码进行映射器和化简器的EMR流作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9061120/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com