2014-04-22 24 views
0

我试图通过自定义文件格式转储Hadoop集群上的一些数据,通常是HBase。自定义烫伤水龙头(或Spark等价物)

我想什么做的是多了还是少了以下内容:从记录,比如通过一些计算功能的滚烫的管道或类似

  • 项目组分布式列表

    • 开始
    • 使使属于同一组项目驻留在每个组在同一台服务器
    • 上,应用转换 - 涉及排序 - 写在磁盘上的结果。事实上,我需要编写一堆MapFile - 它们基本上是对SequenceFile进行排序的,还有一个索引。

    我想实现上面的Scalding,但我不知道如何做最后一步。

    虽然当然一个不能写在一个分布式的方式排序的数据,应该仍然是可行的将数据分割成块,然后写入本地分类每个块。不过,我找不到任何map-reduce作业的MapFile输出的实现。

    我承认这是一个坏主意,非常大的数据排序,这是连一台服务器,我计划将数据分割成块的原因。

    有没有办法做这样的事情,与滚烫的?可能我会直接使用Cascading或其他管道框架(如Spark)。

  • 回答

    0

    使用烫伤(和底层的Map/Reduce),您将需要使用TotalOrderPartitioner,它不预采样,以创建输入数据的适当桶/拆分。

    使用火花将加快因更快的访问路径到磁盘的数据。然而,它仍然需要洗牌磁盘/ hdfs,所以它不会像数量级更好。

    火花,你会使用RangePartitioner,这需要分区的数量和RDD:

    val allData = sc.hadoopRdd(paths) 
    val partitionedRdd = sc.partitionBy(new RangePartitioner(numPartitions, allData) 
    val groupedRdd = partitionedRdd.groupByKey(..). 
    // apply further transforms..