2014-04-22 22 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..