天天看點

大資料案例1案例2案例3案例4案例5案例6

Map-Reduce和Hadoop逐漸稱為面試熱門。還有,容量的轉換如下:

  • bit就是位,也叫 比特位 ,是計算機表示資料最小的機關。
  • byte就是位元組,1byte=8bit,1byte就是1B;
  • 一個字元=2位元組;
  • 1KB=1024B
  • 位元組B到GB是
    大資料案例1案例2案例3案例4案例5案例6

介紹他們之前,我們先來看看什麼是哈希函數

大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6

什麼是Map-Reduce。map階段是通過Hash函數将任務分開成若幹的子任務,Hash函數可以是使用者指定或者系統預設。Reduce階段是分開處理,然後将子任務合并成結果。

大資料案例1案例2案例3案例4案例5案例6

海量資料處理的關鍵:

大資料案例1案例2案例3案例4案例5案例6

案例1

大資料案例1案例2案例3案例4案例5案例6

首先用最簡單的解決方法,那就是将IP轉化為整數然後排序:

大資料案例1案例2案例3案例4案例5案例6

但是其實有更高更省空間的方法:

大資料案例1案例2案例3案例4案例5案例6

這種做法的解釋是這樣的:

因為所有的IP隻會出現一次,是以可以考慮bitmap資料結構(在Java中就是二進制數組,byte[])。下面先說一個byte數組 的例子。

//隻要知道數的取值範圍,就可以用bytes數組排序。
//java并沒有提供bit這種資料類型,即使最小的資料類型byte,也要
//占到8個bit.(以前從哪裡看到過boolean值在不同的jvm實作下面可能是1bit,也可能是8bit)
public static void main(String[] args){
        boolean[] bytes = new boolean[101];
        int[] a = new int[]{76, 22, 11, 98, 93, 45, 65, 43, 76, 2};
        for(int i = 0; i < a.length; i++){
            bytes[a[i]] = true;
        }
        for(int i = 0; i < bytes.length; i++){
            if(bytes[i] == true)
                System.out.println(i);
        }
    }
           

IPV4中規定IP位址長度為32(按照TCP/IP參考模型劃分),即有

大資料案例1案例2案例3案例4案例5案例6

個位址。

IPV6協定的位址長度為128位,全部可配置設定的位址數為

大資料案例1案例2案例3案例4案例5案例6

申請一個長度為

大資料案例1案例2案例3案例4案例5案例6

的bit類型的數組,每個位置是一個bit,隻可表示0或者1這兩種狀态,空間為512MB。每個IP位址轉化為無符号整數K,數組下标

大資料案例1案例2案例3案例4案例5案例6

~

大資料案例1案例2案例3案例4案例5案例6

與k對應起來。如果k=1,就把bitmap[0] = 1;如果k=n,就把bitmap[n-1]=1。這樣,能做到時間複雜度為O(n),空間複雜度很小。

案例2

大資料案例1案例2案例3案例4案例5案例6

年齡都在0到200之間,是以隻需要申請一個長度為200的數組,然後遇到年齡為k的,隻需要在數組為k的數加1即可,最後倒出來。

大資料案例1案例2案例3案例4案例5案例6

案例3

大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6

案例4

大資料案例1案例2案例3案例4案例5案例6

下圖中的20億其實為40億

大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6

案例5

大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6

案例6

大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6

假設id通過哈希函數計算和的結果為

大資料案例1案例2案例3案例4案例5案例6

,這些key首尾相連構成環形分布。假設N=3台機器根據哈希函數也在環中,那麼id為1的資料順時針知道距離最近的機器,id1的所有删除、添加查詢操作都在這上面。

大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6
大資料案例1案例2案例3案例4案例5案例6

假如添加機器m3,經過哈希函數計算m3的機器id在m1和m2中間。那麼data1資料原來實在m2上操作的,現在變成m3上操作,并且将m2的data1的舊資料遷移到m3上。