hadoop集群环境搭建
?參考文章:
-
https://www.linuxidc.com/Linux/2016-02/128149.htm
-
https://blog.csdn.net/circyo/article/details/46724335
前言
本教程是使用編譯hadoop的方式進行安裝,原因是下載的hadoop是32位,安裝完后會有問題。?
編譯方法:http://www.cnblogs.com/champaign/p/8952533.html
?1、集群部署介紹
1.1?Hadoop簡介
Hadoop是Apache軟件基金會旗下的一個開源分布式計算平臺。以Hadoop分布式文件系統HDFS(Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的開源實現)為核心的Hadoop為用戶提供了系統底層細節透明的分布式基礎架構。
對于Hadoop的集群來講,可以分成兩大類角色:Master和Salve。一個HDFS集群是由一個NameNode和若干個DataNode組成的。其中NameNode作為主服務器,管理文件系統的命名空間和客戶端對文件系統的訪問操作;集群中的DataNode管理存儲的數據。MapReduce框架是由一個單獨運行在主節點上的JobTracker和運行在每個從節點的TaskTracker共同組成的。主節點負責調度構成一個作業的所有任 務,這些任務分布在不同的從節點上。主節點監控它們的執行情況,并且重新執行之前的失敗任務;從節點僅負責由主節點指派的任務。當一個Job被提交時,JobTracker接收到提交作業和配置信息之后,就會將配置信息等分發給從節點,同時調度任務并監控TaskTracker的執行。
從上面的介紹可以看出,HDFS和MapReduce共同組成了Hadoop分布式系統體系結構的核心。HDFS在集群上實現分布式文件系統,MapReduce在集群上實現了分布式計算和任務處理。HDFS在MapReduce任務處理過程中提供了文件操作和存儲等支持,MapReduce在HDFS的基礎上實現了任務的分發、跟蹤、執行等工作,并收集結果,二者相互作用,完成了Hadoop分布式集群的主要任務。
1.2?環境說明
準備三臺服務器:
| IP | 用途 | 操作系統 | 主機名 |
| 172.18.29.151 | 主 | Centos 6.8 | master.hadoopo |
| 172.18.29.152 | 從1 | Centos 6.8 | slave1.hadoop |
| 172.18.29.153 | 從2 | Centos 6.8 | slave2.hadoop |
?
?
?
在三臺服務器中創建相同賬號:hadoop? 密碼三臺也一要致,最好不要與賬號相同
1.3 環境配置
修改三臺服務器的hosts文件:
vi /etc/hosts 新增以下內容 172.18.29.151 master.hadoop 172.18.29.152 slave1.hadoop 172.18.29.153 slave2.hadoop可以使用 ping 命令測試三臺機器的連通性
1.4 所需軟件
(1)JDK軟件
? ??下載地址:http://www.Oracle.com/technetwork/java/javase/index.html
(2)Hadoop軟件
? ? 使用前面編譯生成的安裝包
2、SSH無密碼驗證配置
如果你的Linux沒有安裝SSH,請首先安裝SSH
yum -y install openssh-server2.1 SSH基本原理和用法
1)SSH基本原理
? ??SSH之所以能夠保證安全,原因在于它采用了公鑰加密。過程如下:
(1)遠程主機收到用戶的登錄請求,把自己的公鑰發給用戶。
(2)用戶使用這個公鑰,將登錄密碼加密后,發送回來。
(3)遠程主機用自己的私鑰,解密登錄密碼,如果密碼正確,就同意用戶登錄。
2)SSH基本用法
? ??假如用戶名為java,登錄遠程主機名為linux,如下命令即可:
? ??$ ssh java@linux
? ??SSH的默認端口是22,也就是說,你的登錄請求會送進遠程主機的22端口。使用p參數,可以修改這個端口,例如修改為88端口,命令如下:
? ??$ ssh -p 88 java@linux
? ??注意:如果出現錯誤提示:ssh: Could not resolve hostname linux: Name or service not known,則是因為linux主機未添加進本主機的Name Service中,故不能識別,需要在/etc/hosts里添加進該主機及對應的IP即可:
? ??linux? ??192.168.1.107
2.2配置Master無密碼登錄所有Salve
1)SSH無密碼原理
Master(NameNode | JobTracker)作為客戶端,要實現無密碼公鑰認證,連接到服務器Salve(DataNode | Tasktracker)上時,需要在Master上生成一個密鑰對,包括一個公鑰和一個私鑰,而后將公鑰復制到所有的Slave上。當Master通過SSH連接Salve時,Salve就會生成一個隨機數并用Master的公鑰對隨機數進行加密,并發送給Master。Master收到加密數之后再用私鑰解密,并將解密數回傳給Slave,Slave確認解密數無誤之后就允許Master進行連接了。這就是一個公鑰認證過程,其間不需要用戶手工輸入密碼。
2)Master機器上設置無密碼登錄
a. Master節點利用ssh-keygen命令生成一個無密碼密鑰對。
首先切換到hadoop用戶,在Master節點上執行以下命令:
[root@SVR-29-151 ~]# su hadoop [hadoop@SVR-29-151 root]$ ssh-keygen -t rsa運行后詢問其保存路徑時直接回車采用默認路徑。生成的密鑰對:id_rsa(私鑰)和id_rsa.pub(公鑰),默認存儲在"/用戶名/.ssh"目錄下。
?b.?接著在Master節點上做如下配置,把id_rsa.pub追加到授權的key里面去。
[hadoop@SVR-29-151 root]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys查看下authorized_keys的權限,如果權限不對則利用如下命令設置該文件的權限:
[hadoop@SVR-29-151 root]$ cd ~/.ssh [hadoop@SVR-29-151 .ssh]$ ll[hadoop@SVR-29-151 .ssh]$ chmod 600?authorized_keys
c.?用root用戶登錄修改SSH配置文件"/etc/ssh/sshd_config"的下列內容。
檢查下面幾行前面”#”注釋是否取消掉:
RSAAuthentication yes #?啟用?RSA?認證
PubkeyAuthentication yes #?啟用公鑰私鑰配對認證方式
AuthorizedKeysFile??%h/.ssh/authorized_keys #?公鑰文件路徑
設置完之后記得重啟SSH服務,才能使剛才設置有效。
[root@SVR-29-151 ~]# service sshd restartd.?用root用戶登錄修改SSH配置文件"/etc/ssh/ssh_config"的下列內容(由于我的系統環境中ssh 默認端口必須使用 62222,如沒有修改默認端口此步驟可以略過)。
將port選項的值修改為下圖
同樣設置完之后記得重啟SSH服務,才能使剛才設置有效。
[root@SVR-29-151 ~]# service sshd restarte.切換到hadoop用戶下,使用ssh-copy-id命令將公鑰傳送到遠程主機上(這里以Slave1.Hadoop為例)。
[root@SVR-29-151 ~]# su hadoop [hadoop@SVR-29-151 root]$ ssh-copy-id hadoop@slave1.hadoop?
然后測試是否無密碼登錄其它機器成功
[hadoop@SVR-29-151 root]$ ssh slave1.hadoop如圖所示證明成功。
?到此為止,我們經過5步已經實現了從"Master.Hadoop"到"Slave1.Hadoop"SSH無密碼登錄,下面就是重復上面的 步驟e 把 Slave2.Hadoop服務器進行配置。這樣,我們就完成了"配置Master無密碼登錄所有的Slave服務器"。
?
3、Java環境安裝
?所有的機器上都要安裝JDK,現在就先在Master服務器安裝,然后其他服務器按照步驟重復進行即可。安裝JDK以及配置環境變量,需要以"root"的身份進行。
3.1?安裝JDK
首先用root身份登錄"Master.Hadoop"后將jdk復制到"/usr/local/src"文件夾中,然后解壓即可。查看"/usr/local/src"下面會發現多了一個名為"jdk-7u25-linux-i586"文件夾,說明我們的JDK安裝結束,進入下一個"配置環境變量"環節。
然后將jdk文件夾移動到”/usr/local/“目錄下。
3.2?配置環境變量
(1)編輯"/etc/profile"文件
?編輯"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"內容如下:
# set java environment export JAVA_HOME=/usr/local/jdk1.8.0_171/ export JRE_HOME=/usr/local/jdk1.8.0_171/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin(2)使配置生效
保存并退出,執行下面命令使其配置立即生效。
source /etc/profile?或?. /etc/profile
?
3.3?驗證安裝成功
配置完畢并生效后,用下面命令判斷是否成功。
java -version
從上圖中得知,我們確定JDK已經安裝成功
3.4?安裝剩余機器
在其它服務器重復以上步驟
4、Hadoop集群安裝(本例中的版本為:3.0.1)
4.1?安裝hadoop
?(1) 安裝軟件
?首先用root用戶登錄"Master.Hadoop"機器,將下載的"hadoop-3.0.1.tar.gz"復制到/usr/local/src目錄下。然后進入/usr/local/src目錄下,用下面命令把文件解壓,并將其重命名為"hadoop",把該文件夾的讀權限分配給普通用戶hadoop
cd /usr/local/src tar –zxvf hadoop-3.0.1.tar.gz mv hadoop-3.0.1 ../hadoop cd .. chown –R hadoop:hadoop hadoop? (2) 創建tmp文件夾.
?最后在"/usr/local/hadoop"下面創建tmp文件夾.
? (3) 配置環境變量
并把Hadoop的安裝路徑添加到"/etc/profile"中,修改"/etc/profile"文件,將以下語句添加到末尾,并使其生效(. /etc/profile):
# set hadoop path export HADOOP_INSTALL=/usr/local/hadoop ?export PATH=${HADOOP_INSTALL}/bin:${HADOOP_INSTALL}/sbin:${PATH} ?
export HADOOP_MAPRED_HOME=${HADOOP_INSTALL} ?
export HADOOP_COMMON_HOME=${HADOOP_INSTALL} ?
export HADOOP_HDFS_HOME=${HADOOP_INSTALL} ?
export YARN_HOME=${HADOOP_INSTALLL} ?
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_INSTALL}/lib/natvie?? ?
export HADOOP_OPTS="-Djava.library.path=${HADOOP_INSTALL}/lib:${HADOOP_INSTALL}/lib/native"
?(4)重啟”/etc/profile”
source /etc/profile?(5)配置salve服務器
首先在slave1.hadoop和slave2.hadoop的/usr/local中創建目錄hadoop,然后將它的用戶和組改為hadoop
[root@SVR-29-152 local]# mkdir hadoop [root@SVR-29-152 local]# chown hadoop:hadoop hadoop然后重復前面的(3)、(4)步驟
4.2?配置hadoop
我們先在master.hadoop中進行配置,配置完成后再將hadoop復制到slave1和slave2中。
?(1)設置hadoop-env.sh和yarn-env.sh中的java環境變量
cd /usr/local/hadoop/etc/hadoop/
vi hadoop-env.sh// 修改JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_171(2)配置core-site.xml文件
vi core-site.xml// 修改文件內容為以下 <configuration><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop/tmp</value><description>A base for other temporary directories.</description></property><property><name>fs.default.name</name><value>hdfs://master.hadoop:9000</value></property> </configuration>?
備注:如沒有配置hadoop.tmp.dir參數,此時系統默認的臨時目錄為:/tmp/hadoo-hadoop。而這個目錄在每次重啟后都會被刪掉,必須重新執行format才行,否則會出錯。
(3)配置hdfs-site.xml文件
vi hdfs-site.xml// 修改文件內容為以下<configuration>
?? ?<property>
?? ??? ?<name>dfs.namenode.name.dir</name>
?? ??? ?<value>file:///usr/local/hadoop/dfs/name</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>dfs.datanode.data.dir</name>
?? ??? ?<value>file:///usr/local/hadoop/dfs/data</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>dfs.replication</name>
?? ??? ?<value>1</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>dfs.nameservices</name>
?? ??? ?<value>hadoop-cluster1</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>dfs.namenode.secondary.http-address</name>
?? ??? ?<value>master.hadoop:50090</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>dfs.webhdfs.enabled</name>
?? ??? ?<value>true</value>
?? ?</property>
</configuration>
?
?
(4)配置mapred-site.xml文件
修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。
?vi mapred-site.xml// 修改文件為以下內容
<configuration>
?? ?<property>
?? ??? ?<name>mapreduce.framework.name</name>
?? ??? ?<value>yarn</value>
?? ??? ?<final>true</final>
?? ?</property>
?? ?<property>
?? ??? ?<name>mapreduce.jobtracker.http.address</name>
?? ??? ?<value>master.hadoop:50030</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>mapreduce.jobhistory.address</name>
?? ??? ?<value>master.hadoop:10020</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>mapreduce.jobhistory.webapp.address</name>
?? ??? ?<value>master.hadoop:19888</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>mapred.job.tracker</name>
?? ??? ?<value>http://master.hadoop:9001</value>
?? ?</property>
</configuration>???
?(5)配置yarn-site.xml文件
vi yarn-site.xml// 修改文件內容為以下 <configuration>?? ?<property>
?? ??? ?<name>yarn.resourcemanager.hostname</name>
?? ??? ?<value>master.hadoop</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>yarn.nodemanager.aux-services</name>
?? ??? ?<value>mapreduce_shuffle</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.address</name>
?? ??? ?<value>master.hadoop:8032</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.scheduler.address</name>
?? ??? ?<value>master.hadoop:8030</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.resource-tracker.address</name>
?? ??? ?<value>master.hadoop:8031</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.admin.address</name>
?? ??? ?<value>master.hadoop:8033</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.webapp.address</name>
?? ??? ?<value>master.hadoop:8088</value>
?? ?</property>
</configuration>
?4.3 配置Hadoop的集群
(1) 將Master中配置好的hadoop傳入兩個Slave中
注意:使用hadoop賬號scp -r /usr/local/hadoop? hadoop@slave1.hadoop:/usr/local/
scp -r /usr/local/hadoop? hadoop@slave2.hadoop:/usr/local/
?
(2) 修改Master主機上的workers文件
[hadoop@SVR-29-151 hadoop]$cd /usr/local/hadoop/etc/hadoop [hadoop@SVR-29-151 hadoop]$ vi workers// 將以下內容寫入 slave1.hadoop slave2.hadoop?
(3) 格式化HDFS文件系統
// 在Master主機上輸入以下指令(使用hadoop用戶)
?
?
(4)啟動hadoop
[hadoop@SVR-29-151 hadoop]$ start-dfs.sh? 結果如下圖:
[hadoop@SVR-29-151 hadoop]$ start-yarn.sh?
(5) 驗證hadoop啟動是否成功
[hadoop@SVR-29-151 hadoop]$ jps?master中的結果:
?
slave中的結果:
?web管理頁面:http://172.18.29.151:8088/cluster
轉載于:https://www.cnblogs.com/champaign/p/7645961.html
總結
以上是生活随笔為你收集整理的hadoop集群环境搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis java使用
- 下一篇: ssl初一组周六模拟赛【2018.3.3