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