淺談Hadoop

dicksonjyl560101發表於2015-04-25
大資料的概念炒了好多年了,很顯然這項技術經受住了時間的考驗,不是有些人想的那樣華而不實,多年來總是伴隨著Hadoop的身影越發壯大。
這些年來資料的增長量真是發生了天翻地覆的變化,原來大家過年的時候都會很認真的拍一張全家福,恨不得把膠捲能夠正反兩用,多存點照片,現在好了,手機各類終端齊上陣,微博,微信,圖片,小影片,所有的資料真是應有盡有。資料量上來了,資料的分析工作就顯得尤為重要了。用現在很形象的一種描述就是,讓資料說話。
Hadoop的使命就是主要海量資料的儲存和分析,也有兩個核心的功能,一個是HDFS,一個就是MapReduce。怎麼理解呢,HDFS就是Hadoop Distributed FileSystem, MapReduce是一個程式設計模型,所做的工作是map和reduce兩部分,這些海量資料需要儲存,這個很容易理解,那麼什麼是MapReduce呢?
舉一個簡單的例子。
我們存在一些文字資料,是關於pm2.5的。記錄了每天的資料情況。內容如下:
20150321 01 60
20150321 06 50
20150321 12 100
20150320 01 200
20150320 06 150
20150320 12 160
20150319 01 150

20150319 06 200
如果我們想知道這些資料中每天的pm2.5最高的值,不需要精確到小時,按天即可。
我們可以做一個對映,這個操作就是類似map部分。
20150321  60
20150321  50
20150321  100
20150320  200
20150320  150
20150320  160
20150319  150
20150319  200

然後進一步處理得到
20150321    (60,505,100)
20150320   (200,150,160)
20150319   (150,200)
這個處理就是一個類似map的操作。把資料做了對映。

reduce的部分,來看看進一步的處理,對於每天的資料,檢視最大的值。

20150321    (100)
20150320   (200)
20150319   (200)
這就是一個基本的MapReduce的過程,因為是一個程式設計模型,可以透過多種語言來實現。這也是Hadoop精明的地方之一,就跟Java中的Servlet一樣,定義一個藉口,藉口的實現根據不同的web容器來具體實現。
Hadoop其實還有很有的元件,
比如Pig是一種資料流豔豔和執行環境,通常用來檢索非常大的資料集
Hive是一個分散式,按列儲存的資料倉儲,管理HDFS中的資料。
HBase是一個分散式,按列儲存的資料庫
ZooKeeper是一個分散式,高可用性的協調服務。
Sqoop是HDF和資料庫之間傳輸資料的工具
Avro是一種支援高校,跨語言的RPC和永久儲存資料的序列化系統
如果這麼擴充套件,一下子感覺Hadoop抽象起來,高不可攀,不過核心的部分還是HDFS和MapReduce.深入理解這兩個部分也是作為學習Hadoop的基礎。
原以為大資料總是和資料庫 有著千絲萬縷的聯絡,但是大資料的書中似乎都在盡力去撇清和傳統關係型資料庫的關係。
翻看了一些書,加上一些自己的理解,拿oracle來比較,我認為主要有以下幾個方面。
首先是處理的資料量上Hadoop面向的是P級,而傳統資料庫是G,T級,一般大型庫在T級也高不過幾百T。
其次Hadoop的分散式儲存一個很明顯的差別,分散式的思想會盡可能希望資料能夠分佈得更散。而oracle的設計思想就是share everything,儘可能的把資料都彙總起來共享,Oracle中的RAC+ASM尤其說明了它的這種特點。無論你透過多少個例項來達到高可用性,但是資料來源都是同一處共享儲存,加上自動化儲存管理,不過oracle中ASM所做的工作和HDFS有些類似。
在資料的處理上,關係型資料庫處理xml資料或者clob,blob資料總是一件比較糾結的事情,效能是一大硬傷。比如海量的圖片,在oracle中就只能是blob的儲存了,而這些資料在Hadoop中只在資料處理的時候才進行解釋,在這方面可能顯得更加輕量級。






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-1601939/,如需轉載,請註明出處,否則將追究法律責任。