參考文章:html
https://www.linuxidc.com/Linux/2016-02/128149.htmjava
https://blog.csdn.net/circyo/article/details/46724335node
本教程是使用編譯hadoop的方式進行安裝,緣由是下載的hadoop是32位,安裝完後會有問題。 linux
編譯方法:http://www.cnblogs.com/champaign/p/8952533.htmlweb
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分佈式集羣的主要任務。架構
準備三臺服務器:併發
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 密碼三臺也一要致,最好不要與帳號相同app
修改三臺服務器的hosts文件:
vi /etc/hosts 新增如下內容 172.18.29.151 master.hadoop 172.18.29.152 slave1.hadoop 172.18.29.153 slave2.hadoop
可使用 ping 命令測試三臺機器的連通性
(1)JDK軟件
下載地址:http://www.Oracle.com/technetwork/java/javase/index.html
(2)Hadoop軟件
使用前面編譯生成的安裝包
若是你的Linux沒有安裝SSH,請首先安裝SSH
yum -y install openssh-server
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
Master(NameNode | JobTracker)做爲客戶端,要實現無密碼公鑰認證,鏈接到服務器Salve(DataNode | Tasktracker)上時,須要在Master上生成一個密鑰對,包括一個公鑰和一個私鑰,然後將公鑰複製到全部的Slave上。當Master經過SSH鏈接Salve時,Salve就會生成一個隨機數並用Master的公鑰對隨機數進行加密,併發送給Master。Master收到加密數以後再用私鑰解密,並將解密數回傳給Slave,Slave確認解密數無誤以後就容許Master進行鏈接了。這就是一個公鑰認證過程,其間不須要用戶手工輸入密碼。
首先切換到hadoop用戶,在Master節點上執行如下命令:
[root@SVR-29-151 ~]# su hadoop [hadoop@SVR-29-151 root]$ ssh-keygen -t rsa
運行後詢問其保存路徑時直接回車採用默認路徑。生成的密鑰對:id_rsa(私鑰)和id_rsa.pub(公鑰),默認存儲在"/用戶名/.ssh"目錄下。
[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
檢查下面幾行前面」#」註釋是否取消掉:
RSAAuthentication yes # 啓用 RSA 認證
PubkeyAuthentication yes # 啓用公鑰私鑰配對認證方式
AuthorizedKeysFile %h/.ssh/authorized_keys # 公鑰文件路徑
設置完以後記得重啓SSH服務,才能使剛纔設置有效。
[root@SVR-29-151 ~]# service sshd restart
將port選項的值修改成下圖
一樣設置完以後記得重啓SSH服務,才能使剛纔設置有效。
[root@SVR-29-151 ~]# service sshd restart
[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服務器"。
全部的機器上都要安裝JDK,如今就先在Master服務器安裝,而後其餘服務器按照步驟重複進行便可。安裝JDK以及配置環境變量,須要以"root"的身份進行。
首先用root身份登陸"Master.Hadoop"後將jdk複製到"/usr/local/src"文件夾中,而後解壓便可。查看"/usr/local/src"下面會發現多了一個名爲"jdk-7u25-linux-i586"文件夾,說明咱們的JDK安裝結束,進入下一個"配置環境變量"環節。
而後將jdk文件夾移動到」/usr/local/「目錄下。
編輯"/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
保存並退出,執行下面命令使其配置當即生效。
source /etc/profile 或 . /etc/profile
配置完畢並生效後,用下面命令判斷是否成功。
java -version
從上圖中得知,咱們肯定JDK已經安裝成功
在其它服務器重複以上步驟
首先用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
最後在"/usr/local/hadoop"下面建立tmp文件夾.
並把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"
source /etc/profile
首先在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)步驟
咱們先在master.hadoop中進行配置,配置完成後再將hadoop複製到slave1和slave2中。
cd /usr/local/hadoop/etc/hadoop/ vi hadoop-env.sh // 修改JAVA_HOME export JAVA_HOME=/usr/local/jdk1.8.0_171
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才行,不然會出錯。
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>
修改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>
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>
注意:使用hadoop帳號
scp -r /usr/local/hadoop hadoop@slave1.hadoop:/usr/local/
scp -r /usr/local/hadoop hadoop@slave2.hadoop:/usr/local/
[hadoop@SVR-29-151 hadoop]$cd /usr/local/hadoop/etc/hadoop [hadoop@SVR-29-151 hadoop]$ vi workers // 將如下內容寫入 slave1.hadoop slave2.hadoop
// 在Master主機上輸入如下指令(使用hadoop用戶)
[hadoop@SVR-29-151 hadoop]$ hdfs namenode -format
[hadoop@SVR-29-151 hadoop]$ start-dfs.sh
結果以下圖:
[hadoop@SVR-29-151 hadoop]$ start-yarn.sh
[hadoop@SVR-29-151 hadoop]$ jps
master中的結果:
slave中的結果:
web管理頁面:http://172.18.29.151:8088/cluster