如何在Hadoop上编写MapReduce程序

查看数: 12808 | 评论数: 14 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-10-26 13:10

正文摘要:

本帖最后由 nettman 于 2014-5-25 19:54 编辑 1. 概述 1970年,IBM的研究员E.F.Codd博士在刊物《Communication of the ACM》上发表了一篇名为“A Relational Model of Data for Large Shared Data Banks”的论文 ...

回复

bob007 发表于 2013-10-26 13:10:24
请问调试源码在什么编译器里面吗?我一直在终端里面,不知道有其他的编译器,可以介绍下吗吗?
skaterxu 发表于 2013-10-26 13:10:24
-file 参数就不用拷贝到子节点了。
top_gloria 发表于 2013-10-26 13:10:24
回复 10# dapopo
   这个需要自己拷到子节点吗?吗?要放在子节点的哪个位置吗?不是传到HDFS上就可以吗吗?
我也是碰到那个错误,求解~~
qz2003 发表于 2013-10-26 13:10:24
使用PHP代码的时候,第一行:
#!/usr/bin/php
相当关键阿!
若不添加该行,Hadoop log shows:
...
RegistSnow 发表于 2010-5-13 14:10



使用任何脚本都要哪些,包括perl、awk和python等,否则默认通常为bash脚本
bob007 发表于 2013-10-26 13:10:24
使用PHP代码的时候,第一行:
#!/usr/bin/php
相当关键阿!

若不添加该行,Hadoop log shows:
stderr: mapper.php: line1 :?php: No such file or directory
oChengZi1234 发表于 2013-10-26 13:10:24
哈哈,搞定了!原因是没有将mapper.py和reducer.py拷贝到各个子节点去~
yaojiank 发表于 2013-10-26 13:10:24
楼主好,我运行的时候出现了:
[root@node161 hadoop]# bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar -mapper /root/mapper.py -reducer /root/reducer.py -input input/* -output output
packageJobJar: [/home/tmp/hadoop-unjar1693441522665847631/] [] /tmp/streamjob3333054264377001703.jar tmpDir=null
10/04/13 19:32:01 INFO mapred.FileInputFormat: Total input paths to process : 2
10/04/13 19:32:02 INFO streaming.StreamJob: getLocalDirs(): [/home/tmp//mapred/local]
10/04/13 19:32:02 INFO streaming.StreamJob: Running job: job_201004122206_0015
10/04/13 19:32:02 INFO streaming.StreamJob: To kill this job, run:
10/04/13 19:32:02 INFO streaming.StreamJob: /opt/hadoop/bin/../bin/hadoop job  -Dmapred.job.tracker=node161:9001 -kill job_201004122206_0015
10/04/13 19:32:02 INFO streaming.StreamJob: Tracking URL: http://node161:50030/jobdetails.jsp?jobid=job_201004122206_0015
10/04/13 19:32:03 INFO streaming.StreamJob:  map 0%  reduce 0%
10/04/13 19:32:34 INFO streaming.StreamJob:  map 100%  reduce 100%
10/04/13 19:32:34 INFO streaming.StreamJob: To kill this job, run:
10/04/13 19:32:34 INFO streaming.StreamJob: /opt/hadoop/bin/../bin/hadoop job  -Dmapred.job.tracker=node161:9001 -kill job_201004122206_0015
10/04/13 19:32:34 INFO streaming.StreamJob: Tracking URL: http://node161:50030/jobdetails.jsp?jobid=job_201004122206_0015
10/04/13 19:32:34 ERROR streaming.StreamJob: Job not Successful!
10/04/13 19:32:34 INFO streaming.StreamJob: killJob...
Streaming Job Failed!
请问这是怎么回事儿吗?谢谢!
oYaoXiang1 发表于 2013-10-26 13:10:24
回复 1# eyjian
关于文中提到的
用Hadoop Streaming运行MapReduce会比较用Java的代码要慢,因为有两方面的原因:
  • 使用 Java API >> C Streaming >> Perl Streaming 这样的一个流程运行会阻塞IO.
  • 不像Java在运行Map后输出结果有一定数量的结果集就启动Reduce的程序,用Streaming要等到所有的Map都运行完毕后才启动Reduce   为什么用Streaming要等到所有的Map都运行完毕后才启动Reduce而Java在运行Map后输出结果有一定数量的结果集就启动Reduce的程序,能说的详细点吗吗?一直没明白为什么Java运行的Map输出结果有一定数量的结果集就启动Reduce的程序
    我看源代码中StreamJob只是把命令都封装到了PipeMapRed中进行执行的
    如果我写一个MAP,在其中用Process执行外部程序命令并处理输出结果,这跟Streaming模式执行外部命令相比有什么性能差异吗吗?
  • atsky123 发表于 2013-10-26 13:10:24
    你要把\t和1拆开来看,\t是tab,就是空4个格,1就是个数字1。
    所以上面的意思是先输出query,然后空个tab的位置,再输出1.
    比如: string    1
    关闭

    推荐上一条 /2 下一条