
隨著全球經(jīng)濟的不斷發(fā)展,大數(shù)據(jù)時代早已悄悄到來,而Hadoop又是大數(shù)據(jù)環(huán)境的基礎(chǔ),想入門大數(shù)據(jù)行業(yè)首先需要了解Hadoop的知識。2017年年初apache發(fā)行了Hadoop3.0,也意味著一直有一群人在對Hadoop不斷的做優(yōu)化,不僅如此,各個Hadoop的商業(yè)版本也有好多公司正在使用,這也印證了它的商業(yè)價值。
讀者可以通過閱讀“一文讀懂Hadoop”系列文章,對Hadoop技術(shù)有個全面的了解,它涵蓋了Hadoop官網(wǎng)的所有知識點,并且通俗易懂,英文不好的讀者完全可以通過閱讀此篇文章了解Hadoop。
1.簡介
1.1 Hadoop概述
Hadoop是一個高可靠性、高擴展性的分布式計算的開源軟件。是一個能夠允許大量數(shù)據(jù)在計算機集群中使用簡單的編程模型進行分布式處理的框架。其設(shè)計的規(guī)??蓮膯我坏姆?wù)器到上千臺機器上,每一個均可提供局部運算和存儲功能。而不是依靠于硬件以支持高效性。
Hadoop的創(chuàng)始人是Doug cutting,在Yahoo就職期間開發(fā)了Hadoop項目,主要原因是此人對搜索引擎的研究比較感興趣,當(dāng)時用的技術(shù)是lucene與nutch。
1.2 Lucene&Nutch
Lucene
是一個開源的全文檢索引擎工具包,它不是一個完整的全文搜索引擎,而是一個全文檢索引擎的一個架構(gòu),提供了完整的查詢引擎與搜索引擎,部分文本分析引擎,lucene的目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便在目標(biāo)系統(tǒng)中實現(xiàn)全文檢索功能,或者以此為基礎(chǔ),建立完整的全文檢索引擎。
Nutch
Nutch是一個開源java實現(xiàn)的搜索引擎,它提供了我們自己運行搜索引擎所需的全部工具,包括全文檢索與web爬蟲。
1.3 Hadoop的產(chǎn)生
Doug cutting在用lucene與nutch的時候遇到了數(shù)據(jù)與計算難題。主要有兩方面的問題,一方面爬取的大量頁面如何存儲,另一方面就是搜索算法還有待優(yōu)化,因此他用了2年的時間實現(xiàn)了DFS與MapReduce,一個微縮版的Nutch,2005年hadoop作為lucene的子項目的nutch的一部分,正式引入Apache基金會。2006年3月份MapReduce和Nutch Distributed File System(NDFS)分別被納入Hadoop項目。
1.4 Hadoop項目的思想來源
Hadoop項目的思想來源于谷歌的3篇論文
GFS->HDFS
Map-Reduce->Map-Reduce
Bigtable->Hbase
1.5 Hadoop的組成
Hadoop Distributed File System (HDFS)分布式文件系統(tǒng)
一個提供高吞吐量來訪問應(yīng)用程序的數(shù)據(jù)的分布式文件系統(tǒng)。
Hadoop YARN
一個對作業(yè)進行調(diào)度和對集群資源管理的框架。
Hadoop MapReduce
以yarn為基礎(chǔ)的大型數(shù)據(jù)集并行處理系統(tǒng)。
2. 三種運行模式
2.1單機(本地)模式
這種模式在一臺單機上運行,沒有分布式文件系統(tǒng),而是直接讀寫本地操作系統(tǒng)的文件系統(tǒng)。在單機模式(standalone)中不會存在守護進程,所有東西都運行在一個JVM上。這里同樣沒有DFS,使用的是本地文件系統(tǒng)。單機模式適用于開發(fā)過程中運行MapReduce程序,這也是最少使用的一個模式。
2.2偽分布式模式
這種模式在一臺單機上運行,但用不同的Java進程模仿分布式運行中的各類節(jié)點,偽分布式(Pseudo)適用于開發(fā)和測試環(huán)境,在這個模式中,所有守護進程都在同一臺機器上運行。
2.3完全分布式模式
這種模式通常被用于生產(chǎn)環(huán)境,使用N臺主機組成一個Hadoop集群,Hadoop守護進程運行在每臺主機之上。這里會存在Namenode運行的主機,Datanode運行的主機,以及resourcemanager運行的主機等。在分布式環(huán)境下,主節(jié)點和從節(jié)點會分開。
3. 命令指南
3.1概述
所有Hadoop命令和子項目都遵循相同的基本結(jié)構(gòu):
用法:shellcommand [SHELL_OPTIONS] [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS]

3.2 shell選項
所有shell命令都將接受一組公共選項。對于某些命令,將忽略這些選項。例如,對僅在單個主機上執(zhí)行的命令傳遞?--hostnames將被忽略。

3.3通用選項
許多子命令遵循一組常用的配置選項來更改其行為:

3.4 hadoop通用命令
所有這些命令都是從hadoop?shell命令執(zhí)行的。
3.4.1用戶命令
對hadoop集群的用戶有用的命令。
Archive
Hadoop檔案是一個特殊格式的檔案,一個hadoop檔案映射到文件系統(tǒng)的一個目錄,hadoop檔案的擴展名是.har,hadoop Archive目錄包含元數(shù)據(jù)文件(?_index?和?_masterindex)和數(shù)據(jù)文件(part-*),這個_index文件包含了所有文件的名稱和他對應(yīng)part文件的位置。
checknative
此命令檢查Hadoop本地代碼的可用性。
classpath
打印獲取Hadoop jar和所需庫所需的類路徑。如果無參數(shù)調(diào)用,則打印由命令腳本設(shè)置的類路徑,這可能在類路徑條目中包含通配符。其他選項在通配符擴展后打印類路徑或?qū)㈩惵窂綄懭雑ar文件的清單。后者在不能使用通配符且擴展的類路徑超過支持的最大命令行長度的環(huán)境中非常有用。
credential
該命令在憑證提供者內(nèi)部管理憑證及密碼。Hadoop的CredentialProvider API支持應(yīng)用程序拆分,并且要求拆分后的應(yīng)用 如何儲存所需的密碼。為了指明一個Provider的位置和類型,需要在core-site.xml添加hadoop.security.credential.provider. path配置項,或者通過指令中-provider命令選項進行設(shè)置。Provider路徑是一串以逗號分割的URL字符串。這些字符串會說明Provider的類型和位置。
distch
一次更改許多文件的所有權(quán)和權(quán)限。
distcp
遞歸的拷貝文件或者目錄。
dtutil
在憑據(jù)文件中獲取和管理hadoop委托令牌的實用程序。它旨在替換更簡單的命令fetchdt。有多個子命令,每個都有自己的標(biāo)志和選項。對于寫出文件的每個子命令,-format選項將指定要使用的內(nèi)部格式。java是與fetchdt匹配的舊格式。默認(rèn)值為protobuf。對于連接到服務(wù)的每個子命令,提供方便標(biāo)志以指定用于認(rèn)證的kerberos主體名稱和keytab文件。
fs
和hdfs腳本的dfs類似。
gridmix
Hadoop Gridmix是針對hadoop系統(tǒng)的基準(zhǔn)測試程序。它具備評測大規(guī)模數(shù)據(jù)處理系統(tǒng)所需的各個功能模塊,包括:產(chǎn)生數(shù)據(jù),生成并提交作業(yè),統(tǒng)計作業(yè)完成時間等。
jar
運行一個jar文件。
jnipath
打印計算java.library.path。
kerbname
通過auth_to_local規(guī)則將命名主體轉(zhuǎn)換為Hadoop用戶名。
key
通過KeyProvider管理密鑰。
kms
運行KMS,密鑰管理服務(wù)器。
trace
查看和修改Hadoop跟蹤設(shè)置。
version
打印版本。
classname
運行名為classname的類。類必須是包的一部分。
envvars
顯示Hadoop環(huán)境變量。
3.4.2管理命令
daemonlog
獲取/設(shè)置由守護程序中的限定類名稱標(biāo)識的日志的日志級別。默認(rèn)情況下,該命令發(fā)送HTTP請求,但可以通過使用參數(shù)-protocol https發(fā)送HTTPS請求來覆蓋此請求。
3.4.3文件
etc/hadoop/hadoop-env.sh
此文件存儲所有Hadoop shell命令使用的全局設(shè)置。
etc/hadoop-user-functions.sh
此文件允許高級用戶覆蓋某些shell功能。
?/ .hadooprc
這存儲了個人用戶的個人環(huán)境。它在hadoop-env.sh和hadoop-user-functions.sh文件之后處理,并且可以包含相同的設(shè)置。
4. UNIX shell指南
4.1重要的最終用戶環(huán)境變量
Apache Hadoop有許多控制軟件各個方面的環(huán)境變量。(請參閱hadoop-env.sh和相關(guān)文件。)其中一些環(huán)境變量專用于幫助最終用戶管理其運行時。
4.1.1 HADOOP_CLIENT_OPTS
此環(huán)境變量用于所有最終用戶,非守護程序操作。它可以用于通過系統(tǒng)屬性定義設(shè)置任何Java選項以及任何Apache Hadoop選項。
4.1.2 (command)_(subcommand)_OPTS
也可以在每個子命令的基礎(chǔ)上設(shè)置選項。這允許為特定情況創(chuàng)建特殊選項。模式的第一部分是正在使用的命令,但是都是大寫的。命令的第二部分是正在使用的子命令。然后最后跟著字符串_OPT。
4.1.3 HADOOP_CLASSPATH
Apache Hadoop腳本能夠通過設(shè)置此環(huán)境變量將更多內(nèi)容注入正在運行的命令的類路徑中。它是目錄、文件或通配符位置的冒號分隔列表。
4.1.4變量的自動設(shè)置
如果用戶有一組通用的設(shè)置,可以將它們放在$ {HOME}/.hadoop-env文件中。始終讀取此文件以初始化并覆蓋用戶可能想要自定義的任何變量。它使用bash語法,類似于.bashrc文件。
4.2管理員環(huán)境
除了各種XML文件之外,管理員還有兩個關(guān)鍵功能可以在使用Unix Shell時配置。
4.2.1 (command)_(subcommand)_OPTS
最重要的是控制守護進程如何工作的一系列_OPTS變量。這些變量應(yīng)包含這些守護程序的所有相關(guān)設(shè)置。
4.2.2 (command)_(subcommand)_USER
Apache Hadoop提供了一種方法來執(zhí)行用戶檢查每個子命令。雖然這種方法很容易規(guī)避,不應(yīng)被視為安全特征,但它確實提供了防止事故的機制。例如,設(shè)置HDFS_NAMENODE_USER = hdfs將使hdfs namenode和hdfs –daemon start namenode命令通過檢查USER環(huán)境變量來驗證運行命令的用戶是否為hdfs用戶。這也適用于非守護進程。在允許執(zhí)行hadoop distcp命令之前,設(shè)置HADOOP_DISTCP_USER = jane將驗證USER是否設(shè)置為jane。
4.3開發(fā)者和高級管理員環(huán)境
4.3.1 Shell Profiles
Apache Hadoop允許第三方通過各種可插拔接口輕松添加新功能。這包括一個shell代碼子系統(tǒng),可以方便地將必要的內(nèi)容注入基本安裝。這個功能的核心是shell配置文件的概念。Shell配置文件是可以執(zhí)行諸如向類路徑添加jar,配置Java系統(tǒng)屬性等等的shell代碼片段。
4.3.2 Shell API
Apache Hadoop的shell代碼具有一個函數(shù)庫,供管理員和開發(fā)人員使用以幫助他們的配置和高級特性管理。
4.3.3用戶級API訪問
除了.hadoop-env,它允許單個用戶重寫hadoop-env.sh,用戶的也可以使用.hadooprc。這是在配置Apache Hadoop shell環(huán)境后調(diào)用的,并允許完整的shell API函數(shù)調(diào)用。
4.3.4動態(tài)子命令
利用Shell API,第三方可以將其自己的子命令添加到主Hadoop shell腳本(hadoop,hdfs,mapred,yarn)。在執(zhí)行子命令之前,主腳本將檢查是否存在(scriptname)_subcommand_(子命令)函數(shù)。該函數(shù)將參數(shù)設(shè)置為所有剩余的命令行參數(shù)。
5. 應(yīng)用場景
美國著名科技博客GigaOM的專欄作家Derrick Harris跟蹤云計算和Hadoop技術(shù)已有多年時間,在一篇文章中總結(jié)了10個Hadoop的應(yīng)用場景,下面分享給大家:
在線旅游:目前全球范圍內(nèi)80%的在線旅游網(wǎng)站都是在使用Cloudera公司提供的Hadoop發(fā)行版,其中SearchBI網(wǎng)站曾經(jīng)報道過的Expedia也在其中。
移動數(shù)據(jù):Cloudera運營總監(jiān)稱,美國有70%的智能手機數(shù)據(jù)服務(wù)背后都是由Hadoop來支撐的,也就是說,包括數(shù)據(jù)的存儲以及無線運營商的數(shù)據(jù)處理等,都是在利用Hadoop技術(shù)。
電子商務(wù):這一場景應(yīng)該是非常確定的,eBay就是最大的實踐者之一。國內(nèi)的電商在Hadoop技術(shù)上也是儲備頗為雄厚的。
能源開采:美國Chevron公司是全美第二大石油公司,他們的IT部門主管介紹了Chevron使用Hadoop的經(jīng)驗,他們利用Hadoop進行數(shù)據(jù)的收集和處理,其中這些數(shù)據(jù)是海洋的地震數(shù)據(jù),以便于他們找到油礦的位置。
節(jié)能:另外一家能源服務(wù)商Opower也在使用Hadoop,為消費者提供節(jié)約電費的服務(wù),其中對用戶電費單進行了預(yù)測分析。
基礎(chǔ)架構(gòu)管理:這是一個非?;A(chǔ)的應(yīng)用場景,用戶可以用Hadoop從服務(wù)器、交換機以及其他的設(shè)備中收集并分析數(shù)據(jù)。
圖像處理:創(chuàng)業(yè)公司Skybox Imaging使用Hadoop來存儲并處理圖片數(shù)據(jù),從衛(wèi)星中拍攝的高清圖像中探測地理變化。
詐騙檢測:這個場景用戶接觸的比較少,一般金融服務(wù)或者政府機構(gòu)會用到。利用Hadoop來存儲所有的客戶交易數(shù)據(jù),包括一些非結(jié)構(gòu)化的數(shù)據(jù),能夠幫助機構(gòu)發(fā)現(xiàn)客戶的異?;顒樱A(yù)防欺詐行為。
IT安全:除企業(yè)IT基礎(chǔ)機構(gòu)的管理之外,Hadoop還可以用來處理機器生成數(shù)據(jù)以便甄別來自惡意軟件或者網(wǎng)絡(luò)中的攻擊。
醫(yī)療保健:醫(yī)療行業(yè)也會用到Hadoop,像IBM的Watson就會使用Hadoop集群作為其服務(wù)的基礎(chǔ),包括語義分析等高級分析技術(shù)等。醫(yī)療機構(gòu)可以利用語義分析為患者提供醫(yī)護人員,并協(xié)助醫(yī)生更好地為患者進行診斷。
主要的場景分類如下:
大數(shù)據(jù)量存儲:分布式存儲(各種云盤,百度、360還有云平臺均有hadoop應(yīng)用)
日志處理:Hadoop擅長這個
海量計算:并行計算
ETL:數(shù)據(jù)抽取到oracle、mysql、DB2、mongdb及主流數(shù)據(jù)庫
使用HBase做數(shù)據(jù)分析:用擴展性應(yīng)對大量讀寫操作—Facebook構(gòu)建了基于HBase的實時數(shù)據(jù)分析系統(tǒng)
機器學(xué)習(xí):比如Apache Mahout項目(常見領(lǐng)域:協(xié)作篩選、集群、歸類)
搜索引擎:hadoop + lucene實現(xiàn)
數(shù)據(jù)挖掘:目前比較流行的廣告推薦
大量地從文件中順序讀。HDFS對順序讀進行了優(yōu)化,代價是對于隨機的訪問負(fù)載較高。
用戶行為特征建模
個性化廣告推薦
智能儀器推薦
6. 資源推薦
6.1?網(wǎng)站
我推薦給大家的是HADOOP官網(wǎng):http://hadoop.apache.org/,因為官網(wǎng)是一項技術(shù)的第一手信息來源,并且可以最全面及最直接的了解此技術(shù),如果有英文不好的,可以使用谷歌的網(wǎng)頁翻譯,正確率在90%以上,對于學(xué)習(xí)一項技術(shù)來說,還是可以的。或者大家可以訪問http://hadoop.apache.org/docs/r1.0.4/cn/?這個網(wǎng)址,看一下1.0的中文版,雖然現(xiàn)在已經(jīng)到3.0了,但是對于對MAPREDUCE的理解,幫助還是很大的。
6.2?書籍
《HADOOP權(quán)威指南》
這本書很全面的介紹了hadoop,本書是將作者Tom White的英文原版書籍進行了翻譯,作者從2006年起就開始為hadoop做貢獻,是hadoop開發(fā)社區(qū)受人尊敬的資深成員,精通hadoop技術(shù)的若干領(lǐng)域, 由他寫出的hadoop書籍,通俗易懂,適合入門hadoop。
《hadoop技術(shù)內(nèi)幕》
之所以給大家推薦《hadoop技術(shù)內(nèi)幕》是因為此書的作者是董西成,他是Hadoop領(lǐng)域資深的實踐者,他將hadoop的技術(shù)分成3部分:MapReduce、HDFS、YARN,每部分都進行了詳細(xì)的闡述。
6.3?網(wǎng)課
極客學(xué)院網(wǎng)課
筆者將所有網(wǎng)上的視頻與網(wǎng)課瀏覽了一遍,大部分的視頻都有些老。極客學(xué)院的網(wǎng)課值得推薦。
http://www.jikexueyuan.com/course/hadoop/
尚學(xué)堂hadoop視頻分享
鑒于網(wǎng)上的視頻資料大多都有些老,筆者將在尚學(xué)堂學(xué)習(xí)的視頻分享給大家。
http://pan.baidu.com/s/1qYkDqZq
6.4?社區(qū)
hadoop技術(shù)社區(qū)
這個社區(qū)中涵蓋了有關(guān)hadoop的資訊、博客、論壇、hadoop資料下載、及hadoop的有關(guān)的活動。
http://hadoop.csdn.net/
7. 進一步學(xué)習(xí)
7.1論文歸納
如下是Google大數(shù)據(jù)三篇著名論文的中文版,是比較權(quán)威的論文資料。在這里分享給讀者。
Google File System中文版
http://blog.bizcloudsoft.com/wp-content/uploads/Google-File-System%E4%B8%AD%E6%96%87%E7%89%88\_1.0.pdf
Google Bigtable中文版
http://blog.bizcloudsoft.com/wp-content/uploads/Google-Bigtable%E4%B8%AD%E6%96%87%E7%89%88\_1.0.pdf
Google MapReduce中文版
http://blog.bizcloudsoft.com/wp-content/uploads/Google-MapReduce%E4%B8%AD%E6%96%87%E7%89%88\_1.0.pdf
7.2?優(yōu)秀博文
董的博文
筆者之所以首先推薦“董的博客”是由于他是hadoop技術(shù)內(nèi)幕的作者、資深Hadoop技術(shù)實踐者和研究者,曾參與商用Hadoop原型研發(fā),以及分布式日志系統(tǒng)、全網(wǎng)圖片搜索引擎、Hadoop調(diào)度器等項目的設(shè)計與研發(fā)。對hadoop有自己獨到的見解。網(wǎng)址為:http://dongxicheng.org/
bigdata_player的博文
如果有剛?cè)腴Thadoop的讀者,可以讀一下bigdata_player的三篇博文:
“Hadoop?基礎(chǔ)知識---之HDFS篇”, 網(wǎng)址為:http://blog.csdn.net/bigdata\_player/article/details/51932437
“Hadoop?基礎(chǔ)知識---之MapReduce篇”,網(wǎng)址為:http://blog.csdn.net/bigdata\_player/article/details/52050400
“Hadoop基礎(chǔ)知識---之YARN原理簡述”,網(wǎng)址為:http://blog.csdn.net/bigdata\_player/article/details/52057176
既認(rèn)準(zhǔn)這條路,又何必在意要走多久的博文
在初學(xué)hadoop的時候,免不了要去官網(wǎng)下載hadoop的安裝包,而下載下來的安裝包無法直接使用,需要手動去編譯。讀者可以參照此博文來編譯hadoop的包。網(wǎng)址為:http://blog.csdn.net/linlinv3/article/details/49358217
本期獨家內(nèi)容“一文讀懂Hadoop”系列文章將根據(jù)先介紹Hadoop,繼而分別詳細(xì)介紹HDFS、MAPREDUCE、YARN的所有知識點的框架,分為四期內(nèi)容在接下來的幾天中推送。敬請關(guān)注后續(xù)內(nèi)容。
宋瑩,數(shù)據(jù)派研究部志愿者,北京中軟融鑫ETL工程師。喜愛數(shù)學(xué)和計算機,酷愛大數(shù)據(jù)分析、大數(shù)據(jù)挖掘、機器學(xué)習(xí)。