设为首页 收藏本站
查看: 934|回复: 0

[经验分享] spring hadoop系列二(MapReduce and Distributed cache)

[复制链接]

尚未签到

发表于 2016-12-10 08:58:09 | 显示全部楼层 |阅读模式
  关于MapReduce and Distributed Cache
  一、创建Hadoop Job
  在前面的系列一里面我们已经知道如何配置hadoop了,在完成配置工作之后,我们如何提交job,并运行这些job将是接下来我们讲述的
  使用SHDP创建job是相当简单的

<hdp:job id="mr-job"                            指定jod id
input-path="/input/" output-path="/ouput/"    指定任务input和output地址
mapper="org.apache.hadoop.examples.WordCount.TokenizerMapper" 指定mapper
reducer="org.apache.hadoop.examples.WordCount.IntSumReducer"/> 指定reduce
  和我们用spring 定义bean操作的写法很相似。上面的代码可以看到没有指定hadoop configuration,在默认情况下,则会使用默认的约定命名“hadoopConfiguration”,关于key和value的类型将根据mapper和reduce类型自动进行匹配。上面的属性配置型是可以重写的:configuration-ref、key、value

<hdp:job id="mr-job"
input-path="/input/" output-path="/ouput/"
mapper="mapper class" reducer="reducer class"
jar-by-class="class used for jar detection"
properties-location="classpath:special-job.properties">
electric=sea
</hdp:job>
  (1)、创建hadoop steaming job
  具体代码如下:

<hdp:streaming id="streaming"
input-path="/input/" output-path="/ouput/"
mapper="${path.cat}" reducer="${path.wc}"/>
  hadoop streamimg job(简称流)这个也是hadoop比较流行的特征。创建map/reduce的job通过可执行文件或者脚本,类似使用cat和wc命令,很容易的从命令行启动stream job,是需要配置很多参数,而SHDP恰恰简化了这些工作。
  命令行配置:

<hdp:streaming id="streaming-env"
input-path="/input/" output-path="/ouput/"
mapper="${path.cat}" reducer="${path.wc}">
<hdp:cmd-env>
EXAMPLE_DIR=/home/example/dictionaries/
...
</hdp:cmd-env>
</hdp:streaming>
  二、运行hadoop  job
  当job在创建和配置后需要提交到到hadoop cluster、
  单个job

<hdp:job-runner id="myjob-runner" pre-action="cleanup-script" post-action="export-results" job-ref="myjob" run-at-startup="true"/>
<hdp:job id="myjob"  input-path="/input/" output-path="/output/"
mapper="org.apache.hadoop.examples.WordCount.TokenizerMapper"
reducer="org.apache.hadoop.examples.WordCount.IntSumReducer" />
  多个job

<hdp:job-runner id="myjobs-runner" pre-action="cleanup-script" job-ref="myjob1, myjob2" run-at-startup="true"/>
<hdp:job id="myjob1"  ... />
<hdp:streaming id="myjob2"  ... />
  默认情况下 run-at-startup为false,那么一个job不能执行的则可以通过手动设置或者设置run-at-startup设置为true。在没一个job run before 和 after 都将触发pre 和 post行为。
  注:当hadoop job提交或者执行处于锁定状态,JobRunner使用JDK的Excutor开启一个job;默认实现是SyncTaskExcutor开启thread执行job来模仿hadoop命令行行为。由于hadoop的操作是非常耗时的,可能会导致程序冻结,不能完成正常的操作甚至会导致程序挂掉等等类似的情况,因而在应用正式的生成环境,要多多检查对应的策略是否实现比较好。
  job runner允许在关机的时候 正在运行的job能够被cancelled 和 killed ,这些应用只适合wait-for-completion为true,使用另外一个不同的executor替换默认的;若是自定义行为的话,可以通过设定kill-job-at-shutdown为false或重新实现executor-ref的实现
  三、hadoop job tasklet 
  针对hadoop的批处理环境,SHDP提供专用的tasklet 执行批处理

<hdp:job-tasklet id="hadoop-tasklet" job-ref="mr-job" wait-for-completion="true" />
  一般默认情况下,tasklet要等job complete之后才能执行。一旦wait-for-complete 为false,则不会等到job完成任务之后,才将job提交hadoop cluster
  四、hadoop tool
  指定class

<hdp:tool-runner id="someTool" tool-class="org.foo.SomeTool" run-at-startup="true">
<hdp:arg value="data/in.txt"/>
<hdp:arg value="data/out.txt"/>
property=value
</hdp:tool-runner>
  也可以使用jar

<hdp:tool-runner ... jar="myTool.jar">
</hdp:tool-runner>
  使用jar属性也就是意味着jar被用作实例并启动工具,同时它所依赖的jar也会被加载,也就是意味着jar不再作为classpath必须的部分
  嵌套tool

<hdp:tool-runner id="someTool" run-at-startup="true">
<hdp:tool>
<bean class="org.foo.AnotherTool" p:input="data/in.txt" p:output="data/out.txt"/>
</hdp:tool>
</hdp:tool-runner>
  注意:tool-runner默认不执行tool,只有当它被应用的时候;但是可以通过run-at-startup属性进行修改
  (1)、使用tool-runner替换shell
  shell实现:

hadoop jar job1.jar -files fullpath:props.properties -Dconfig=config.properties ...
hadoop jar job2.jar arg1 arg2...
...
hadoop jar job10.jar ...
  tool-runner

<hdp:tool-runner id="job1" tool-class="job1.Tool" jar="job1.jar" files="fullpath:props.properties" properties-location="config.properties"/>
<hdp:tool-runner id="job2" jar="job2.jar">
<hdp:arg value="arg1"/>
<hdp:arg value="arg2"/>
</hdp:tool-runner>
<hdp:tool-runner id="job3" jar="job3.jar"/>
  五、hadoop Distributed Cache 分布式cache

<hdp:cache create-symlink="true">
<hdp:classpath value="/cp/some-library.jar#library.jar" />
<hdp:cache value="/cache/some-archive.tgz#main-archive" />
<hdp:cache value="/cache/some-resource.res" />
<hdp:local value="some-file.txt" />
</hdp:cache>
  DistributedCache对应的格式 absolute-path#link-name;若是link-name没有指定,则会自动推断资源文件名字

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312151-1-1.html 上篇帖子: Hadoop生态系统官网、下载地址、文档 下篇帖子: Hadoop小试牛刀之dump数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表