對Hadoop認識與安裝

對Hadoop認識與安裝

在這裏插入圖片描述

1.簡介
HadoopApache軟件基金會旗下的一個開源分佈式計算平臺,爲用戶提供了系統 底層細節透明的分佈式基礎架構
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中的NDFSMapReduce開始獨立出來,成爲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.x0.22.x則增加 了NameNode HA等新的重大特性
•第二代Hadoop包含兩個版本,分別是0.23.x2.x,它們完全不同於 Hadoop 1.0,是一套全新的架構,均包含HDFS Federation和YARN兩 個系統,相比於0.23.x2.x增加了NameNode HAWire-compatibility 兩個重大特性
在這裏插入圖片描述
Hadoop的各種版本
• Apache Hadoop
• Hortonworks
• Cloudera(CDH:Cloudera Distribution Hadoop)
• MapR
• ……
選擇 Hadoop版本的考慮因素:
•是否開源(即是否免費)
•是否有穩定版
•是否經實踐檢驗

在這裏插入圖片描述

6.項目結構

Hadoop的項目結構不斷豐富發展,已經形成一個豐富的Hadoop生態系統
在這裏插入圖片描述
在這裏插入圖片描述

7.安裝與使用

(1)Linux的選擇:建議使用CentOSUbuntu
(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.xmlHadoop的配置文件是 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” 則是出錯
在這裏插入圖片描述

接着開啓 NameNodeDataNode 守護進程。

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” 和 “SecondaryNameNode”(如果 SecondaryNameNode 沒有啓動,請運行 sbin/stop-dfs.sh 關閉進程,然後再次嘗試啓動嘗試)。如果沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查之前步驟,或通過查看啓動日誌排查原因。

關於三種Shell命令方式的區別:

  1. hadoop fs
  2. hadoop dfs
  3. 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集羣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章