Hadoop應用場景大全

今天總結一篇關於hadoop應用場景的文章,自認為這是學習hadoop的第一步,本文主要解答這幾個問題:

<strong>hadoop的十大應用場景?

<strong>hadoop到底能做什麼?

<strong>2012年美國著名科技博客GigaOM的專欄作家Derrick Harris跟蹤雲計算和Hadoop技術已有多年時間,在一篇文章中總結了<strong>10個Hadoop的應用場景,下面分享給大家:

<strong>在線旅遊:目前全球範圍內80%的在線旅遊網站都是在使用Cloudera公司提供的Hadoop發行版,其中SearchBI網站曾經報道過的Expedia也在其中。

<strong>移動數據:Cloudera運營總監稱,美國有70%的智能手機數據服務背後都是由Hadoop來支撐的,也就是說,包括數據的存儲以及無線運營商的數據處理等,都是在利用Hadoop技術。

<strong>電子商務:這一場景應該是非常確定的,eBay就是最大的實踐者之一。國內的電商在Hadoop技術上也是儲備頗為雄厚的。

<strong>能源開採:美國Chevron公司是全美第二大石油公司,他們的IT部門主管介紹了Chevron使用Hadoop的經驗,他們利用Hadoop進行數據的收集和處理,其中這些數據是海洋的地震數據,以便於他們找到油礦的位置。

<strong>節能:另外一家能源服務商Opower也在使用Hadoop,為消費者提供節約電費的服務,其中對用戶電費單進行了預測分析。

<strong>基礎架構管理:這是一個非常基礎的應用場景,用戶可以用Hadoop從服務器、交換機以及其他的設備中收集並分析數據。

<strong>圖像處理:創業公司Skybox Imaging使用Hadoop來存儲並處理圖片數據,從衛星中拍攝的高清圖像中探測地理變化。

<strong>詐騙檢測:這個場景用戶接觸的比較少,一般金融服務或者政府機構會用到。利用Hadoop來存儲所有的客戶交易數據,包括一些非結構化的數據,能夠幫助機構發現客戶的異常活動,預防欺詐行為。

<strong>IT安全:除企業IT基礎機構的管理之外,Hadoop還可以用來處理機器生成數據以便甄別來自惡意軟件或者網絡中的攻擊。

<strong>醫療保健:醫療行業也會用到Hadoop,像IBM的Watson就會使用Hadoop集群作為其服務的基礎,包括語義分析等高級分析技術等。醫療機構可以利用語義分析為患者提供醫護人員,並協助醫生更好地為患者進行診斷。

<strong>hadoop是什麼?

(1)Hadoop是一個開源的框架,可編寫和運行分佈式應用處理大規模數據,是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。Hadoop=HDFS(文件系統,數據存儲技術相關)+ Mapreduce(數據處理),Hadoop的數據來源可以是任何形式,在處理半結構化和非結構化數據上與關係型數據庫相比有更好的性能,具有更靈活的處理能力,不管任何數據形式最終會轉化為key/value,key/value是基本數據單元。用函數式變成Mapreduce代替SQL,SQL是查詢語句,而Mapreduce則是使用腳本和代碼,而對於適用於關係型數據庫,習慣SQL的Hadoop有開源工具hive代替。

(2)Hadoop就是一個分佈式計算的解決方案.

<strong>hadoop能做什麼?

hadoop擅長日誌分析,facebook就用Hive來進行日誌分析,2009年時facebook就有非編程人員的30%的人使用HiveQL進行數據分析;淘寶搜索中 的自定義篩選也使用的Hive;利用Pig還可以做高級的數據處理,包括Twitter、LinkedIn 上用於發現您可能認識的人,可以實現類似Amazon.com的協同過濾的推薦效果。淘寶的商品推薦也是;在Yahoo的40%的Hadoop作業是用pig運行的,包括垃圾郵件的識別和過濾,還有用戶特徵建模。(2012年8月25新更新,天貓的推薦系統是hive,少量嘗試mahout!)

<strong>下面舉例說明:

設想一下這樣的應用場景. 我有一個100M 的數據庫備份的sql 文件.我現在想在不導入到數據庫的情況下直接用grep操作通過正則過濾出我想要的內容。例如:某個表中含有相同關鍵字的記錄,有幾種方式,一種是直接用linux的命令 grep 還有一種就是通過編程來讀取文件,然後對每行數據進行正則匹配得到結果好了 現在是100M 的數據庫備份.上述兩種方法都可以輕鬆應對.

那麼如果是1G , 1T 甚至 1PB 的數據呢 ,上面2種方法還能行得通嗎? 答案是不能.畢竟單臺服務器的性能總有其上限.那麼對於這種 超大數據文件怎麼得到我們想要的結果呢?

有種方法 就是分佈式計算, 分佈式計算的核心就在於 利用分佈式算法 把運行在單臺機器上的程序擴展到多臺機器上並行運行.從而使數據處理能力成倍增加.但是這種分佈式計算一般對編程人員要求很高,而且對服務器也有要求.導致了成本變得非常高.

Hadoop 就是為了解決這個問題誕生的.Hadoop 可以很輕易的把很多linux的廉價pc 組成分佈式結點,然後編程人員也不需要知道分佈式算法之類,只需要根據mapreduce的規則定義好接口方法,剩下的就交給Haddop. 它會自動把相關的計算分佈到各個結點上去,然後得出結果.

例如上述的例子 : Hadoop 要做的事 首先把 1PB的數據文件導入到 HDFS中, 然後編程人員定義好 map和reduce, 也就是把文件的行定義為key,每行的內容定義為value , 然後進行正則匹配,匹配成功則把結果 通過reduce聚合起來返回.Hadoop 就會把這個程序分佈到N 個結點去並行的操作.

小編整理了一些大數據開發的系統性的學習資料需要的小夥伴可以加群:862879153,免費領取學習資料和大牛一起學習大數據。

那麼原本可能需要計算好幾天,在有了足夠多的結點之後就可以把時間縮小到幾小時之內.

<strong>hadoop使用場景

大數據量存儲:分佈式存儲(各種雲盤,百度,360~還有云平臺均有hadoop應用)日誌處理: Hadoop擅長這個海量計算: 並行計算ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫使用HBase做數據分析: 用擴展性應對大量讀寫操作—Facebook構建了基於HBase的實時數據分析系統機器學習: 比如Apache Mahout項目(Apache Mahout簡介 常見領域:協作篩選、集群、歸類)搜索引擎:hadoop + lucene實現數據挖掘:目前比較流行的廣告推薦大量地從文件中順序讀。HDFS對順序讀進行了優化,代價是對於隨機的訪問負載較高。用戶行為特徵建模個性化廣告推薦智能儀器推薦<strong>下面從hadoop的各項技術和各層架構角度分析應用場景

<strong>數據採集和DataFlow

對於數據採集主要分為三類,即結構化數據庫採集,日誌和文件採集,網頁採集。對於結構化數據庫,採用Sqoop是合適的,可以實現結構化數據庫中數據並行批量入庫到hdfs存儲。對於網頁採集,前端可以採用Nutch,全文檢索採用lucense,而實際數據存儲最好是入庫到Hbase數據庫。對於日誌文件的採集,現在最常用的仍然是flume或chukwa,但是我們要看到如果對於日誌文件數據需要進行各種計算處理再入庫的時候,往往flume並不容易處理,這也是為何可以採用Pig來做進一步複雜的data flow和process的原因。

數據採集類似於傳統的ETL等工作,因此傳統ETL工具中的數據清洗,轉換,任務和調度等都是相當重要的內容。這一方面是要基於已有的工具,進行各種接口的擴展以實現對數據的處理和清洗,一方面是加強數據採集過程的調度和任務監控。

<strong>數據存儲庫

數據存儲在這裡先談三種場景下的三種存儲和應用方式,即Hbase,Hive,impala。其中三者都是基於底層的hdfs分佈式文件系統。hive重點是sql-batch查詢,海量數據的統計類查詢分析,而impala的重點是ad-hoc和交互式查詢。hive和impala都可以看作是基於OLAP模式的。而Hbase庫是支撐業務的CRUD操作(增加(Create)、讀取(Retrieve)、更新(Update)和刪除(Delete)),各種業務操作下的處理和查詢。

如何對上面三種模式提供共享一致的數據存儲和管理服務,HCatalog是基於Apache Hadoop之上的數據表和存儲管理服務。提供統一的元數據管理,而不需要知道具體的存儲細節當然是最好的,但是Hcatalog本身也還處於完善階段,包括和Hive ,Pig的集成。

基於Mysql的MPP數據庫Infobright是另外一個MPP(share nothing)數據分析庫的選擇,如果本身已有的業務系統就是基於Mysql數據庫的,那麼採用Infobright來做作為一個OLAP分析庫也是一個選擇。但是本身Infobright的性能,Infobright社區版的穩定性,管控功能的缺失等仍然是需要考量的因素。

對於mapreduce和zookeeper本身就已經在hbase和hive中使用到了。如hive的hsql語言需要通過mapreduce解析和合並等。而對於impala要注意到本身是基於內存的MPP機制,沒有用到mapreduce框架去處理,Dremel之所以能在大數據上實現交互性的響應速度,是因為使用了兩方面的技術:一是對有嵌套結構的嵌套關係型數據採用了全新的列式存儲格式,一是分佈式可擴展統計算法,能夠在幾千臺機器上並行計算查詢結果。

<strong>實時流處理

這個hadoop框架本身沒有包含,twitter推出<strong>storm可以解決實時熱點查詢和排序的問題,基於一個巨大的海量數據數據庫,如果不是這種基於增量strom模式的分佈式實時任務計算和推送,很難真正滿足業務對性能的要求。

storm只是提供了一個開源的實時流處理框架,而真正的任務處理邏輯和代碼仍然需要自己去實現,而開源框架只是提供了一個框架,提供了基本的集群控制,任務採集,任務分發,監控和failover的能力。真正在企業內部應用來看,很少有這種實時流場景,而與之對應的CEP複雜事件處理和EDA事件驅動架構,這個基於消息中間件實現的事件發佈訂閱和推送,事件鏈的形成相對來說更加成熟。

<strong>另外,hadoop 和 strom還是有本質區別的?

hadoop的處理方式,不能稱之為流,因為當數據來了,不能處理,因為mapreduce還沒有跑完。hadoop為什麼被稱之為批處理。因為它一個mapreduce只能處理當前輸入的文件數據。比如日誌處理,我想處理去年的數據,那麼這個mapreduce只能處理去年的,今年的今天新產生的能不能處理-------不能處理。<strong> 想處理該怎麼辦?另外起一個mapreduce。如果再產生該怎麼辦,再啟動一個mapreduce~

再來看storm,處理去年的數據,那麼今年今天的能不能處理,能處理,如果吞吐量不夠,怎麼辦?排隊,那麼我們是否需要在此開啟storm的topology,答案是不需要,因為一個topology就能處理。

<strong>從Hadoop生態4層架構談hadoop(2.X)應用背景:

底層:存儲層,文件系統HDFS,NoSQL Hbase

中間層:資源及數據管理層,YARN以及Sentry等

上層:MapReduce、Impala、Spark等計算引擎

頂層:基於MapReduce、Spark等計算引擎的高級封裝及工具,如Hive、Pig、Mahout

hadoop可以作為分佈式存儲框架存儲大規模數據,數據的價值越來越被企業重視,被稱為是21世紀的石油;

存儲了大規模的數據,我們要幹什麼呢,當然是分析數據中的價值,Hadoop+MR(MapReduce)用於離線大數據的分析挖掘,比如:電商數據的分析挖掘、社交數據的分析挖掘,企業客戶關係的分析挖掘,最終的目標就是BI了,提高企業運作效率,實現精準營銷,各個垂直領域的推薦系統,發現潛在客戶等等。在這個數據化時代,每件事都會留下電子檔案,分析挖掘日積月累的數據檔案,我們就能理解這個世界和我們自己更多。

MR編寫代碼複雜度高,由於磁盤IO,分析結果週期長,現實世界中我們對數據分析的實時性要求越來越高,基於內存計算的spark來了。Hadoop+spark正在替代Hadoop+MR成為大數據領域的明星,Cloudera正在積極推動Spark成為Hadoop的默認數據處理引擎。

更上層應用,如:機器學習,發現、預測分析等都必須基於大規模的數據,沒有足夠的數據一切扯淡,數據量足夠大,就必須分佈式存儲,依賴大規模的廉價PC構建hadoop集群是非常有必要的。


分享到:


相關文章: