一、Hadoop集群環境搭建配置
1、前言
Hadoop的搭建分為三種形式:單機模式、偽分布模式、完全分布模式,只要掌握了完全分布模式,也就是集群模式的搭建,剩下的兩種模式自然而然就會用了,一般前兩種模式一般用在開發或測試環境下,Hadoop最大的優勢就是分布式集群計算,所以在生產環境下都是搭建的最后一種模式:完全分布模式。
2、硬件選擇
須知:
- 分布式環境中一個服務器就是一個節點
- 節點越多帶來的是集群性能的提升
- 一個Hadoop集群環境中,NameNode,SecondaryNameNode和DataNode是需要分配不同的節點上,也就需要三台服務器
- 在Hadoop運行作業完成時,History Server來記錄歷史程序的運行情況,需要獨立一台服務器
- 第一台:記錄所有的數據分布情況,運行進程:NameNode
第二台:備份所有數據分布情況,因為當前面的那台服務器宕機(日常所說的死機)時,可通過該服務器來恢復數據。所以,該服務器運行的程序就是:SecondaryNameNode
第三台:存儲實際數據,運行的進程就是;DataNode
第四台:記錄應用程序歷史的運行狀況。運行的程序就是:History Server。(可選)
所以說,至少三台。
3、集群環境各個服務配置
- 在Hadoop集群環境中,最重要的就是NameNode運行的服務器是整個集群的調度和協調工作,還有一個很重要的進程是資源管理(真正的協調整個集群中每個節點的運行),所以配置要高於其他節點。
4、軟件選擇
關於Hadoop集群環境軟件的選擇,無非就是圍繞這個幾個軟件產品去選擇:OS操作系統,Hadoop版本,JDK版本,Hive版本、MySQL版本等。
5、節點配置信息的分配
提前規划出四台服務器用來搭建Hadoop集群,然后分別為其分配了機器名稱、IP,IP需要設置為統一網段,可根據使用的情況,進行動態調整的。
另外說明:搭建了兩台Ubuntu的服務器來單獨安裝MySQLServer,搭建了一個主從模式,Ubuntu是一個界面友好的操作系統,這里和Hadoop集群分離的目的是因為Mysql數據庫是比較占內存資源的,所以我們單獨機器來安裝,當然,MySQL並不是Hadoop集群所需要的,兩者沒有必然的關系,這里搭建它的目的就為了后續安裝Hive來分析數據應用的,並且我們可以在這個機器里進行開發調試,當然Window平台也可以,畢竟我們使用Windows平台是最熟練的。(hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。)
二、Hadoop集群環境安裝
安裝前需明了:
- 將Hadoop集群中的主節點分配2GB內存,然后剩余的三個節點都是1GB配置。
- 所有的節點存儲都設置為50GB
1、CentOS安裝
- 首先需要在VMWare中創建一個新的計算機,然后指定CentOS的鏡像路徑和用戶名和密碼。
- 指定當前虛擬機操作系統的存儲大小(50GB)和內存大小(2GB)。
- 完成安裝
- 至此,我們已經成功的安裝上了CentOS操作系統,然后安裝的過程中順便創建了一個新用戶Hadoop,這個賬戶就是我們后面安裝Hadoop集群環境所使用的賬號。
- 我們登錄到CentOS操作系統,然后為了后續節點識別,要改計算機名。Master.Hadoop,然后重啟。(不知理解是否有誤)
- 切換到root用戶
- 編輯/etc/sysconfig/network文件:vi /etc/sysconfig/network
- 保存該文件,重啟計算機(reboot)
- 查看是否生效:hostname
- 設置固定IP(驗證我們當前虛擬機是否能上網,IP是否能成功配置。),然后配置Host文件(添加集群對應ip與節點名)。(還有要改橋接模式(B):直接連接物理網絡。現在用的是虛擬機,但是把它當成物理機一樣,也給插上網線,連接到本地的網絡中去。當然,如果選擇這種方式的前提是要保證局域網的網段和之前規划的IP是一致的,必須都是192.168.1.* 這種網段,這樣的目的就是宿主機和我們的虛擬機能夠直接通信,那就意味這主機能聯網,我們的虛擬機就能聯網。)
- 固定IP設置:首先配置DNS,對/etc/resolv.conf 文件進行修改或查看
- 配置固定IP地址:修改 /etc/sysconfig/network-scripts/ifcfg-eth0 文件
- 重啟網絡:/etc/init.d/network restart或service network restart
修改成功: - ping通網絡。
- 修改host文件
- 重啟服務器
- 固定IP設置:首先配置DNS,對/etc/resolv.conf 文件進行修改或查看
2、Hadoop安裝與配置
- 下載Hadoop安裝包,然后進入Hadoop集群的搭建工作。
把jdk和Hadoop包下載或上傳到/home/hadoop/Downloads/下
Hadoop環境的配置分為兩步:1、Java環境配置;2、Hadoop配置。因為Hadoop就是Java語言編寫的,所以一定要先配置好Java環境。- jdk的安裝與配置:
一般將安裝的程序存到/usr目錄下,所以創建Java目錄:mkdir /usr/java
,
更改權限chown hadoop:hadoop /usr/java/
,
查看ll /usr
更改系統的環境變量vim /etc/profile
添加腳本# set java environment export JAVA_HOME=/usr/java/jdk1.8.0_121 export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
cp -r jdk1.8.0_121 /usr/java/
查看版本:java -version
- Hadoop的安裝與基本配置:
與Jdk配置類似,--/usr目錄下,創建hadoop目錄mkdir /usr/hadoop
--拷貝解壓后的hadoop安裝包cp -r hadoop-2.6.4 /usr/hadoop
--賦權給Hadoop用戶chown hadoop:hadoop /usr/hadoop/
--查看確認ll /usr/
對幾個關鍵的文件進行配置:
轉到目錄:cd /usr/hadoop/hadoop-2.6.4/
配置第一個文件vim etc/hadoop/core-site.xml
<configuration> <!-- HDFS file path --> <!-- HDFS默認的連接地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://192.168.1.50:9000</value> </property> <!-- 流文件的配置大小,默認是4K太小了,這里將這個值改的大 --> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <!--生成臨時結果的配置路徑,需要創建目錄tmp--> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/hadoop/hadoop-2.6.4/tmp</value> <description>Abasefor other temporary directories.</description> </property> </configuration>
mkdir tmp
配置第二個文件vim etc/hadoop/hdfs-site.xml
<property> <name>dfs.namenode.secondary.http-address</name> <value>192.168.1.50:9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/hadoop/hadoop-2.6.4/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/hadoop/hadoop-2.6.4/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property>
創建目錄:mkdir dfs
、mkdir dfs/name
、mkdir dfs/data
配置第三個文件:cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
因為在這里Hadoop已經提供了一個模板,直復制創建,然后修改此文件:vim etc/hadoop/mapred-site.xml
<!-- 第一個就是制定當前Hadoop的並行運行計算架構,這里為yarn,第二個就是Job運行的歷史記錄Server,第三個就是歷史運行記錄的Web服務器。 --> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>192.168.1.50:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>192.168.1.50:19888</value> </property> </configuration>
vim etc/hadoop/yarn-site.xml
<!--后續的調優會一直圍繞這個文件進行--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>192.168.1.50:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>192.168.1.50:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>192.168.1.50:8035</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>192.168.1.50:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>192.168.1.50:8088</value> </property>
export JAVA_HOME=/usr/java/jdk1.8.0_73
vim etc/hadoop/hadoop-env.sh
vim etc/hadoop/yarn-env.sh
因為所有Hadoop用戶都有執行權限,所以:chown -R hadoop:hadoop /usr/hadoop/hadoop-2.6.4/
- jdk的安裝與配置:
3、啟動Hadoop
- 格式化文件,來啟動這個單節點的Hadoop集群
- Hadoop 分布式存儲系統的HDFS格式化,這個只能在初始化系統的時候用一次,一次就好了,要不執行一次數據就丟失一次。
bin/hadoop namenode -format
運行結果: - Hadoop 集群進行啟動驗證:啟動HDFS:
sbin/start-dfs.sh
然后查看jps進程:
然后,查看狀態bin/hadoop dfsadmin -report
或者直接打開瀏覽器直接打開瀏覽器查看:http://192.168.10.87:50070/dfshealth.html#tab-overview - Hadoop 集群啟動查看
啟動Hadoop集群,然后查看其狀態sbin/start-yarn.sh
用瀏覽器打開:http://192.168.10.87:8088/cluster
- Hadoop 分布式存儲系統的HDFS格式化,這個只能在初始化系統的時候用一次,一次就好了,要不執行一次數據就丟失一次。
三、Hadoop集群完全分布式壞境搭建
上一部分是單節點的安裝,工作已經完成了一半,下面進行的是完全分布式的環境搭建
為了減少配置時間,直接對上一節點進行克隆
節點基本信息:
總共需要5台服務器來使用,四台用來搭建Hadoop集群使用,另外一台(可選)作為MySQL等外圍管理Hadoop集群來使用。在開發的時候一般也是直接通過連接外圍的這台機器來管理Hadoop整個集群
1、VMWare克隆節點和配置
- 首先需要在VMWare中將之前創建的單實例的計算機進行克隆。
注意:在克隆過程中一定要選擇克隆一個完整的而不是創建鏈接克隆,也一定不要選擇現有的快照。 - 配置各個Slave節點的機器信息。
(1)主節點Master的CUP處理器設置成多路多核,這里設成4,其他節點設成1
(2)手動更改各個從節點的計算機名和Hosts文件(必須!)vim /etc/sysconfig/network
vim /etc/hosts
配置完之后,重啟完各個機器之后,確保各個節點之間可以ping 通(重點!!!)
2、節點SSH無密碼登錄配置
- 進行sshd的配置文件的修改,去掉默認注釋,開啟SSH驗證功能(以root用戶進行操作)
vim /etc/ssh/sshd_config
將上面的這三行數據的注釋“#”去掉進行,保存。這里記住了!所有的機器都要這么依次進行設置。RSAAuthentication是指開啟SSH驗證,PubkeyAuthetication是指可以通過公鑰進行驗證,AuthorizedkeysFile則指的的是公鑰存放的位置。 - 重啟該服務:
/sbin/service sshd restart
- 用本機驗證一下:
ssh localhost
這個時候會讓你輸入密碼,是因為沒有生成密鑰,下面進行設置- 加工生成證書公私鑰,分發到各個服務器(以Hadoop用戶操作)在Master節點上生成Hadoop用戶的公鑰,然后將這個公鑰分發給各個slave節點,然后這樣在Master機器上就可以用Hadoop無密碼登錄到各個salve機器上面了
ssh-keygen -t rsa -P ''
紅框勾出的路徑就是公鑰和私鑰生成的默認路徑
- 下一步就是將這個公鑰復制到各個slave節點中去,遠程文件的復制:
scp ~/.ssh/id_rsa.pub 遠程用戶名@遠程服務器IP:~/
復制的公鑰文件存在默認的路徑“/home/hadoop/.ssh”scp ~/.ssh/id_rsa.pub hadoop@192.168.1.51:~/
- 登錄salve01的機器將剛才生成的公鑰加入的本地的權限驗證組里面去
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
- 回到Master機器上面進行,ssh驗證
SSH <遠程IP && 域名>
在master機器上登錄slave01機器上實驗下,看是否還需要進行密碼輸入ssh slave01.hadoop
從Master機器上面無密碼的登錄到Slave01機器上面,那么說明剛才的配置生效了。 - 參照上面的步驟將各個Slave節點配置完成
- 注意:在Master生成密鑰只需要生成一次就可以了,不要再次生成!因為每次生成以為着所有的節點都需要重新配置。
- 參照上面的步驟將各個Slave節點SSH到Master機器(保證各個Slave節點能夠無密碼登錄Master機器,各個Slave子節點干完Master分配的任務之后,需要有權限反饋至Master)
注意:上面的步驟要一定完成驗證,要不以后的Hadoop操作會很出現各種詭異的問題!!
3、Hadoop集群配置
- 配置Hadoop集群配置
將這個單節點的配置成一個真正的分布式集群,充分利用我們剛才搭建的幾台Server進行性能的最大發揮 - 首先進行slaves文件的配置,指定該集群的各個Slave節點的位置(以hadoop用戶進行操作)(只需要在Master的機器上面進行就可以了)
vim /usr/hadoop/hadoop-2.6.4/etc/hadoop/slaves
將各個Slave的IP或者機器名寫入 - 更改hdfs-site.xml文件中的dfs.replication屬性值為3(因為有另外3台虛擬機,記住:只能是奇數!)
vim /usr/hadoop/hadoop-2.6.4/etc/hadoop/hdfs-site.xml
(這里需要注意的是,所有的機器都要這樣配置。)
- 啟動Hadoop集群,驗證是否成功
先來執行一個HDFS格式的命令(改成完全分布式的集群,所以這里需要重新格式)bin/hadoop namenode -format
- 驗證一下整個集群的HDFS是否正常可用,啟動整個集群的HDFS,在Master機器上面,用hadoop用戶操作
start-dfs.sh
通過瀏覽器來查看整個集群的HDFS狀態,地址為:http://192.168.1.50:50070 - 驗證一下整個集群的YARN分布式計算框架是否正常可用,啟動Yarn
start-yarn.sh
通過瀏覽器來查看整個集群的Hadoop集群狀態,地址為:http://192.168.1.50:8088/
可見當前的Hadoop集群已經存在四個正在運行的節點。