OOZIE调用shell脚本做mr计算挂死问题 100分!

---Wayne--- 2014-12-07 01:04:19
加精
OOZIE调用shell脚本,在.sh脚本里我又调用hadoop jar。。。执行mr计算,,开始提示内存不够,我把内存开大后通过oozie分配运行这个sh文件的节点直接挂死了,我在任意节点上执行这个sh只需要10分钟。是不是oozie不支持这种shell脚本内部调用mr啊,各位有没有经验。
...全文
18245 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_24609661 2014-12-18
  • 打赏
  • 举报
回复
随便看看学习学习
  • 打赏
  • 举报
回复
看看结果如何。
cattpon 2014-12-10
  • 打赏
  • 举报
回复
看看结果如何。。。。
qq_24231931 2014-12-10
  • 打赏
  • 举报
回复
看看结果如何。。。。
cxp250229667 2014-12-09
  • 打赏
  • 举报
回复
看看结果如何。。。。
---Wayne--- 2014-12-09
  • 打赏
  • 举报
回复
引用 25 楼 sky_walker85 的回复:
[quote=引用 23 楼 laser1983 的回复:] [quote=引用 22 楼 sky_walker85 的回复:] 刚查到资料,实际上是可以在map或reduce中调用子job的,但这样会耗费过多内存,比如在reduce中调用子job,那么reducer必须要等到子job完成后才能释放内存,假设有10个reducer,由于它们一直不释放内存,而子job由需要内存,就出现了内存溢出。不知道这样分析是否正确,但感觉大概就是这样的
可能是这样吧,反正这条路走不通了,哈哈。其实我就是想实现jar部署在hdfs上,能够根据动态参数调用mr,前后还有些额外数据处理,把整个流程串起来,看来单靠oozie不好使啊,有没有好的解决方案啊[/quote] 这个不是很难,我在实际中就是通过shell结和crontab实现的,也是动态传递参数,比如处理两天前的数据,日期就是参数,还有输出的目录也是动态参数,作业执行前包括上传数据到hdfs,执行完毕后将输出加载到hive中。楼主也可以按照这种思路实现自己的shell[/quote] 之前我也是shell+cron,现在追求高了点,哈哈。主要是有个监控界面,并能够通过界面操作完成流程定制,本来想找个开源的改改就完事了,也试过zeus,觉得都不好使,还是自己做一个算了,这玩意不复杂。
laoer_2002 2014-12-09
  • 打赏
  • 举报
回复
完全看不懂是什么
sxax 2014-12-08
  • 打赏
  • 举报
回复
引用 3 楼 laser1983 的回复:
[quote=引用 2 楼 sky_walker85 的回复:] 应该是支持的,楼主所谓的把内存开打,具体指的什么意思,是增加虚拟机的内存使用吗
引用 楼主 laser1983 的回复:
OOZIE调用shell脚本,在.sh脚本里我又调用hadoop jar。。。执行mr计算,,开始提示内存不够,我把内存开大后通过oozie分配运行这个sh文件的节点直接挂死了,我在任意节点上执行这个sh只需要10分钟。是不是oozie不支持这种shell脚本内部调用mr啊,各位有没有经验。
开始日志报错: Container [pid=119662,containerID=container_1417739186174_0001_01_000002] is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used; 3.6 GB of 4 GB virtual memory used. Killing container. Dump of the process-tree for container_1417739186174_0001_01_000002 : |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE |- 119662 118477 119662 119662 (bash) 0 0 108646400 307 /bin/bash -c /usr/java/jdk1.7.0_45-cloudera/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx200m -Djava.net.preferIPv4Stack=true -Xmx825955249 -Djava.io.tmpdir=/data02/yarn/nm/usercache/root/appcache/application_1417739186174_0001/container_1417739186174_0001_01_000002/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1417739186174_0001/container_1417739186174_0001_01_000002 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 172.16.1.20 46878 attempt_1417739186174_0001_m_000000_0 2 1>/var/log/hadoop-yarn/container/application_1417739186174_0001/container_1417739186174_0001_01_000002/stdout 2>/var/log/hadoop-yarn/container/application_1417739186174_0001/container_1417739186174_0001_01_000002/stderr |- 119670 119662 119662 119662 (java) 934 95 1472245760 80806 /usr/java/jdk1.7.0_45-cloudera/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx200m -Djava.net.preferIPv4Stack=true -Xmx825955249 -Djava.io.tmpdir=/data02/yarn/nm/usercache/root/appcache/application_1417739186174_0001/container_1417739186174_0001_01_000002/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1417739186174_0001/container_1417739186174_0001_01_000002 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 172.16.1.20 46878 attempt_1417739186174_0001_m_000000_0 2 |- 119798 119725 119662 119662 (java) 419521 2416 2145419264 180747 /usr/java/jdk1.7.0_45-cloudera/bin/java -Xmx1000m -Dhadoop.log.dir=/opt/cloudera/parcels/CDH-5.0.3-1.cdh5.0.3.p0.35/lib/hadoop/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/cloudera/parcels/CDH-5.0.3-1.cdh5.0.3.p0.35/lib/hadoop -Dhadoop.id.str= -Dhadoop.root.logger=INFO,CLA -Djava.library.path=/opt/cloudera/parcels/HADOOP_LZO-0.4.15-1.gplextras.p0.101/lib/hadoop/lib/native:/opt/cloudera/parcels/CDH-5.0.3-1.cdh5.0.3.p0.35/lib/hadoop/lib/native:/opt/cloudera/parcels/CDH-5.0.3-1.cdh5.0.3.p0.35/lib/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1417739186174_0001/container_1417739186174_0001_01_000002 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar MyMr.jar com.aotain.hdfs.mapreduce.PingAnDriver /user/hive/warehouse/broadband.db/user_visitlog/shenzhen/20141204 /user/oozie/jobroot/url2user/gf_edm/tmp /user/oozie/jobroot/url2user/cfg/gf_edm.txt |- 119725 119670 119662 119662 (gf_edm.sh) 0 0 108646400 312 /bin/bash ./gf_edm.sh Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143 后来我用下面两个参数直接把内存检查给关了的,错不报了,直接把一个节点跑挂了也没跑完。 yarn.nodemanager.pmem-check-enabled false yarn.nodemanager.vmem-check-enabled false[/quote] 对的,我之前就是这个问题,只要把虚拟内存加大就行了
skyWalker_ONLY 2014-12-08
  • 打赏
  • 举报
回复
引用 6 楼 laser1983 的回复:
[quote=引用 5 楼 sky_walker85 的回复:] 总共就1G的物理内存吗,我之前在1G内存运行也出错,后来增加到2G物理内存就可以了,如果是虚拟机的话就增加内存试试
你是在shell脚本里写的调用jar的mr么?[/quote] 我直接在命令行执行hadoop jar就挂掉了,后来将内存增大到2g,这个跟在shell中是否调用mr没有直接关系,生产中的就是在shell脚本中直接调用mr的
  • 打赏
  • 举报
回复
running beyond physical memory limits. 1.0 GB of 1 GB physical memory used; 3.6 GB of 4 GB virtual memory used. 这里有提示,楼主应该先调大机器物理可用内存,如果你调大YARN可使用的物理内存总量,节点内存资源不够,YARN不会智能的探测节点的物理内存总量的。
---Wayne--- 2014-12-08
  • 打赏
  • 举报
回复
引用 5 楼 sky_walker85 的回复:
总共就1G的物理内存吗,我之前在1G内存运行也出错,后来增加到2G物理内存就可以了,如果是虚拟机的话就增加内存试试
你是在shell脚本里写的调用jar的mr么?
skyWalker_ONLY 2014-12-08
  • 打赏
  • 举报
回复
总共就1G的物理内存吗,我之前在1G内存运行也出错,后来增加到2G物理内存就可以了,如果是虚拟机的话就增加内存试试
---Wayne--- 2014-12-08
  • 打赏
  • 举报
回复
引用 1 楼 the_small_base_ 的回复:
你可以把错误贴出来,一般调用外部的程序是非常消耗内存的,比如我使用pig调用python非常消耗内存,会提示2.5GB ... 3GB这样的错误,你可以把虚拟内存设置大点(更具机器来定)。
我在yarn里就看不到自己写的mr的任务,就看到oozie的task一直挂着,但是我看自己写的mr应该是执行了,因为输出目录建上了,不知道卡在哪里
---Wayne--- 2014-12-08
  • 打赏
  • 举报
回复
引用 2 楼 sky_walker85 的回复:
应该是支持的,楼主所谓的把内存开打,具体指的什么意思,是增加虚拟机的内存使用吗
引用 楼主 laser1983 的回复:
OOZIE调用shell脚本,在.sh脚本里我又调用hadoop jar。。。执行mr计算,,开始提示内存不够,我把内存开大后通过oozie分配运行这个sh文件的节点直接挂死了,我在任意节点上执行这个sh只需要10分钟。是不是oozie不支持这种shell脚本内部调用mr啊,各位有没有经验。
开始日志报错: Container [pid=119662,containerID=container_1417739186174_0001_01_000002] is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used; 3.6 GB of 4 GB virtual memory used. Killing container. Dump of the process-tree for container_1417739186174_0001_01_000002 : |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE |- 119662 118477 119662 119662 (bash) 0 0 108646400 307 /bin/bash -c /usr/java/jdk1.7.0_45-cloudera/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx200m -Djava.net.preferIPv4Stack=true -Xmx825955249 -Djava.io.tmpdir=/data02/yarn/nm/usercache/root/appcache/application_1417739186174_0001/container_1417739186174_0001_01_000002/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1417739186174_0001/container_1417739186174_0001_01_000002 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 172.16.1.20 46878 attempt_1417739186174_0001_m_000000_0 2 1>/var/log/hadoop-yarn/container/application_1417739186174_0001/container_1417739186174_0001_01_000002/stdout 2>/var/log/hadoop-yarn/container/application_1417739186174_0001/container_1417739186174_0001_01_000002/stderr |- 119670 119662 119662 119662 (java) 934 95 1472245760 80806 /usr/java/jdk1.7.0_45-cloudera/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx200m -Djava.net.preferIPv4Stack=true -Xmx825955249 -Djava.io.tmpdir=/data02/yarn/nm/usercache/root/appcache/application_1417739186174_0001/container_1417739186174_0001_01_000002/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1417739186174_0001/container_1417739186174_0001_01_000002 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 172.16.1.20 46878 attempt_1417739186174_0001_m_000000_0 2 |- 119798 119725 119662 119662 (java) 419521 2416 2145419264 180747 /usr/java/jdk1.7.0_45-cloudera/bin/java -Xmx1000m -Dhadoop.log.dir=/opt/cloudera/parcels/CDH-5.0.3-1.cdh5.0.3.p0.35/lib/hadoop/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/cloudera/parcels/CDH-5.0.3-1.cdh5.0.3.p0.35/lib/hadoop -Dhadoop.id.str= -Dhadoop.root.logger=INFO,CLA -Djava.library.path=/opt/cloudera/parcels/HADOOP_LZO-0.4.15-1.gplextras.p0.101/lib/hadoop/lib/native:/opt/cloudera/parcels/CDH-5.0.3-1.cdh5.0.3.p0.35/lib/hadoop/lib/native:/opt/cloudera/parcels/CDH-5.0.3-1.cdh5.0.3.p0.35/lib/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1417739186174_0001/container_1417739186174_0001_01_000002 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar MyMr.jar com.aotain.hdfs.mapreduce.PingAnDriver /user/hive/warehouse/broadband.db/user_visitlog/shenzhen/20141204 /user/oozie/jobroot/url2user/gf_edm/tmp /user/oozie/jobroot/url2user/cfg/gf_edm.txt |- 119725 119670 119662 119662 (gf_edm.sh) 0 0 108646400 312 /bin/bash ./gf_edm.sh Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143 后来我用下面两个参数直接把内存检查给关了的,错不报了,直接把一个节点跑挂了也没跑完。 yarn.nodemanager.pmem-check-enabled false yarn.nodemanager.vmem-check-enabled false
skyWalker_ONLY 2014-12-08
  • 打赏
  • 举报
回复
应该是支持的,楼主所谓的把内存开打,具体指的什么意思,是增加虚拟机的内存使用吗
skyWalker_ONLY 2014-12-08
  • 打赏
  • 举报
回复
引用 23 楼 laser1983 的回复:
[quote=引用 22 楼 sky_walker85 的回复:] 刚查到资料,实际上是可以在map或reduce中调用子job的,但这样会耗费过多内存,比如在reduce中调用子job,那么reducer必须要等到子job完成后才能释放内存,假设有10个reducer,由于它们一直不释放内存,而子job由需要内存,就出现了内存溢出。不知道这样分析是否正确,但感觉大概就是这样的
可能是这样吧,反正这条路走不通了,哈哈。其实我就是想实现jar部署在hdfs上,能够根据动态参数调用mr,前后还有些额外数据处理,把整个流程串起来,看来单靠oozie不好使啊,有没有好的解决方案啊[/quote] 这个不是很难,我在实际中就是通过shell结和crontab实现的,也是动态传递参数,比如处理两天前的数据,日期就是参数,还有输出的目录也是动态参数,作业执行前包括上传数据到hdfs,执行完毕后将输出加载到hive中。楼主也可以按照这种思路实现自己的shell
---Wayne--- 2014-12-08
  • 打赏
  • 举报
回复
引用 22 楼 sky_walker85 的回复:
刚查到资料,实际上是可以在map或reduce中调用子job的,但这样会耗费过多内存,比如在reduce中调用子job,那么reducer必须要等到子job完成后才能释放内存,假设有10个reducer,由于它们一直不释放内存,而子job由需要内存,就出现了内存溢出。不知道这样分析是否正确,但感觉大概就是这样的
可能是这样吧,反正这条路走不通了,哈哈。其实我就是想实现jar部署在hdfs上,能够根据动态参数调用mr,前后还有些额外数据处理,把整个流程串起来,看来单靠oozie不好使啊,有没有好的解决方案啊
skyWalker_ONLY 2014-12-08
  • 打赏
  • 举报
回复
刚查到资料,实际上是可以在map或reduce中调用子job的,但这样会耗费过多内存,比如在reduce中调用子job,那么reducer必须要等到子job完成后才能释放内存,假设有10个reducer,由于它们一直不释放内存,而子job由需要内存,就出现了内存溢出。不知道这样分析是否正确,但感觉大概就是这样的
  • 打赏
  • 举报
回复
skyWalker_ONLY 2014-12-08
  • 打赏
  • 举报
回复
引用 19 楼 laser1983 的回复:
[quote=引用 17 楼 sky_walker85 的回复:] [quote=引用 16 楼 laser1983 的回复:] [quote=引用 15 楼 sky_walker85 的回复:] 控制台有输出吗,比如进度?
看yarn里oozie的map进度已经100%,总体进度95%。没看到shell里面调用的那个mr运行的job,这其实是在map中调用另一个mr过程,估计是不能这么玩。[/quote] 楼主的意思是你的一个job又调用了另一个job?[/quote] oozie的分发action就是这个原理吧,用map分布action,然后执行,关键是返回值。刚才看了,跑了50分钟,最后还是报了内存溢出,估计是这么嵌套跑法内存管理的问题。[/quote] 你这种调用也就是oozie的shell action,而在shell脚本中又调用了mr作业,此时就出现了问题。楼主其实可以将hadoop jar这句注释掉,看看oozie能不能正确执行。你这么做相当于在一个job内,又执行了job,就像在map或reduce方法中调用了hadoop jar或者像集群提交了作业,这样map或者reduce就需要等待子job的完成,就出问题了。个人感觉hadoop并不支持作业的嵌套调用
加载更多回复(8)

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧