自己動手搭建了一下hadoop完全分佈式,現在做下總結,希望對他人能有所幫助,接觸時間不長,如有不足,歡迎指正指正。
一 相關準備
hadoop版本: hadoop-2.7.3
jdk版本:1.8.0_65
Linux版本:centos7
VMware Workstation : 搭建四臺虛擬機,一臺namenode,三臺datanode(其實兩臺就夠用)四臺虛擬機需要能相互ping通
本文四臺主機:s201 s202 s203 s204 其中s201作爲namonode,其他三臺爲datanode
二 搭建hadoop環境
1.安裝虛擬機鏡像
安裝虛擬機的過程在此省略。先只搭建一臺虛擬機,作爲namenode,安裝好之後克隆三份,克隆的三份將攜帶本所有配置,集羣中所有主機配置完全一致。
安裝之後,修改本機主機名。本文中namedode主機名稱爲s201。
vi /etc/hostname 將localhost.domain修改爲s201。
保存退出後重啓,輸入hostname驗證主機名。
修改 /etc/hosts 將本機ip與主機名映射。
2. 創建新用戶。
儘量不要用root用戶,提高安全性。本文中用戶爲centos
# useradd centos
# psswd centos
之後設置新密碼。
登陸centos: su centos
centos所在家目錄爲 /home/centos,進入該目錄並創建downloads文件夾。
$ cd ~ && mkdir downloads
將下載的hadoop和jdk安裝包上傳到downloads文件夾。
3. 環境搭建。
安裝JDK,解壓jdk-8u65-linux-x64.tar.gz
[centos@s201 /downloads]$tar -zxvf jdk-8u65-linux-x64.tar.gz
解壓完成後會出現jdk1.8.0_65文件夾。創建 /soft 文件夾,作爲軟件安裝目錄。使用sudo命令,以管理員身份運行, 需要輸入密碼。並將soft文件夾的所有權限指定給centos用戶。
[centos@s201 /downloads]$ sudo mkdir /soft
[centos@s201 /downloads]$ sudo chown centos:centos /soft
將解壓後的jdk文件夾移動到/soft下:
[centos@s201 /soft]$ mv ~/downloads/jdk-1.8.0_65 /soft/
到soft文件夾下確認移動完成後修改配置文件
[centos@s201 /soft]$ sudo vi /etc/profile
在末尾處添加如下內容:
export JAVA_HOME=/soft/jdk1.8.0_65
exprot PATH=$PATH:$JAVA_HOME/bin
保存退出後,輸入 sudo source /etc/profile,使配置文件生效。之後驗證jdk安裝情況,出現以下內容說明jdk配置成功。
[centos@s201 /home/centos]$java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
解壓hadoop
[centos@s201 /home/centos/downloads]$ tar -zxvf hadoop-2.7.3.tar.gz
.......解壓過程....... 解壓完成後移動
[centos@s201 /home/centos/downloads]$ mv hadoop-2.7.3 /soft/
配置hadoop環境變量
[centos@s201 /home/centos/downloads]$ vi /etc/profile
在末尾處添加
export HADOOP_HOME=/soft/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出後,輸入 sudo source /etc/profile,使配置文件生效。之後驗證hadoop安裝情況,出現以下內容說明配置成功。
[centos@s201 /home/centos/downloads]$hadoop version
Hadoop 2.7.3
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r baa91f7c6bc9cb92be5982de4719c1c8af91ccff
Compiled by root on 2016-08-18T01:41Z
Compiled with protoc 2.5.0
From source with checksum 2e4ce5f957ea4db193bce3734ff29ff4
This command was run using /soft/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3.jar
修改hadoop配置文件,涉及到 hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml那文件位 置: /soft/hadoop/etc/hadoop
修改hadoop-env.sh 找到export JAVA_HOME 將值改爲本地的java_home 即 /soft/jdk1.8.0_65
修改core-site.xml 的configuration元素
<configuration>
<!--hadoop訪問目錄節點nameNode-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://s201/</value>
</property>
<!--- 配置新的本地目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/centos/hadoop</value>
</property>
</configuration>
修改hdfs-site.xml 的configuration元素
<configuration>
<property> <!--制定副本數量,本文中有三個副本因此是3-->
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
修改mapred-site.xml 的configuration元素
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml 的configuration元素
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>s201</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
創建符號連接
[centos@s201 /soft/hadoop/etc/hadoop]$ ln -s /soft/hadoop-2.7.3 /soft/hadoop
配置ssh無密登陸
1)檢查是否安裝了ssh相關軟件包(openssh-server + openssh-clients + openssh)
$yum list installed | grep ssh
2)檢查是否啓動了sshd進程
$>ps -Af | grep sshd
3)在client側生成公私祕鑰對。
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
4)生成~/.ssh文件夾,裏面有id_rsa(私鑰) + id_rsa.pub(公鑰)
5)追加公鑰到~/.ssh/authorized_keys文件中(文件名、位置固定)
$>cd ~/.ssh
$>cat id_rsa.pub >> authorized_keys
6)修改authorized_keys的權限爲644.
$>chmod 644 authorized_keys
7)測試
$>ssh localhost
至此,s201的hadoop已經搭建完成。
三 搭建其他三臺主機
1 在vm界面將s201克隆三份。
2 三臺主機分別修改主機名爲s202 s203 s204
3 修改三臺主機的ip地址,克隆後的主機ip與s201相同,需要手動修改.
4 修改四臺主機的hosts文件,將四臺主機的ip與主機名映射配置進去。
5 修改s201的slaves文件,位於/soft/hadoop/etc/hadoop
[centos@s201 /soft/hadoop/etc/hadoop]$ vi slaves
添加以下內容,配置datanode主機
s202
s203
s204
6 在s201上分發slaves文件
[centos@s201 /soft/hadoop/etc/hadoop]scp slaves centos@s202:/soft/hadoop-2.7.3/etc/hadoop
[centos@s201 /soft/hadoop/etc/hadoop]scp slaves centos@s203:/soft/hadoop-2.7.3/etc/hadoop
[centos@s201 /soft/hadoop/etc/hadoop]scp slaves centos@s204:/soft/hadoop-2.7.3/etc/hadoop
7 配置完全分佈的ssh
1.刪除所有主機上的/home/centos/.ssh/*
2.在s201主機上生成密鑰對
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
3.將s201的公鑰文件id_rsa.pub遠程複製到202 ~ 204主機上。
並放置/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s201:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s202:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s203:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s204:/home/centos/.ssh/authorized_keys
8 關閉防火牆,四臺主機都關
$>sudo systemctl stop firewalld.service //停止防火牆
$>sudo chkconfig firewalld off //"開啓自啓"禁用
補充防火牆其他指令:
centos防火牆操作
[cnetos 6.5之前的版本]
$>sudo service firewalld stop //停止服務
$>sudo service firewalld start //啓動服務
$>sudo service firewalld status //查看狀態
[centos7]
$>sudo systemctl enable firewalld.service //"開機啓動"啓用
$>sudo systemctl disable firewalld.service //"開機自啓"禁用
$>sudo systemctl start firewalld.service //啓動防火牆
$>sudo systemctl stop firewalld.service //停止防火牆
$>sudo systemctl status firewalld.service //查看防火牆狀態
[開機自啓]
$>sudo chkconfig firewalld on //"開啓自啓"啓用
$>sudo chkconfig firewalld off //"開啓自啓"禁用
9 啓動hadoop 在s201上依次執行 hdfs namenode -format (第一次啓動需要格式化) start-dfs.sh 和 start-yarn.sh 完成後輸入jps可看到如下結果
[centos@s201 /soft/hadoop/etc/hadoop]$jps
6805 Jps
5558 SecondaryNameNode
5721 ResourceManager
5341 NameNode
在其他三臺機器上輸入jps,可以看到如下結果
[centos@s202 /soft/hadoop/etc/hadoop]$jps
5301 NodeManager
5174 DataNode
6079 Jps
[centos@s203 /home/centos]$jps
6053 Jps
5079 NodeManager
4952 DataNode
[centos@s204 /home/centos]$jps
5027 DataNode
6151 Jps
5162 NodeManager
在s201上啓動了NameNode,ResourceManager,SecondaryNameNode,在其他三臺主機上啓動了DataNode和 NodeManager,說明集羣已經啓動成功。
10 查看webUI 訪問s201的50070端口,可見如下界面
啓動了namenode和三個datanode,至此,hadoop完全分佈式已經搭建完成,相關日誌,可查看 ${HADOOP_HOME}/logs
四 僞分佈式的搭建
僞分佈式在性質上等同於完全分佈式,只不過都是在一臺機器上運行,只有一個節點。
大部分步驟同上,只是配置文件不同,不需要修改slaves文件
僞分佈模式。
a)進入${HADOOP_HOME}/etc/hadoop目錄
b)編輯core-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
c)編輯hdfs-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
d)編輯mapred-site.xml
注意:cp mapred-site.xml.template mapred-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
e)編輯yarn-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>