大數(shù)據(jù),怎么搞?

責任編輯:editor005

作者:三劫散仙

2015-01-07 13:29:40

摘自:36大數(shù)據(jù)

1、最早的數(shù)據(jù)分析可能就報表 目前很多數(shù)據(jù)分析后的結果,展示的形式很多,有各種圖形以及報表,最早的應該是簡單的幾條數(shù)據(jù),然后搞個web頁面,展示一下數(shù)據(jù)。這種情況下,分析的數(shù)據(jù)源小,分析的腳本就是在線執(zhí)行的SQL,分析的結果不用傳輸,結果的展示就在頁面上,整 個流程一條龍。

隨著大數(shù)據(jù)的爆紅,數(shù)據(jù)分析師這個職位也得到了越來越多的關注,千千萬萬懂些大數(shù)據(jù)技術的少年們都渴望成為高大上的“大數(shù)據(jù)科學家”,可是,你們真的準備好了嗎?

大數(shù)據(jù)

1、最早的數(shù)據(jù)分析可能就報表 目前很多數(shù)據(jù)分析后的結果,展示的形式很多,有各種圖形以及報表,最早的應該是簡單的幾條數(shù)據(jù),然后搞個web頁面,展示一下數(shù)據(jù)。早期可能數(shù)據(jù)量也不大,隨便搞個數(shù)據(jù)庫,然后SQL搞一下,數(shù)據(jù)報表就出來了。但是數(shù)據(jù)量大起來怎么分析呢?數(shù)據(jù)分析完了怎么做傳輸呢?這么大的數(shù)據(jù)量怎么做到實時 呢?分析的結果數(shù)據(jù)如果不是很大還行,如果分析的結果數(shù)據(jù)還是很大改怎么辦呢?這些問題在這篇文章中都能找到答案,下面各個擊破。

2、要做數(shù)據(jù)分析,首先要有數(shù)據(jù)

這個標題感覺有點廢話,不過要做飯需要食材一樣。有些數(shù)據(jù)時業(yè)務積累的,像交易訂單的數(shù)據(jù),每一筆交易都會有一筆訂單,之后再對訂單數(shù)據(jù)作分 析。但是有些場景下,數(shù)據(jù)沒法考業(yè)務積累,需要依賴于外部,這個時候外部如果有現(xiàn)成的數(shù)據(jù)最好了,直接join過來,但是有時候是需要自己獲取的,例如搞 個爬蟲爬取網頁的數(shù)據(jù),有時候單臺機器搞爬蟲可能還爬不完,這個時候可能就開始考慮單機多線程爬取或者分布式多線程爬取數(shù)據(jù),中間涉及到一個步驟,就是在 線的業(yè)務數(shù)據(jù),需要每天晚上導入到離線的系統(tǒng)中,之后才可以進行分析。

3、有了數(shù)據(jù),咋分析呢?

先將數(shù)據(jù)量小的情況下,可能一個復雜的SQL就可以搞出來,之后搞個web服務器,頁面請求的時候,執(zhí)行這個SQL,然后展示數(shù)據(jù),好了,一個最簡 單的數(shù)據(jù)分析,嚴格意義上講是統(tǒng)計的分析。這種情況下,分析的數(shù)據(jù)源小,分析的腳本就是在線執(zhí)行的SQL,分析的結果不用傳輸,結果的展示就在頁面上,整 個流程一條龍。

4、數(shù)據(jù)量大了,無法在線分析了,咋辦呢?

這個時候,數(shù)據(jù)量已經大的無法用在線執(zhí)行SQL的形式進行統(tǒng)計分析了。這個時候順應時代的東西產生了(當然還有其他的,我就知道這個呵呵),數(shù)據(jù)離 線數(shù)據(jù)工具hadoop出來了。這個時候,你的數(shù)據(jù)以文件的形式存在,可能各個屬性是逗號分隔的,數(shù)據(jù)條數(shù)有十幾個億。這時候你可能需要構建一個 hadoop集群,然后把自己的文件導入到集群上面去,上了集群之后,文件就是HDFS的格式了,然后如果要做統(tǒng)計分析,需要寫mapreduce程序, 所謂的mapreduce程序,就是實現(xiàn)map和reduce的接口,按照自己的業(yè)務邏輯寫分析流程,之后把程序打成jar包上傳到集群,之后開始執(zhí)行。 分析后的結果還是文件的形式產生。

5、分析個數(shù)據(jù)還要寫java代碼是不是效率低了點?

這個確實是,mapreduce的程序,本身的可測性沒有執(zhí)行一個簡單的單元測試來的爽,所以效率確實不高。這個時候,hive出現(xiàn) 了,hive是一個數(shù)據(jù)倉庫分析的語言,語法類似于數(shù)據(jù)庫的SQL,但是有幾個地方是不同的。有了hive之后,數(shù)據(jù)分析就好之前寫SQL一樣了,按照邏 輯編寫hive SQL,然后控制臺執(zhí)行??赡茏畲蟮母杏X是,數(shù)據(jù)庫的sql很快就能有結果,但是hive的,即使很小的一個數(shù)據(jù)分析,也需要幾分鐘時間。構建hive, 需要在hadoop的集群上,原理很簡單,就是把文件構建成表的形式(有一個數(shù)據(jù)庫或者內存數(shù)據(jù)庫維護表的schema信息),之后提交寫好的hive sql的時候,hadoop集群里面的程序把hive腳本轉換成對應的mapreduce程序執(zhí)行。這個時候,做離線的數(shù)據(jù)分析簡單寫腳本就行了,不用再 搞java代碼,然后上傳執(zhí)行了。

6、數(shù)據(jù)產生的結果,怎么搞到線上提供服務的數(shù)據(jù)庫中呢?

這個時候分析的結果有了,可能是一個很寬很長的excel表格,需要導入到線上的數(shù)據(jù)庫中,可能你想到了,如果我的數(shù)據(jù)庫是mysql,我直接執(zhí)行 load 命令就搞進去了,哪有那么麻煩。但是數(shù)據(jù)源可能有多了,mysql/oracle/hbasefs 按照笛卡爾積的形式,這樣搞要搞死程序員了。這個時候datax(已經開源)出現(xiàn)了,能夠實現(xiàn)異構數(shù)據(jù)源的導入和導出,采用插件的形式設計,能夠支持未來 的數(shù)據(jù)源。如果需要導數(shù)據(jù),配置一下datax的xml文件或者在web頁面上點擊下就可以實現(xiàn)了。

7、離線分析有時間差,實時的話怎么搞呢?

要構建實時的分析系統(tǒng),其實在結果數(shù)據(jù)出來之前,架構和離線是截然不同的。數(shù)據(jù)時流動的,如果在大并發(fā)海量數(shù)據(jù)流動過程中,進行自己的業(yè)務分析呢? 這里其實說簡單也簡單,說復雜也復雜。目前我接觸過的,方案是這樣的,業(yè)務數(shù)據(jù)在寫入數(shù)據(jù)庫的時候,這里的數(shù)據(jù)庫mysql,在數(shù)據(jù)庫的機器上安裝一個程 序,類似JMS的系統(tǒng),用于監(jiān)聽binlog的變更,收到日志信息,將日志信息轉換為具體的數(shù)據(jù),然后以消息的形式發(fā)送出來。這個時候實現(xiàn)了解耦,這樣的 處理并不影響正常的業(yè)務流程。這個時候需要有個Storm集群,storm集群干啥事情呢?就一件事情,分析數(shù)據(jù),這個集群來接收剛才提到的JMS系統(tǒng)發(fā) 送出來的消息,然后按照指定的規(guī)則進行邏輯合并等計算,把計算的結果保存在數(shù)據(jù)庫中,這樣的話,流動的數(shù)據(jù)就可以過一遍篩子了。

8、分析的結果數(shù)據(jù)特別大,在線請求這些結果數(shù)據(jù)數(shù)據(jù)扛不住了,咋搞?

一般的結果數(shù)據(jù),數(shù)據(jù)量沒有那么大,也就幾十萬的樣子,這樣的數(shù)據(jù)級別,對于mysql這樣的數(shù)據(jù)庫沒有任何壓力,但是這個數(shù)據(jù)量如果增加到千 萬或者億級別,同時有復雜的SQL查詢,這個時候mysql肯定就扛不住了。這個時候,可能需要構建索引(例如通過lucene來對于要檢索的字段添加索 引),或者用分布式的內存服務器來完成查詢??傊瑑商姿悸?,一個是用文件索引的形式,說白來就是空間換時間,另外一種是用內存,就是用更快的存儲來抗請 求。

9、在線的數(shù)據(jù)庫,除了mysql、oracle之外,還有其他選擇不?

其實目前大家的思維定勢,往往第一個選擇就是oracle或者mysql,其實完全可以根據(jù)場景來進行選擇,mysql和oracle是傳統(tǒng)的 關系型數(shù)據(jù)庫,目前nosql類的數(shù)據(jù)庫也很多,例如HBase就是其中一個重要的代表。如果數(shù)據(jù)離散分布比較強,且根據(jù)特定的key來查詢,這個時候 HBase其實是一個不錯的選擇。

10、空間的數(shù)據(jù)怎么分析?

上面的分析大都是統(tǒng)計維度的,其實最簡單的描述就是求和或者平均值等,這個時候問題來了,大數(shù)據(jù)量的空間數(shù)據(jù)如何分析呢?對于我們電子商務而言,空 間數(shù)據(jù)可能就是海量的收貨地址數(shù)據(jù)了。需要做分析,第一步就是先要把經緯度添加到數(shù)據(jù)中(如果添加經緯度,這個可以搞http的請求來通過地圖服務提供商 來或者,或者是根據(jù)測繪公司的基礎數(shù)據(jù)來進行文本切割分析),之后空間數(shù)據(jù)是二維的,但是我們常見的代數(shù)是一維的,這個時候一個重要的算法出現(xiàn) 了,geohash算法,一種將經緯度數(shù)據(jù)轉換為一個可比較,可排序的字符串的算法。然后,這樣就可以再空間距離方面進行分析了,例如遠近,例如方圓周邊 等數(shù)據(jù)的分析。

11、上面這些僅僅是統(tǒng)計,如果想搞算法或者挖掘之類的,怎么搞呢?

上述的分析,大多數(shù)是統(tǒng)計分析,這個時候如果想高一點高級的,例如添加一個算法,咋搞呢?其他復雜的算法我沒咋接觸過。將拿一個我練過手的算法來講 吧。邏輯回歸,如果樣本數(shù)據(jù)量不是很大,可以采用weka來做了個回歸,獲得一個表達式,然后在線上系統(tǒng)中應用這個表達式,這種類似的表達式獲取對于實時 性要求不是很高,所以公式每天跑一次就行了。如果數(shù)據(jù)量比較大,單機的weka無法滿足需求了,可以將weka的jar包集成在系統(tǒng)中分析,當然也可以通 過hadoop中的mahout來進行離線分析,獲取這個表達式。

12、我就是想離線分析數(shù)據(jù),但是受不了hive或者hadoop的速度,咋搞?

其實搞過一段時間hadoop的人肯定有一點不爽,就是離線分析的速度太慢了,可能需要等很久,這個時候spark出現(xiàn)了,他和hadoop類似, 不過由于是內存中計算,所以速度快了很多,底層可以介入HDFS的文件系統(tǒng),具體我沒有使用過,但是公司內部一個團隊目前已經用spark來進行分析了。

13、這就是搞大數(shù)據(jù)了? 有了這些工具就是搞大數(shù)據(jù)了?

答案肯定不是,這個僅僅是工具罷了。真正搞大數(shù)據(jù)的可能在于思維的變化,用數(shù)據(jù)來思考,用數(shù)據(jù)來做決定。目前的無線和大數(shù)據(jù)啥關系?我覺得無線的終端是數(shù)據(jù)的來源和消費端,中間需要大數(shù)據(jù)的分析,兩者密不可分啊

14,注意大數(shù)據(jù),和數(shù)據(jù)大是二碼事,如何利用海量的數(shù)據(jù)并結合互聯(lián)網思維來挖掘出各種有價值的信息,才是真正的大數(shù)據(jù)。

鏈接已復制,快去分享吧

企業(yè)網版權所有?2010-2024 京ICP備09108050號-6京公網安備 11010502049343號