MySpace Mapreduce Framework:Qizmt


  臨時要處理一批數據,目標是從銷售訂單明細獲得電子商務常見的一些推薦:1.購買了XX的用戶還購買了什么 2.XX經常和YY一起購買 3.XX商品被同一用戶多次購買;這是典型的MapReduce場景,但由於數據量比較小22w條數據,實在不想搭Hadoop,就找了一個簡單的方案搞定:Qizmt;

  看下項目簡介:

 

 

   MySpace Qizmt is a mapreduce framework for executing and developing distributed   computation applications on large clusters of Windows servers. The MySpace Qizmt project develops open-source software for reliable, scalable, super-easy, distributed computation software.

 

  MySpace真是微軟技術的忠實擁護者,這么多年不離不棄,MySpace架構演變的過程也影響了很多采用.net架構的網站,這一次他們開源的是基於.net的MapReduce框架.

  是的,C#編寫MapReduce邏輯,我Win7的機器就可以跑起來;很快就搞定了,中間出了幾個小狀況,記錄一下:

 

 

  1. 安裝的時候有一個需要填寫用戶名密碼的地方,這里一定要填寫機器名或者域賬號 比如: test-pc\administrator

 

  2. 安裝完成之后qizmt已經注冊到環境變量,可以在命令行環境中調用

 

  3. 第一次使用需要執行format  http://code.google.com/p/qizmt/wiki/MySpaceQizmtSingleMachineQuickStart

 

  4. Qizmt會自己維護一套文件系統 DFS 你可以在安裝目錄查看DFS.XML查看文件系統的元數據

 

  5. 把文件拷貝到DFS系統中,可以使用:qizmt put \\admin-PC\d$\data\some_file.xml dfs://some_file.xml 注意這里使用的也是網絡路徑

 

  6.把文件從DFS拷貝出來,使用: qizmt get dfs://reslut_output.txt  \\admin-PC\d$\data\all_step_2.csv

 

  7.qizmt edit xx.xml 可以修改MapReduce的代碼,甚至是調試

 

  8.MapReduce代碼支持.net Framework框架的其它類庫,直接全namespace引用就可以,不過qizmt的編輯器沒有提供對這些類庫的智能提示

 

  9.MapReduce代碼支持使用本地路徑,比如"D:\data.csv"

 

 
  官方站點上提供了足夠詳細的Demo,文檔,基本上所見即所得,不再贅述,地址 http://code.google.com/p/qizmt/
 

MySpace Qizmt IDE/Debugger

 

MapReduce的處理思路並沒有太復雜,可以看下面的演示代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Kockerbeck.MapReduce
{
    /// <summary>
    /// Very Simple MapReduce implementation in C#
    /// </summary>
    /// <remarks>
    /// Thanks to Stephan Brenner. Refactored for C# 4.0
    /// </remarks>
    public class MapReduce
    {
        public static int NumberOfCores = 4;

        public static Dictionary<T3, List<T4>> Execute<T1, T2, T3, T4>(Func<T1, T2, List<KeyValuePair<T3, T4>>> mapFunction,
            Func<T3, List<T4>, List<T4>> reduceFunction, Dictionary<T1, T2> input)
        {
            var result = new Dictionary<T3, List<T4>>();
            var maps = new Dictionary<T3, List<T4>>();

            input.DivvyUp(NumberOfCores, l => l.ForEach(kv =>
                maps.Add(mapFunction(kv.Key, kv.Value), i => i.Key, i => i.Value)));

            maps.DivvyUp(NumberOfCores, m => m.ForEach(map =>
                result.Add(reduceFunction(map.Key, map.Value), i => map.Key, i => i)));

            return result;
        }
    }
}

 

 

補上一張思路圖(新標簽打開,查看大圖):

 

購買了XX的用戶還購買了

 

微博:你關注的人也關注了

 

Map Reduce 做大數據量排序

 

最后,小圖一張

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM