我想将Hadoop用作管理网格作业的简单系统。 (我之前使用SGE和pbs / Torque进行此操作,但我们正在转向Hadoop。)我有1000个ZIP文件,每个文件包含1000个文件,总共1M个文件。我想将它们全部上传到Amazon S3。理想情况下,我想在不将文件放入HDFS的情况下执行此操作。所有文件都可以通过WWW访问。
我想做的是:
我知道如何在Java和Python中使用ZIP文件魔术。我的问题是:如何创建一个迭代器,以便映射器得到数字0..999?
reducer的输出将是每次上传的时间量。然后,我想要第二个map / reduce步骤,它将生成时间的直方图。所以我想正确的事情是将时间和失败代码写入HDFS(尽管将它们写入SQL数据库似乎更有意义)。
我有兴趣在传统的MapReduce(最好用Python,但我会用Java或Scala,如果必须的话)和Spark中做这个(为此我需要在Scala中做,对吧?)。虽然我可以看到在Spark中这样做没有真正的优势。
答案 0 :(得分:1)
在Spark中,您可以简单地在范围内进行并行化:
的Python
n = ... # Desired parallelism
rdd = sc.parallelize(range(1000), n)
def do_something_for_side_effects(i): ...
rdd.foreach(do_something_for_side_effects)
或
def do_something(i): ...
rdd.map(do_something).saveAsTextFile(...) # Or another save* method
Scala
val n: Int = ??? // Desired parallelism
val rdd = sc.parallelize(1 until 1000, n)
def doSomethingForSideEffects(i: Int): Unit = ???
rdd.foreach(doSomethingForSideEffects)
或
def doSomething(i: Int) = ???
rdd.foreach(doSomething).saveAsTextFile(...) // Or another save* method