大數(shù)據(jù)與Hadoop
在了解一件自己完全沒有涉足過的事情之前,筆者喜歡使用“一縱兩橫”的思維去學(xué)習(xí)了解,這樣能夠快速的幫助自己構(gòu)建知識體系。學(xué)習(xí)一個新學(xué)科時,可以看其一縱,其整個歷史至今的發(fā)展過程。然后看其兩橫,一橫是不同人對于其的評價即定義,還有一橫是不同學(xué)科或領(lǐng)域與其的聯(lián)系和區(qū)別。抓住這一縱兩橫的思維,可以幫助我們快速了解一個新的學(xué)科或者一個新的領(lǐng)域。
所謂的“一縱”,就是事物本身的歷史發(fā)展,從最開始的誕生到當(dāng)今的發(fā)展情況,可能有的人會覺得無聊或者沒有必要,但筆者想告訴讀者的是,這是進入一個事物領(lǐng)域的最基本素質(zhì),能夠很好地體現(xiàn)著專業(yè)素養(yǎng)。而所謂的“兩橫”,就是一方面比較該領(lǐng)域里不同的專家學(xué)者或者提出者(創(chuàng)造者),以及其他領(lǐng)域的人對于該事物的闡述理解或者評價態(tài)度;另一方面就是比較已有領(lǐng)域?qū)W科或者相近領(lǐng)域?qū)W科和該事物的異同點或者聯(lián)系與區(qū)別。但完成了這“一縱兩橫”后,不僅是從本質(zhì)上了解事物,同時也和自己已有的知識架構(gòu)聯(lián)系在一起,有了自己的一些理解感悟。
大數(shù)據(jù)起源背景
筆者第一次正式接觸大數(shù)據(jù),是閱讀維克托的《大數(shù)據(jù)時代》,當(dāng)然是翻譯的中文版,是浙江人民出版社的,在《大數(shù)據(jù)時代》書中提到,大數(shù)據(jù)的發(fā)展來源,大數(shù)據(jù)的特征,著者維克托傳遞出大數(shù)據(jù)時代來臨了的信號,同時我們數(shù)據(jù)的思考和應(yīng)用都應(yīng)該有巨大的思想變革,這樣才能適應(yīng)大數(shù)據(jù)時代的發(fā)展。
書中對大數(shù)據(jù)的三個核心思想:數(shù)據(jù)不是隨機樣本,而是全部數(shù)據(jù);數(shù)據(jù)不是精確性,而是混雜性;數(shù)據(jù)間不是因果關(guān)系,而是相關(guān)關(guān)系;
維克托圍繞著三個核心思想,闡述了我們思維、生活以及商業(yè)的變革,同時筆者有點小感悟,那就是我們的學(xué)習(xí)或者教育是不是也需要變革,針對這三個核心思想對我們學(xué)習(xí)或者教育進行改革,當(dāng)然這不是我們重點,這就當(dāng)做是筆者在拋磚引玉 。
既然大數(shù)據(jù)這個概念能夠催生,那么在實際的生活必然有著對應(yīng)的實際應(yīng)用。那么這又是這樣的情況了?這就聊到了 hadoop 框架的產(chǎn)生背景了,進入 21 世紀(jì)以來,隨著信息技術(shù)和信息社會的高速發(fā)展,信息或者數(shù)據(jù)在不斷地增長,而且是超幾何的瘋狂增長。特別是在 Web2.0 時代,人們對于信息的產(chǎn)生和索取需求在瘋狂增長,這樣在瀏覽器端產(chǎn)生的數(shù)據(jù)在 TB 級別或者 PB 級別在增長,億萬網(wǎng)民用戶的瀏覽數(shù)據(jù)記錄以及日夜增長的網(wǎng)站,這些海量數(shù)據(jù)如何進行存儲和分析計算,就成為擺在我們的面前,同時也是 Google 這樣的搜索引擎公司天然就需要面對的現(xiàn)實和需要解決的問題。
Google-Alphabet 的新老三篇文章,被稱之為大數(shù)據(jù)領(lǐng)域的三駕馬車:
Google 老三架馬車: GFS、 MapReduce、 BigTable
Google 新三架馬車: Dremel、 Pregel、 Caffeine
大數(shù)據(jù)的應(yīng)用開發(fā)框架,你一定聽過 Hadoop,對就是它!Hadoop 是 Apache(這樣說應(yīng)該不準(zhǔn)確,就先這樣理解) 基于 Google 的前三篇文章實現(xiàn)的開源框架,現(xiàn)在是 Apache 下一個頂級項目。大家可以訪問Apache的Hadoop官網(wǎng)看一看。
Hadoop 的起源背景之 GFS
大數(shù)據(jù)解決本質(zhì)問題之一,就是對海量的數(shù)據(jù)如何進行存儲。海量的數(shù)據(jù)并不是傳統(tǒng)的 MB 或者 GB 級數(shù)據(jù),而是 TB、 PB 級的數(shù)據(jù)概念。或許你沒有啥直觀的感覺,我們用信息數(shù)據(jù)的量級來進行表明一下,你就會明白了。
簡單來說, 1.2ZB 字節(jié)數(shù)據(jù),如果儲存在只讀光盤上,那么這些光盤可以堆成五堆,每一堆都可以伸到月球。公元前 3 世紀(jì),埃及的托勒密二世竭力收集了當(dāng)時所有的書寫作品,全部儲存在亞歷山大圖書館,代表著當(dāng)時世界上所有的知識量,但是在數(shù)字?jǐn)?shù)據(jù)洪流涌向世界后,每一個人都可以獲取大量的數(shù)據(jù)信心,相當(dāng)與當(dāng)時壓力山大圖書館儲存的數(shù)據(jù)總量的 320 倍。從上面的小故事就可以知道,現(xiàn)在數(shù)字信息的龐大,如此海量的數(shù)據(jù)需要儲存,傳統(tǒng)的磁盤陣列儲存已經(jīng)無法滿足這樣的需求了,畢竟磁盤陣列價格是昂貴的。這就需要低成本、高效率、高可靠的儲存設(shè)計。
2003 年, Google 發(fā)表了 文章,解決了這個問題。在文章中闡述了解決海量數(shù)據(jù)儲存的設(shè)計思想。同時在 Apache 下Lucene 的子項目研究下,實現(xiàn)了海量數(shù)據(jù)的存儲設(shè)計:分布式文件系統(tǒng),也就是 HDFS(Hadoop Distributed File System)。
Hadoop 的起源背景之 MapReduce大數(shù)據(jù)解決本質(zhì)問題之二,就是海量數(shù)據(jù)如何進行計算。在編程計算里,有并行編程計算框架,有過了解的人就知道,這并不是什么新興的技術(shù)。同樣 Google 在 2004 年發(fā)表了 文章,文章闡述了基于分布式儲存的海量數(shù)據(jù)并行計算解決方案思想。開源社區(qū) Apache 的 Hadoop 項目研究實現(xiàn)了MapReduce 并行計算框架,將計算與數(shù)據(jù)在本地進行,將數(shù)據(jù)分為 Map 和Reduce 階段。簡單闡述就是 MapReduce 編程模型:把一個大任務(wù)拆分成小任務(wù),再進行匯總。
Hadoop 的起源背景之 BigTable
大數(shù)據(jù)解決本質(zhì)問題之三,就是對于海量的數(shù)據(jù)進行分析處理。數(shù)據(jù)在儲存后,其作用就是提供檢索和查閱,這才是搜索引擎的功效,也是Google 的強大技術(shù)支持。那么提高查詢和利用數(shù)據(jù)的效率就是需要解決的重點。到這里就需要有一定的數(shù)據(jù)庫相關(guān)知識 (建議可以查閱一下關(guān)于數(shù)據(jù)庫的起源以及歷史發(fā)展),數(shù)據(jù)庫的產(chǎn)生就是為了查詢和利用數(shù)據(jù)的效率提高,然而現(xiàn)有的數(shù)據(jù)庫并不能滿足基于分布式儲存的需求。結(jié)構(gòu)化的數(shù)據(jù)庫 (SQL) 和非結(jié)構(gòu)化的數(shù)據(jù) (NoSQL)。
Google 工程師在 2006 年發(fā)表了 文章,文中闡述了基于分布式儲存的數(shù)據(jù)庫設(shè)計思想。就這樣數(shù)據(jù)庫時代從關(guān)系型數(shù)據(jù)庫進入了非關(guān)系型數(shù)據(jù)庫時代,一張大表 BigTable 設(shè)計思想, BigTable 就是把所有的數(shù)據(jù)保存到一張表中,同時采用冗余方式 (提高效率和可靠性,這種冗余的方式是最常用的手段,無論是在通信領(lǐng)域,或者自然語言處理領(lǐng)域、語音處理等等), 基于其設(shè)計思想就開源實現(xiàn)了基于 HDFS 的非關(guān)系型數(shù)據(jù)庫(NoSQL 數(shù)據(jù)庫) HBase。
其實在我們常用的云盤或者網(wǎng)盤,其主要的設(shè)計思想就是這樣的,筆者常用的百度網(wǎng)盤也就類似于這樣分布式的儲存。筆者建議感興趣的讀者,可以閱讀 Google 的三篇文章,最好是原文 (雖然筆者的英文很爛),這樣我們就更能理解其設(shè)計思想的精髓。
搭建 Hadoop 環(huán)境準(zhǔn)備
安裝虛擬機 VMWare、 Linux 操作系統(tǒng)。配置主機名和 I 靜態(tài) IP 地址、免密碼登錄設(shè)置。約定安裝目錄: /liwei/hadoop。配置好 JDK 的環(huán)境變量、準(zhǔn)備好 Hadoop 安裝包。了解 Hadoop 的目錄結(jié)構(gòu)以及對應(yīng)的作用。
在學(xué)習(xí)大數(shù)據(jù)之前,我們應(yīng)該知道對于 Hadoop 的環(huán)境搭建,有著三種方式:
本地模式,就是單機版的 Hadoop,筆者覺得完全沒有必要,因為 Hadoop的儲存原理本就是分布式的概念,同時不具備 HDFS,只能測試 MapReduce程序。全分布式集群,就是對每一個必須的節(jié)點都采用一個獨立的主機,擁有獨立的 IP 地址,真正意義的分布式集群概念,完全達到 Hadoop 的實際應(yīng)用要求。偽分布式集群,我們學(xué)習(xí)最常用的一個環(huán)境搭建。就是采用一個主機,但是配置多個擁有獨立的虛擬節(jié)點,滿足 Hadoop 分布式的邏輯概念。具備 Hadoop 的所有功能,在單機上模擬一個分布式的環(huán)境。這也是我們在學(xué)習(xí)中建議采用的方式,因為筆者使用的是 Windows7 系統(tǒng),故而需要借助虛擬機。
Hadoop 分布式集群簡介!引言:學(xué)習(xí)大數(shù)據(jù),就需要自己搭建 Hadoop 的運行環(huán)境,這對于新手而言是一項困難的工作,特別是對于 Liunx 操作不熟悉的讀者而言,更是一大難題。但是學(xué)習(xí)部署自己的 Hadoop 環(huán)境是學(xué)習(xí)大數(shù)據(jù)的必經(jīng)之路,也是必會技能之一。接下來跟筆者一起來搭建 Hadoop 集群環(huán)境吧!當(dāng)然在 Windows 下也是支持部署 hadoop 的,不過這并不適合實際生產(chǎn)的需求,同時 Windows 不如 Liunx 性能穩(wěn)定等等因素,一次是來自 Apache 官網(wǎng)對于開發(fā)平臺的簡介。
GNU/Linux is supported as a development and production platform. Hadoop has been demonstrated on GNU/Linux clusters with 2000 nodes.Windows is also a supported platform but the followings steps are for Linux only. To set up Hadoop on Windows, see wiki page.
支持 GNU / Linux 作為開發(fā)和生產(chǎn)平臺。已經(jīng)在具有 2000 個節(jié)點的GNU / Linux 集群上演示了 Hadoop。 Windows 也是受支持的平臺,但以下步驟僅適用于 Linux。要在 Windows 上設(shè)置 Hadoop,請參閱 Wiki 頁面。