如何在代码中通过API监控Hadoop、Spark任务的进度和结果?

bangbong 2016-05-02 10:56:30
公司最近要开始搞大数据项目,只好0基础开始学习摸索,目前对基础理论已经入门了,也能单独写一点简单的计算程序跑起来。不过项目需求比较复杂,涉及的技术有好几个,主要为Hadoop2(HDFS、YARN、MapReduce)、Sqoop、Flume、Spark1.6,流程总体可以概括为:
1.通过Sqoop把Oracle里面的数据导入到Hive/HDFS,通过Flume把文件数据导入到Hive/HDFS
2.使用Spark程序对导入的数据执行计算,得到计算结果保存为Hive表
3.通过Sqoop把计算结果导出到Oracle
整个流程是串行的,要上一步完成并且成功才能进行下一步操作,因此公司要求开发一个Java版“总控”程序,实现各操作步骤的管控。我想过,觉得执行任务倒好办一点,可以通过java的Runtime去exec命令例如sqoop import/export、spark-submit等,但是java程序中如何能够监控hadoop mapreduce(因为sqoop底层是hadoop mapreduce任务)、Spark的任务呢?即使没有进度信息也没关系,关键是要能够获得任务状态以及任务是成功还是失败的信息,以便开始下一步工作。
求大神指教!!
...全文
4029 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
amen000 2017-12-04
  • 打赏
  • 举报
回复
oozie吧,支持shell,mr,spark,hivesql
Zzreal 2017-12-04
  • 打赏
  • 举报
回复
Oozie和Azkaban应该都可以完成,一个重量级一个轻量级
  • 打赏
  • 举报
回复
楼主问题解决了么?大概思路能分享一下么
Vicyn 2017-03-01
  • 打赏
  • 举报
回复
楼主问题解决了吗?我也有这方面的疑惑,学习下
bangbong 2016-05-18
  • 打赏
  • 举报
回复
引用 6 楼 link0007 的回复:
[quote=引用 5 楼 bangbong 的回复:] [quote=引用 4 楼 link0007 的回复:] 另外Spark可以直接写JDBC df.write().mode(mode).jdbc(url,tableName,prop) ; 你也可以df.collect() 得到 List<Row> 然后定义自己的Insert SQL语句。 没必要再通过Sqoop从Hive导出到Oracle
如果结果集很大的话collect很有可能会内存溢出吧。而且貌似通过JDBC方式插入的效率有没有sqoop操作高?我没试过。 Oozie框架需要pig吧,公司定的总体技术框架中没这个……另外Oozie支持Spark Job吗?还有sqoop导入数据到Hive的步骤怎么在Oozie里面搞?[/quote] Oozie就是个MR作业调度程序,可以定义MR Hive Sqoop Spark Java等应用程序的工作流。你可以去oozie.apache.org官网上看。 sqoop底层也是JDBC。至于你说collect 容易OOM,貌似可以这样 for ( Row row : df.collect() ) {// PreparedStatement Batch },也可以直接df.write().jdbc()写到个临时表,再跑个Select into目标表的SQL [/quote] 在Oozie官网看了,貌似Oozie支持的是Hadoop 1.x?我看配置项有jobtracker地址什么的。我这边公司用的是hadoop2.x……不过有空的时候确实可以学习一下Oozie看看。谢谢!
LinkSe7en 2016-05-06
  • 打赏
  • 举报
回复
引用 5 楼 bangbong 的回复:
[quote=引用 4 楼 link0007 的回复:] 另外Spark可以直接写JDBC df.write().mode(mode).jdbc(url,tableName,prop) ; 你也可以df.collect() 得到 List<Row> 然后定义自己的Insert SQL语句。 没必要再通过Sqoop从Hive导出到Oracle
如果结果集很大的话collect很有可能会内存溢出吧。而且貌似通过JDBC方式插入的效率有没有sqoop操作高?我没试过。 Oozie框架需要pig吧,公司定的总体技术框架中没这个……另外Oozie支持Spark Job吗?还有sqoop导入数据到Hive的步骤怎么在Oozie里面搞?[/quote] Oozie就是个MR作业调度程序,可以定义MR Hive Sqoop Spark Java等应用程序的工作流。你可以去oozie.apache.org官网上看。 sqoop底层也是JDBC。至于你说collect 容易OOM,貌似可以这样 for ( Row row : df.collect() ) {// PreparedStatement Batch },也可以直接df.write().jdbc()写到个临时表,再跑个Select into目标表的SQL
bangbong 2016-05-05
  • 打赏
  • 举报
回复
引用 4 楼 link0007 的回复:
另外Spark可以直接写JDBC df.write().mode(mode).jdbc(url,tableName,prop) ; 你也可以df.collect() 得到 List<Row> 然后定义自己的Insert SQL语句。 没必要再通过Sqoop从Hive导出到Oracle
如果结果集很大的话collect很有可能会内存溢出吧。而且貌似通过JDBC方式插入的效率有没有sqoop操作高?我没试过。 Oozie框架需要pig吧,公司定的总体技术框架中没这个……另外Oozie支持Spark Job吗?还有sqoop导入数据到Hive的步骤怎么在Oozie里面搞?
LinkSe7en 2016-05-05
  • 打赏
  • 举报
回复
另外Spark可以直接写JDBC df.write().mode(mode).jdbc(url,tableName,prop) ; 你也可以df.collect() 得到 List<Row> 然后定义自己的Insert SQL语句。 没必要再通过Sqoop从Hive导出到Oracle
LinkSe7en 2016-05-05
  • 打赏
  • 举报
回复
用作业调度框架Oozie
alinly 2016-05-03
  • 打赏
  • 举报
回复
hadoop自带监控的系统, 搜索下.
bangbong 2016-05-03
  • 打赏
  • 举报
回复
引用 1 楼 alinly 的回复:
hadoop自带监控的系统, 搜索下.
你是说Metrics吗?那个貌似不能满足我的需求啊

1,261

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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