公司最近要开始搞大数据项目,只好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的任务呢?即使没有进度信息也没关系,关键是要能够获得任务状态以及任务是成功还是失败的信息,以便开始下一步工作。
求大神指教!!

解决方案 »

  1.   


    hadoop自带监控的系统,搜索下.
      

  2.   


    你是说Metrics吗?那个貌似不能满足我的需求啊
      

  3.   

    用作业调度框架Oozie
      

  4.   

    另外Spark可以直接写JDBC df.write().mode(mode).jdbc(url,tableName,prop) ; 你也可以df.collect() 得到 List<Row> 然后定义自己的Insert SQL语句。 没必要再通过Sqoop从Hive导出到Oracle
      

  5.   

    如果结果集很大的话collect很有可能会内存溢出吧。而且貌似通过JDBC方式插入的效率有没有sqoop操作高?我没试过。
    Oozie框架需要pig吧,公司定的总体技术框架中没这个……另外Oozie支持Spark Job吗?还有sqoop导入数据到Hive的步骤怎么在Oozie里面搞?
      

  6.   

    如果结果集很大的话collect很有可能会内存溢出吧。而且貌似通过JDBC方式插入的效率有没有sqoop操作高?我没试过。
    Oozie框架需要pig吧,公司定的总体技术框架中没这个……另外Oozie支持Spark Job吗?还有sqoop导入数据到Hive的步骤怎么在Oozie里面搞?
    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
      

  7.   

    如果结果集很大的话collect很有可能会内存溢出吧。而且貌似通过JDBC方式插入的效率有没有sqoop操作高?我没试过。
    Oozie框架需要pig吧,公司定的总体技术框架中没这个……另外Oozie支持Spark Job吗?还有sqoop导入数据到Hive的步骤怎么在Oozie里面搞?
    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

    在Oozie官网看了,貌似Oozie支持的是Hadoop 1.x?我看配置项有jobtracker地址什么的。我这边公司用的是hadoop2.x……不过有空的时候确实可以学习一下Oozie看看。谢谢!
      

  8.   

    Oozie和Azkaban应该都可以完成,一个重量级一个轻量级
      

  9.   

    oozie吧,支持shell,mr,spark,hivesql