关于HDInsight工作方法的几个问题。
1)如何安排HDInsight工作?有没有现成的解决方案呢?例如,如果我的系统会不断收集大量需要运行map / reduce job的新输入文件,那么实施正在进行的处理的推荐方法是什么?
2)从价格角度来看,建议在没有作业运行时删除HDInsight群集。据我所知,如果我们决定每天运行这项工作,就无法自动化这个过程吗?这里有什么建议吗?
3)有没有办法确保不会多次处理相同的文件?你是如何解决这个问题的?
4)我可能会弄错,但看起来每个hdinsight作业都需要一个新的输出存储文件夹来存储reducer结果。合并这些结果的最佳做法是什么,以便报告始终适用于整个数据集?
答案 0 :(得分:2)
好的,那里有很多问题!我希望这里有一些快速的答案。
在HDInsight中没有办法安排作业提交,当然您可以安排程序为您运行作业提交。根据您的工作流程,可能值得一看Oozie,这可能有点尴尬,但是应该有所帮助。
在价格方面,我建议如果你没有使用集群,你应该销毁它并在需要时再将其恢复(计算时间可以真正加起来!)。请注意,这将丢失您在HDFS中的任何内容,这应该主要是中间结果,asv存储中保存的任何输出或输入数据将保留在Azure存储帐户中。您当然可以使用CLI工具或CLI工具使用的其余接口自动执行此操作。 (参见我在Hadoop on Azure Create New Cluster上的回答,第一个是过时的)。
我会这样做,确保我只为每个文件提交一次作业,并依靠Hadoop来处理重试和可靠性方面,因此无需管理应用程序中的任何重试。
一旦获得初始流程的输出,如果您想将它们减少到单个输出以进行报告,那么最好的选择可能是以输出作为输入的辅助MapReduce作业。
如果您不关心各个中间作业,您可以直接在一个MapReduce作业中链接这些作业(可以包含任意数量的map和reduce步骤)通过作业链接查看Chaining multiple MapReduce jobs in Hadoop一个基于java的例子。遗憾的是,.NET api目前不支持这种形式的作业链。
但是,如果您的案例允许使用Reducer-> Combiner方法,您可以只使用ReducerCombinerBase类。