1. 程式人生 > >結構化大資料計算的幾種方法(一)

結構化大資料計算的幾種方法(一)

         任何資料都要通過計算來產生價值才有意義,大資料也一樣。結構化大資料的計算能力的高低決定了大資料的實用性。

         我總結了幾種常見的計算方法:API 、Script、SQL、類SQL。

       1、  API:這是指沒有使用JDBC或ODBC,而是自成體系的API訪問方法。以MapReduce為例,MapReduce從底層就是以廉價平行計算為設計目標的,所以它的橫向擴充套件性最好,擴容時無需停機,成本最低。MapReduce是Hadoop的元件之一,程式碼開源,資料豐富。示例如下:

                   publicvoid reduce(Text key, Iterator<Text> value,

                OutputCollector<Text,Text> output, Reporter arg3)

                throws IOException {

            double avgX=0;

            double avgY=0;

            double sumX=0;

            double sumY=0;

            int count=0;

            String [] strValue = null;

            while(value.hasNext()){

                count++;

                strValue = value.next().toString().split("\t");

                sumX = sumX +Integer.parseInt(strValue[1]);

                sumY = sumY +Integer.parseInt(strValue[1]);

            }

            avgX = sumX/count;

            avgY = sumY/count;

            tKey.set("K"+key.toString().substring(1,2));

            tValue.set(avgX + "\t" +avgY);

            output.collect(tKey, tValue);

        }

         MapReduce使用的是通用程式語言,並不適合專業的資料計算,因此計算能力要比SQL等專業的計算語言低。它的開發效率同樣低,“痛苦”是程式設計師對MapReduce開發過程的普遍感覺。另外死板的框架使MapReduce的效能也較差。

         用API的產品還有很多,但MapReduce是其中最典型的。


        2、 Script:這裡的Script是指SQL之外的專業的計算指令碼語言,以集算器為例,它除了具有廉價橫向擴容能力外,計算能力強特別是異種資料來源之間的計算方便、適合複雜計算等特點,也提高了Hadoop的能力。另外它使用的是網格指令碼,除錯方便。示例如下:


        JAVA呼叫集算器的計算結果時要通過 JDBC,但只能以儲存過程的形式呼叫,不能是任意的SQL語句,這是它的一大缺陷。不開源是它的另一個缺點。

         MongoDB,Redis等很多大資料方案都使用了Script,但他們在計算方面不夠專業。比如MongoDB的多表關聯計算不僅運算效率低,而且程式碼複雜度太高。


-----------未完---------------

個人觀點,歡迎交流,轉載請註明地址。