hadoop搭建具體步驟——第二章(完全分散式)
基礎知識:
Hadoop生態系統主要包括:Hive、HBase、Pig、Sqoop、Flume、ZooKeeper、Mahout、Spark、Storm、Shark、Phoenix、Tez、Ambari,每個項目的簡介如下:
- Hadoop生態系統簡介
- Hive:用於Hadoop的一個數據倉庫系統,它提供了類似於SQL的查詢語言,通過使用該語言,可以方便地進行數據匯總,特定查詢以及分析存放在Hadoop兼容文件系統中的大數據。
- Hbase:一種分布的、可伸縮的、大數據存儲庫,支持隨機、實時讀/寫訪問。
- Pig:分析大數據集的一個平台,該平台由一種表達數據分析程序的高級語言和對這些程序進行評估的基礎設施一起組成。
- Sqoop:為高效傳輸批量數據而設計的一種工具,其用於Apache Hadoop和結構化數據存儲庫如關係資料庫之間的數據傳輸。
- Flume:一種分散式的、可靠的、可用的服務,其用於高效搜集、匯總、移動大量日誌數據。
- ZooKeeper:一種集中服務,其用於維護配置信息,命名,提供分散式同步,以及提供分組服務。
- Mahout:一種基於Hadoop的機器學習和數據挖掘的分散式計算框架演算法集,實現了多種MapReduce模式的數據挖掘演算法。
- Spark:一個開源的數據分析集群計算框架,最初由加州大學伯克利分校AMPLab開發,建立於HDFS之上。Spark與Hadoop一樣,用於構建大規模、低延時的數據分析應用。Spark採用Scala語言實現,使用Scala作為應用框架。
- Storm:一個分散式的、容錯的實時計算系統,由BackType開發,後被Twitter收購。Storm屬於流處理平台,多用於實時計算並更新資料庫。Storm也可被 用於「連續計算」(continuous computation),對數據流做連續查詢,在計算時就將結果以流的形式輸出給用戶。它還可用於「分散式 RPC」,以並行的方式運行大型的運算。
- Shark:即Hive on Spark,一個專為Spark打造的大規模數據倉庫系統,兼容Apache Hive。無需修改現有的數據或者查詢,就可以用100倍 的速度執行Hive QL。Shark支持Hive查詢語言、元存儲、序列化格式及自定義函數,與現有Hive部署無縫集成,是一個更快、更強大的替代方 案。
- Phoenix:一個 構建在Apache HBase之上的一個SQL中間層,完全使用Java編寫,提供了一個客戶端可嵌入的JDBC驅動。Phoenix查詢引擎會將 SQL查詢轉換為一個或多個HBase scan,並編排執行以生成標準的JDBC結果集。直接使用HBase API、協同處理器與自定義過濾器,對於 簡單查詢來說,其性能量級是毫秒,對於百萬級別的行數來說,其性能量級是秒。
- Tez:一個基於Hadoop YARN之上的DAG(有向無環圖,Directed Acyclic Graph)計算框架。它把Map/Reduce過程拆分成若干個 子過程,同時可以把多個Map/Reduce任務組合成一個較大的DAG任務,減少了Map/Reduce之間的文件存儲。同時合理組合其子過程,減少任 務的運行時間。
- Avr:是一個數據序列化系統。它提供了豐富的數據結構類型,快讀可壓縮的二進位數據格式,存儲持久數據的文件容器,遠程過程調用等。
實驗拓撲:
- 虛擬機網卡採用NAT模式
2.1、準備
新建虛擬機作為master節點(控制節點),安裝完vim、jdk,然後關機克隆鏡像出slave1與slave2節點,然後進行其餘配置。
1.網路配置
1)修改hosts(所有節點相同內容)
配置後,後面對於IP的操作都可以用主機名替換。
相關命令:
- sudo vim /etc/hosts
2)修改hostname(所有節點)
用於配置主機名(master、slave1、slave2)。
相關命令:
- sudo vim /etc/hostname
3)修改interfaces(所有節點)
配置相關ip、子網掩碼、網關等。
master相關命令與內容:
- vim /etc/network/interfaces
- ------------------------------內 容------------------------------
- # interfaces(6) file used by ifup(8) and ifdown(8)
- # The loopback network interface
- auto lo
- iface lo inet loopback
- # The primary network interface
- auto ens33 //ens33為網卡名字
- iface ens33 inet static //靜態配置
- address 10.0.0.123
- netmark 255.255.255.0
- gateway 10.0.0.2
- ------------------------------內 容------------------------------
- sudo /etc/init.d/networking restart //如果這樣啟動沒成功,可用下面的命令執行
- sudo systemctl restart network-manager.service
slave1相關命令與內容:
- vim /etc/network/interfaces
- ------------------------------內 容------------------------------
- # interfaces(6)file used by ifup(8) and ifdown(8)
- # The loopbacknetwork interface
- auto lo
- iface lo inetloopback
- # The primarynetwork interface
- auto ens33
- iface ens33 inetstatic
- address 10.0.0.124
- netmark255.255.255.0
- gateway10.0.0.2
- ------------------------------內 容------------------------------
- sudo /etc/init.d/networking restart //如果這樣啟動沒成功,可用下面的命令執行
- sudo systemctl restart network-manager.service
slave2相關命令與內容:
- vim /etc/network/interfaces
- ------------------------------內 容------------------------------
- # interfaces(6)file used by ifup(8) and ifdown(8)
- # The loopbacknetwork interface
- auto lo
- iface lo inetloopback
- # The primarynetwork interface
- auto ens33
- iface ens33 inetstatic
- address 10.0.0.125
- netmark255.255.255.0
- gateway10.0.0.2
- ------------------------------內 容------------------------------
- sudo /etc/init.d/networking restart //如果這樣啟動沒成功,可用下面的命令執行
- sudo systemctl restart network-manager.service
4)修改DNS
相關命令與內容:
- sudo vim /etc/resolvconf/resolv.conf.d/base
- ------------------------------內 容------------------------------
- nameserver 114.114.114.114 //在裡面添加DNS
- ------------------------------內 容------------------------------
- resolvconf -u //保存修改
- sudo /etc/init.d/networking restart //重啟網卡
注意:如果這裡只是在/etc/resolv.conf文件中修改nameserver,在重啟機器後配置會被還原,設置/etc/resolvconf/resolv.conf.d/base里的內容則可一勞永逸。
2.ssh相關
方法一:
master節點相關命令:
- ssh master
- exit
- ssh slave1
- exit
- ssh slave2
- exit
- cd ~/.ssh
ssh-keygen -t rsa
- cat ./id_rsa.pub >> ./authorized_keys
- tar -czvf aaa * //打包發送使使各點內容同步
- scp aaa hadoop@Slave1:/home/hadoop
- scp aaa hadoop@Slave2:/home/hadoop
slave兩節點相關命令:
- mkdir ~/.ssh //如果不存在該文件夾需先創建,若已存在則忽略
- mv aaa ~/.ssh
- cd ~/.ssh
- tar -xzvf aaa
注意:經過以上操作,節點間ssh無需密碼。
方法二:
master節點相關命令:
- cd .ssh
- ssh-keygen
- ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@slave1
- ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@slave2
注意:經過以上操作,實現了master無密碼ssh其他節點。
注意:ssh的完整寫法是ssh 用戶@主機名,當不同機子上的用戶名字相同的時候,用戶名可以省略。
2.2、hadoop相關操作
因為每個節點的hadoop內容要同步於master節點,所以先完成master節點的hadoop配置內容,然後打包發送至個節點。
注意:以下操作均在控制節點
1. 安裝Hadoop
我們選擇將 Hadoop 安裝至 /usr/local/ 中。
相關命令:
- sudo tar -xvzf hadoop-2.6.0.tar.gz -C /usr/local/ //解壓到/usr/local中
- cd /usr/local/
- sudo mv hadoop-2.6.0 ./hadoop
- sudo chown -R hadoop ./hadoop //修改文件許可權
2.修改集群/分散式環境的配置文件
集群/分散式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5個配置文件,更多設置項可點擊查看官方說明,這裡僅設置了正常啟動所必須的設置項: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
感興趣的同學可以查看相關參數含義: hadoop三個配置文件的參數含義說明
1)文件 slaves(用於master節點關聯數據節點),將作為DataNode 的主機名寫入該文件,每行一個,默認為 localhost,所以在偽分散式配置時,節點即作為 NameNode 也作為 DataNode。分散式配置可以保留 localhost,也可以刪掉,讓 Master 節點僅作為 NameNode 使用。
注意:hadoop 3.X下沒slaves文件,而是workers。
2)修改hadoop-env.sh
確定jdk位置
3)修改core-site.xml
相關內容:
- <configuration>
- <property>
- <name>fs.defaultFS</name> //指定名位元組點
- <value>hdfs://master:9000</value> //master即為控制節點的主機名,可用IP替換
- 即10.0.0.123
- </property>
- <property>
- <name>hadoop.tmp.dir</name> //hadoop.tmp.dir 是hadoop文件系統依賴的基礎配置,很多路徑都依賴它。如果hdfs-site.xml中不配 置namenode和datanode的存放位置,默認就放在這個路徑中
- <value>/usr/local/hadoop/tmp</value>
- <description>Abase forother temporary directories.</description>
- </property>
- </configuration>
4)修改 hdfs-site.xml,dfs.replication 一般設為 3
相關內容:
- <configuration>
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>master:50090</value>
- </property>
- <property>
- <name>dfs.replication</name> //備份數據塊
- <value>3</value>
- </property>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>/usr/local/hadoop/tmp/dfs/name</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name> //數據節點中的數據放置位置
- <value>/usr/local/hadoop/tmp/dfs/data</value>
- </property>
- <property>
- <name>dfs.permissions</name>
- <value>false</value>
- </property>
- </configuration>
5)修改mapred-site.xml(可能需要先重命名,默認文件名為 mapred-site.xml.template),然後進行配置修改。
相關內容:
- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>master:10020</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.webapp.address</name>
- <value>master:19888</value>
- </property>
- </configuration>
6)修改yarn-site.xml
相關內容:
- <configuration>
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>master</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- </configuration>
3.壓縮與傳包
相關命令:
- cd /usr/local
- sudo rm -r./hadoop/tmp # 刪除 Hadoop 臨時文件
- sudo rm -r./hadoop/logs/* # 刪除日誌文件
- sudo tar -cvzf~/hadoop.master.tar.gz ./hadoop # 先壓縮再複製
- cd ~
- scp./hadoop.master.tar.gz Slave1:/home/hadoop
- scp ./hadoop.master.tar.gz Slave2:/home/hadoop
4.slave節點解包(數據節點)
相關命令:
- sudo rm -r/usr/local/hadoop # 刪掉舊的(如果存在)
- sudo tar -xvzf ~/hadoop.master.tar.gz -C /usr/local
- sudochown -R hadoop /usr/local/hadoop
5.修改配置環境(所有節點)
相關命令與內容:
- sudo vim ~/.bashrc
- export HADOOP_HOME=/usr/local/hadoop
- export HADOOP_INSTALL=$HADOOP_HOME
- export HADOOP_MAPRED_HOME=$HADOOP_HOME
- export HADOOP_COMMON_HOME=$HADOOP_HOME
- export HADOOP_HDFS_HOME=$HADOOP_HOME
- export YARN_HOME=$HADOOP_HOME
- export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
- export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
注意:修改完記得source ~/.bashrc
6.格式化與啟動(建議初學者先備份再做)
注意:以下操作在控制節點
相關命令:
- hdfs namenode -format //初始化(只能執行一次),用來建立hdfs結構來存元數據。
- start-dfs.sh
- start-yarn.sh
- mr-jobhistory-daemon.shstart historyserver
注意:通過命令 jps 可以查看各個節點所啟動的進程。正確的話,在 Master 節點上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 進程。在 子節點上有DataNode、NodeManager、Jps 進程。
報錯:hadoop checknative -a報以下錯誤:
WARN util.NativeCodeLoader: Unable to loadnative-hadoop library for your platform... using builtin-java classes whereapplicable
解決:在hadoop-env.sh中 修改HADOOP_OPTS:
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib:$HADOOP_PREFIX/lib/native"
7.web訪問
成功啟動後,可以訪問 Web 界面 http://IP地址:50070 查看 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件。
啟動 YARN 之後,運行實例的方法還是一樣的,僅僅是資源管理方式、任務調度不同。觀察日誌信息可以發現,不啟用 YARN 時,是 「mapred.LocalJobRunner」 在跑任務,啟用 YARN 之後,是 「mapred.YARNRunner」 在跑任務。啟動 YARN 有個好處是可以通過 Web 界面查看任務的運行情況:http://IP地址:8088/cluster,如下圖所示。
推薦閱讀:
※大數據技術之九:HDFS概述
※大數據實驗手冊怎麼自己搭環境?
※從頭學習大數據培訓課程 hadoop,mapreducer 分散式計算框架(三) Windows 開發 wordcount
※下載prebuilt版的Spark後,必須運行sbt/sbt assembly 後才能使用嗎?
※Azkaban任務流編寫