結構化大資料計算的幾種方法(一)
任何資料都要通過計算來產生價值才有意義,大資料也一樣。結構化大資料的計算能力的高低決定了大資料的實用性。
我總結了幾種常見的計算方法: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的多表關聯計算不僅運算效率低,而且程式碼複雜度太高。
-----------未完---------------
個人觀點,歡迎交流,轉載請註明地址。