對Hadoop認識與安裝
1.簡介
• Hadoop是Apache軟件基金會旗下的一個開源分佈式計算平臺,爲用戶提供了系統 底層細節透明的分佈式基礎架構
•Hadoop是基於Java語言開發的,具有很好的跨平臺特性,並且可以部署在廉價的計 算機集羣中
•Hadoop的核心是分佈式文件系統HDFS(Hadoop Distributed File System)和 MapReduce
•Hadoop被公認爲行業大數據標準開源軟件,在分佈式環境下提供了海量數據的處理能力
•幾乎所有主流廠商都圍繞Hadoop提供開發工具、開源軟件、商業化工具和技術服務,
如谷歌、雅虎、微軟、思科、淘寶等,都支持Hadoop。
2.發展簡史
• Hadoop最初是由Apache Lucene項目的創始人Doug Cutting開發的文 本搜索庫。Hadoop源自始於2002年的Apache Nutch項目——一個開源 的網絡搜索引擎並且也是Lucene項目的一部分
• 在2004年,Nutch項目也模仿GFS開發了自己的分佈式文件系統 NDFS(Nutch Distributed File System),也就是HDFS的前身
• 2004年,谷歌公司又發表了另一篇具有深遠影響的論文,闡述了 MapReduce分佈式編程思想
• 2005年,Nutch開源實現了谷歌的MapReduce
•到了2006年2月,Nutch中的NDFS和MapReduce開始獨立出來,成爲Lucene項目的一個子項目,稱爲Hadoop,同時,Doug Cutting加盟 雅虎
• 2008年1月,Hadoop正式成爲Apache頂級項目,Hadoop也逐漸開始被雅虎之外的其他公司使用
• 2008年4月,Hadoop打破世界紀錄,成爲最快排序1TB數據的系統,
它採用一個由910個節點構成的集羣進行運算,排序時間只用了209秒
•在2009年5月,Hadoop更是把1TB數據排序時間縮短到62秒。
Hadoop從此名聲大震,迅速發展成爲大數據時代最具影響力的開源分佈式開發平臺,併成爲事實上的大數據處理標準。
3.特性
Hadoop是一個能夠對大量數據進行分佈式處理的軟件框架,並且 是以一種可靠、高效、可伸縮的方式進行處理的,它具有以下幾個方 面的特性:
• 高可靠性
• 高效性
• 高可擴展性
• 高容錯性
• 成本低
• 運行在Linux平臺上
• 支持多種編程語言
4.應用現狀
• Hadoop憑藉其突出的優勢,已經在各個領域得到了廣泛的應用,而 互聯網領域是其應用的主陣地
• 2007年,雅虎在Sunnyvale總部建立了M45——一個包含了4000個處 理器和1.5PB容量的Hadoop集羣系統
• Facebook作爲全球知名的社交網站,Hadoop是非常理想的選擇,
Facebook主要將Hadoop平臺用於日誌處理、推薦系統和數據倉庫等 方面
• 國內採用Hadoop的公司主要有百度、淘寶、網易、華爲、中國移動等,其中,淘寶的Hadoop集羣比較大
5.版本演變
•Apache Hadoop版本分爲兩代,我們將第一代Hadoop稱爲Hadoop 1.0,第二代Hadoop稱爲Hadoop 2.0
•第一代Hadoop包含三個大版本,分別是0.20.x,0.21.x和0.22.x,其 中,0.20.x最後演化成1.0.x,變成了穩定版,而0.21.x和0.22.x則增加 了NameNode HA等新的重大特性
•第二代Hadoop包含兩個版本,分別是0.23.x和2.x,它們完全不同於 Hadoop 1.0,是一套全新的架構,均包含HDFS Federation和YARN兩 個系統,相比於0.23.x,2.x增加了NameNode HA和Wire-compatibility 兩個重大特性
Hadoop的各種版本:
• Apache Hadoop
• Hortonworks
• Cloudera(CDH:Cloudera Distribution Hadoop)
• MapR
• ……
選擇 Hadoop版本的考慮因素:
•是否開源(即是否免費)
•是否有穩定版
•是否經實踐檢驗
6.項目結構
Hadoop的項目結構不斷豐富發展,已經形成一個豐富的Hadoop生態系統
7.安裝與使用
(1)Linux的選擇:建議使用CentOS 或Ubuntu
(2)32位還是64位?
•如果電腦比較老或者內存小於2G,那麼建議選擇32位系統版本的Linux
•如果內存大於4G,那麼建議選擇64位系統版本的Linux
(3)虛擬機安裝還是雙系統安裝?
•建議電腦比較新或者配置內存4G以上的電腦可以選擇虛擬機安裝
•電腦較舊或配置內存小於等於4G的電腦強烈建議選擇雙系統安裝,否則,在配置較低的計算機上運行LInux虛擬機,系統運行速度會非常慢
(4)安裝方式
•單機模式:Hadoop 默認模式爲非分佈式模式(本地模式),無需進行其他配置即可運行。非分佈式即單 Java 進程,方便進行調試
•僞分佈式模式:Hadoop 可以在單節點上以僞分佈式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作爲 NameNode 也作爲 DataNode,同時,讀取的是
HDFS 中的文件
•分佈式模式:使用多個節點構成集羣環境來運行Hadoop
(4)安裝Linux虛擬機
若還沒安裝虛擬機可參考:VMVMware14虛擬機安裝程
安裝Ubuntu的可參考:Ubuntu的安裝教程
安裝CentOS的可參考:CentOS的安裝教程
(5)Hadoop的安裝與使用(單機/僞分佈式)
Hadoop基本安裝配置主要包括以下幾個步驟:
• 創建Hadoop用戶
• SSH登錄權限設置
• 安裝Java環境
• 單機安裝配置
• 僞分佈式安裝配
創建hadoop用戶
如果安裝 Ubuntu 的時候不是用的 “hadoop” 用戶,那麼需要增加一個名爲 hadoop 的用戶
sudo useradd -m hadoop -s /bin/bash // 創建hadoop 的用戶
sudo passwd hadoop //設置密碼,可簡單設置爲hadoop
sudo adduser hadoop sudo //爲 hadoop 用戶增加管理員權限
更新apt
sudo apt-get update //更新apt
sudo apt-get install vim //安裝vim編輯器
安裝SSH、配置SSH無密碼登陸
sudo apt-get install openssh-server //安裝 SSH server
ssh localhost //登陸本機
SSH首次登陸時會有提示,先是輸入 yes 。然後按提示輸入密碼 hadoop,這樣就登陸到本機了。 但這樣登陸是需要每次輸入密碼的,我們需要配置成SSH無密碼登陸比較方便。 首先退出剛纔的
ssh,就回到了我們原先的終端窗口,然後利用 ssh-keygen 生成密鑰,並將密鑰加入到授權中:
exit # 退出剛纔的 ssh localhost
cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost
ssh-keygen -t rsa # 會有提示,都按回車就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授權
~的含義 在 Linux 系統中,~ 代表的是用戶的主文件夾,即 “/home/用戶名” 這個目錄,如你的用戶名爲 hadoop,則 ~
就代表 “/home/hadoop/”。
此時再用 ssh localhost
命令,無需輸入密碼就可以直接登陸了
安裝Java環境
sudo apt-get install default-jre default-jdk //確保聯網狀態下進行jdk安裝
vim ~/.bashrc //配置環境變量
在文件最前面添加如下單獨一行(注意,等號“=”前後不能有空格),然後保存退出:
export JAVA_HOME=/usr/lib/jvm/default-java
執行上述命令後,可以檢驗一下是否設置正確:
source ~/.bashrc # 使變量設置生效
echo $JAVA_HOME # 檢驗變量值
java -version
$JAVA_HOME/bin/java -version # 與直接執行java -version一樣
安裝 Hadoop 2
Hadoop 2 可以通過 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下載,一般選擇下載最新的穩定版本,即下載 “stable” 下的 hadoop-2.x.y.tar.gz 這個格式的文件,這是編譯好的,另一個包含 src 的則是 Hadoop 源代碼,需要進行編譯纔可使用。
如果是使用虛擬機方式安裝Ubuntu系統的用戶,請用虛擬機中的Ubuntu自帶firefox瀏覽器訪問本指南,再點擊下面的地址,才能把hadoop文件下載虛擬機ubuntu中。
將 Hadoop 安裝至 /usr/local/ 中:
sudo tar -zxf ~/下載/hadoop-2.7.7.tar.gz -C /usr/local # 解壓到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.7/ ./hadoop # 將文件夾名改爲hadoop
sudo chown -R hadoop ./hadoop # 修改文件權限
Hadoop 解壓後即可使用。輸入如下命令來檢查 Hadoop 是否可用,成功則會顯示 Hadoop 版本信息:
cd /usr/local/hadoop
./bin/hadoop version
Hadoop單機配置(非分佈式)
Hadoop 默認模式爲非分佈式模式(本地模式),無需進行其他配置即可運行。非分佈式即單 Java 進程,方便進行調試。
現在我們可以執行例子來感受下 Hadoop 的運行。Hadoop 附帶了豐富的例子(運行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar
可以看到所有例子),包括 wordcount、terasort、join、grep
等。
在此我們選擇運行 grep
例子,我們將 input
文件夾中的所有文件作爲輸入,篩選當中符合正則表達式 dfs[a-z.]+
的單詞並統計出現的次數,最後輸出結果到 output
文件夾中。
cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 將配置文件作爲輸入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/* # 查看運行結果
rm -r ./output //Hadoop 默認不會覆蓋結果文件,因此再次運行上面實例會提示出錯,需要先將 ./output 刪除。
Hadoop僞分佈式配置
Hadoop 可以在單節點上以僞分佈式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作爲 NameNode 也作爲 DataNode,同時,讀取的是 HDFS 中的文件。
Hadoop 的配置文件位於 /usr/local/hadoop/etc/hadoop/ 中,僞分佈式需要修改2個配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實現。
修改配置文件 core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
•hadoop.tmp.dir表示存放臨時數據的目錄,即包括NameNode的數據,也包括 DataNode的數據。該路徑任意指定,只要實際存在該文件夾即可
•name爲fs.defaultFS的值,表示hdfs路徑的邏輯名稱
修改配置文件 hdfs-site.xml:
configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
•dfs.replication表示副本的數量,僞分佈式要設置爲1
•dfs.namenode.name.dir表示本地磁盤目錄,是存儲fsimage文件的地方
•dfs.datanode.data.dir表示本地磁盤目錄,HDFS數據存放block的地方Hadoop 的運行方式是由配置文件決定的(運行 Hadoop 時會讀取配置文件),因此如果需要從僞分佈式模式切換回非分佈式模式,需要刪除 core-site.xml 中的配置項。
配置完成後,執行 NameNode 的格式化:
cd /usr/local/hadoop
./bin/hdfs namenode -format //只需格式化一次,後續無需再格式化,以免出錯
成功的話,會看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若爲 “Exitting with status 1” 則是出錯
接着開啓 NameNode 和 DataNode 守護進程。
cd /usr/local/hadoop
./sbin/start-dfs.sh #start-dfs.sh是個完整的可執行文件,中間沒有空格
若出現如下SSH提示,輸入yes即可。
啓動 Hadoop 時若提示 Could not resolve hostname
這個並不是 ssh 的問題,可通過設置 Hadoop 環境變量來解決:
vi ~/.bashrc
//增加如下兩行內容(設置過程與 JAVA_HOME 變量一樣,其中 HADOOP_HOME 爲 Hadoop 的安裝目錄):
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
保存後,務必執行 source ~/.bashrc
使變量設置生效,然後再次執行 ./sbin/start-dfs.sh
啓動 Hadoop。
啓動完成後,可以通過命令 jps
來判斷是否成功啓動,若成功啓動則會列出如下進程: “NameNode”、”DataNode” 和 “SecondaryNameNod
e”(如果 SecondaryNameNode 沒有啓動,請運行 sbin/stop-dfs.sh
關閉進程,然後再次嘗試啓動嘗試)。如果沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查之前步驟,或通過查看啓動日誌排查原因。
關於三種Shell命令方式的區別:
- hadoop fs
- hadoop dfs
- hdfs dfs
•hadoop fs適用於任何不同的文件系統,比如本地文件系統和HDFS文件系統
•hadoop dfs只能適用於HDFS文件系統
•hdfs dfs跟hadoop dfs的命令作用一樣,也只能適用於HDFS文件系統
(6)Haoop集羣的部署與使用
-
Hadoop框架中最核心的設計是爲海量數據提供存儲的HDFS和對數據進行計算的MapReduce
-
MapReduce的作業主要包括:(1)從磁盤或從網絡讀取數據,即IO密集工作;(2)計算數據,即CPU密集工作
-
Hadoop集羣的整體性能取決於CPU、內存、網絡以及存儲之間的性能平衡。因此運 營團隊在選擇機器配置時要針對不同的工作節點選擇合適硬件類型 。
-
一個基本的Hadoop集羣中的節點主要有
NameNode:負責協調集羣中的數據存儲
DataNode:存儲被拆分的數據塊
JobTracker:協調數據計算任務
TaskTracker:負責執行由JobTracker指派的任務
SecondaryNameNode:幫助NameNode -
後續關於Hadoop的集羣搭建可以參考以下
在Ubuntu下搭建Hadoop集羣
在CentOS下搭建Hadoop集羣