一、 說明
學習過程中順便記錄下來,方便更多人使用,初學錯誤請指正。
二、 安裝虛擬機(本文采用CentOS 7)
1. 本文采用CetnOS7安裝部署
??2. jdk1.8
??3. Hadoop 2.7.3
hostname | ip |
---|---|
master | 10.10.1.3 |
slave1 | 10.10.1.4 |
三、 安裝jdk,配置防火墻,SSH
- 修改hostname
centos7 修改hostname 與centos6.5有較大差異。
將10.10.1.3
作為master機器,10.10.1.4
作為slave1機器。
[hadoop@slave1 .ssh]$ hostnamectl set-hostname slave1
- 修改hosts文件
[hadoop@master ~]$ vim /etc/hosts
如果沒有vim命令請執行yum install -y vim
安裝
10.10.1.3 master
10.10.1.4 slave1
#追加到hosts文件最后,兩臺機器都要添加。
- 安裝jdk
3.1 卸載系統自帶openjdk
3.1.1. 卸載系統內置jdk命令如下:
這時會列出系統中已經存在的jdk版本名稱。rpm -qa | grep java
3.1.2. 使用卸載命令進行卸載:
rpm -e --nodeps jdk相關名稱
3.2 jdk安裝
3.2.1. 下載jdk版本到home目錄
3.2.2. 解壓安裝,解壓安裝命令如下:
rpm -ivh rpm文件名稱
3.2.3. 執行完成,代表安裝成功,默認安裝目錄為:
/usr/java/jdk1.8.0_91
3.3 配置環境變量
3.3.1. rpm安裝成功后使用 java -version 是可以查看出已經安裝的版本:
3.3.2. 為了保險起見還是需要在root用戶與hadoop 用戶下配置profile文件,輸入下面命令:
vim /etc/profile
在文章末尾追加
export JAVA_HOME=/usr/java/jdk1.8.0_91
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
切換用戶:su hadoop
,并執行命令:
vim ~/.bashrc
在文章末尾追加
export JAVA_HOME=/usr/java/jdk1.8.0_91
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
到此環境變量配置完成。
- 配置ssh免密登陸
4.1. 生成密鑰[hadoop@master ~]$ ssh-keygen -t rsa
輸上面命令后一路回車,可在當前用戶目錄下生成.ssh
文件,每臺機器都要設置。
4.2. 合并公鑰到authorized_keys文件,在Master服務器,進入.ssh目錄,通過SSH命令合并
[hadoop@master ~]$ cat id_rsa.pub>> authorized_keys
4.3. slave1節點增加master免密登陸
[hadoop@master ~]$ ssh-copy-id hadoop@10.10.1.4
4.4. 測試ssh登陸
登陸成功,設置完成。
- 關閉防火墻
因為hadoop需要開放端口太多,這里暫時將防火墻關閉。關閉防火墻必須在root用戶下,使用下面的命令:
#關閉防火墻
[root@master ~]$ systemctl stop firewalld.service
#關閉開機自啟動
[root@master ~]$ systemctl disable firewalld.service
四、 安裝Hadoop
- 下載并解壓到/usr/local/hadoop 目錄下,并將hadoop目錄賦權給hadoop用戶。
[root@master ~]$ chown -R haddop:hadoop /usr/local/hadoop/
- 創建數據存放目錄
[hadoop@master ~]$ cd /usr/local/hadoop
[hadoop@master ~]$ mkdir tmp
[hadoop@master ~]$ mkdir -p hdfs/data hdfs/name
- 修改core-site.xml文件
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
- 修改hdfs-site.xml文件
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>linux-node1:9001</value>
<description># 通過web界面來查看HDFS狀態 </description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description># 每個Block有2個備份</description>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
- 修改mapred-site.xml
??這個是mapreduce任務的配置,由于hadoop2.x使用了yarn框架,所以要實現分布式部署,必須在mapreduce.framework.name屬性下配置為yarn。mapred.map.tasks和mapred.reduce.tasks分別為map和reduce的任務數。
<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>
- 配置節點yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<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>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
</configuration>
- 配置hadoop環境變量
[root@master ~]$ vim /etc/profile
#將之前修改的java 環境變量替換掉。
export JAVA_HOME=/usr/java/jdk1.8.0_91
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
[hadoop@master ~]$ vim ~/.bashrc
export JAVA_HOME=/usr/java/jdk1.8.0_91
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
到此配置結束。
至于有些教程中寫道要修改hadoop-env.sh、yarn-env.sh的JAVA_HOME,經過測試只要設置了root 跟 hadoop 用戶的profile,與 .bashrc 文件就不存在此問題。
- 復制hadoop 配置文件到 slave1 節點。
[hadoop@master ~]$ scp -r /usr/local/hadoop/ slave1:/home/hadoop/
五、 啟動集群
- 在master節點使用hadoop用戶初始化NameNode
[hadoop@master ~]$ hdfs namenode –format
#執行后控制臺輸出,看到 Exiting with status 0 表示格式化成功。
- 啟動hadoop
#啟動hdfs
[hadoop@master ~]$ start-dfs.sh
#啟動yarn分布式計算框架
[hadoop@master ~]$ start-yarn.sh
- 啟動jobhistory服務,查看mapreduce狀態
[hadoop@master ~]$ mr-jobhistory-daemon.sh start historyserver
-
查看HDFS分布式文件系統狀態
驗證是否啟動成功
[hadoop@master ~]$ jps
-
web頁面查看hadoop集群狀態
注意端口號不同
到此啟動成功