在centOS7 下搭建 HADOOP3.0.3 完全分佈式集羣環境

一、基礎環境

在Linux上安裝Hadoop之前,需要先安裝兩個程序:
1.1 安裝說明
1. JDK 1.8或更高版本(本文所提到的安裝的是jdk1.8);
2. SSH(安全外殼協議),推薦安裝OpenSSH。

下面簡述一下安裝這兩個程序的原因:
1. Hadoop是用Java開發的,Hadoop的編譯及MapReduce的運行都需要使用JDK。
2. Hadoop需要通過SSH來啓動salve列表中各臺主機的守護進程,因此SSH也是必須安裝的,即使是安裝僞分佈式版本(因爲Hadoop並沒有區分集羣式和僞分佈式)。對於僞分佈式,Hadoop會採用與集羣相同的處理方式,即依次序啓動文件conf/slaves中記載的主機上的進程,只不過僞分佈式中salve爲localhost(即爲自身),所以對於僞分佈式Hadoop,SSH一樣是必須的。

1.2 下載安裝JDK
1.2.1 下載
地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
這裏寫圖片描述
1.2.2 安裝配置
1)、使用命令 tar -zxfv jdk-8u181-linux-x64.tar.gz 解壓
2)、然後移動 mv jdk1.8.0_181 /usr/local
然後將這些目錄通過scp命令拷貝到Slave1和Slave2的相同目錄下。

scp -r /usr/local/jdk1.8.0_181 root@slave1:/usr/local/
scp -r /usr/local/jdk1.8.0_181 root@slave2:/usr/local/

3)、配置環境變量:vi /etc/profile 在末尾空白處添加
如下配置

#JAVA
JAVA_HOME=/usr/local/jdk1.8.0_181
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

然後立刻生效運行:source /etc/profile
驗證是否成功:java,javac,java -version

1.3 查看配置ssh 免密碼登錄
1.3.1 查看是否安裝ssh
查看ssh的安裝包 :rpm -qa | grep ssh
查看ssh是否安裝成功 :ps -ef | grep ssh
1.3.2 配置SSH免密碼登錄
進入~/.ssh目錄
每臺機器執行:ssh-keygen -t rsa,一路回車
生成兩個文件,一個私鑰,一個公鑰,在master1中執行:cp id_rsa.pub authorized_keys
a:本機無密鑰登錄
修改authorized_keys權限:chmod 644 authorized_keys
此時重啓ssh服務:sudo service sshd restart
試一試,連接及退出
這裏寫圖片描述
b:master與其他節點無密鑰登錄
從master中把authorized_keys分發到各個結點上(會提示輸入密碼,輸入密碼即可):

scp /root/.ssh/authorized_keys slave1:/root/.ssh 
scp /root/.ssh/authorized_keys slave2:/root/.ssh 

(這裏.ssh的位置需要注意下,由於我用的是root用戶,所以直接就在/root下,其他可能是/home/用戶名/下)
然後在各個節點對authorized_keys執行(一定要執行該步,否則會報錯):chmod 644 authorized_keys
試試連接到其他節點
這裏寫圖片描述
連接成功,而且不需要密碼

1.4 Host配置
由於我搭建Hadoop集羣包含三臺機器,所以需要修改調整各臺機器的hosts文件配置,進入/etc/hosts,配置主機名和ip的映射,命令如下:
vim /etc/hosts
如果沒有足夠的權限,可以切換用戶爲root。
三臺機器的內容統一增加以下host配置:
可以通過hostname來修改服務器名稱爲master、slave1、slave2
hostname master
這裏寫圖片描述
然後將這些目錄通過scp命令拷貝到Slave1和Slave2的相同目錄下。

scp -r /etc/hosts root@slave1:/etc/
scp -r /etc/hosts root@slave2:/etc/

修改主機名:vi /etc/hostname
在後面追加:

HOSTNAME=master (每臺機器的主機名稱 如:slave1)

二、hadoop安裝配置

1、下載
地址:http://hadoop.apache.org/releases.html
這裏寫圖片描述
用WinSCP將hadoop-3.0.3.tar.gz 上傳到 /data/下
解壓 tar -zxvf hadoop-3.0.3.tar.gz
2、配置環境變量:
命令: vi /etc/profile

#HADOOP
HADOOP_HOME=/data/hadoop-3.0.3
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME
export PATH
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_ROOT_LOGGER=INFO,console
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

然後將這些目錄通過scp命令拷貝到Slave1和Slave2的相同目錄下。

scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/

分別運行命令:

source /etc/profile

3、補全配置文件
配置文件全在hadoop-3.0.0/etc/hadoop裏
hadoop-env.sh
添加

export JAVA_HOME=/usr/local/jdk1.8.0_181

4、workers
刪除localhost

加入slave虛擬機的名稱一行一個
例如我的是

slave1
slave2

5、創建文件目錄
爲了便於管理,給Master的hdfs的NameNode、DataNode及臨時文件,在用戶目錄下創建目錄:

mkdir /data/hdfs/tmp
mkdir /data/hdfs/var
mkdir /data/hdfs/logs
mkdir /data/hdfs/dfs
mkdir /data/hdfs/data
mkdir /data/hdfs/name
mkdir /data/hdfs/checkpoint
mkdir /data/hdfs/edits

然後將這些目錄通過scp命令拷貝到Slave1和Slave2的相同目錄下。
scp -r /data/hdfs root@slave1:/data
scp -r /data/hdfs root@slave2:/data

6、Hadoop的配置

進入hadoop-3.0.3的配置目錄:
cd /data/hadoop-3.0.3/etc/hadoop
依次修改core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml以及workers文件。
1)、core-site.xml

<property>
  <name>fs.checkpoint.period</name>
  <value>3600</value>
</property>
<property>
  <name>fs.checkpoint.size</name>
  <value>67108864</value>
</property>
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://master:9000</value>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>file:/data/hdfs/tmp</value>
</property>
<property>
  <name>hadoop.http.staticuser.user</name>
  <value>root</value>
</property>

2)、hdfs-site.xml

<property>
  <name>dfs.replication</name>
  <value>2</value>
</property>

<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:/data/hdfs/name</value>
</property>

<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:/data/hdfs/data</value>
</property>

<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>master:50090</value>
</property>

<property>
  <name>dfs.namenode.http-address</name>
  <value>master:50070</value>
  <description>
    The address and the base port where the dfs namenode web ui will listen on.
    If the port is 0 then the server will start on a free port.
  </description>
</property> 

<property>
  <name>dfs.namenode.checkpoint.dir</name>
  <value>file:/data/hdfs/checkpoint</value>
</property>

<property>
  <name>dfs.namenode.checkpoint.edits.dir</name>
  <value>file:/data/hdfs/edits</value>
</property>

3)、mapred-site.xml

<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
<property>
  <name>mapred.job.tarcker</name>
  <value>master:10020</value>
</property>
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>master:19888</value>
</property>

4)、yarn-site.xml

<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>master</value>
</property>

<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.ShuffleHandle</value>
</property>
<property>
  <name>yarn.resourcemanager.resource-tarcker.address</name>
  <value>master:8025</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address</name>
  <value>master:8030</value>
</property>
<property>
  <name>yarn.resourcemanager.address</name>
  <value>master:8040</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>

7、關掉防火牆
由於hadoop中的程序都是網絡服務,需要監聽端口,這些端口默認會被linux防火牆擋住。因此要把hadoop中的端口一個個打開,或者把防火牆關掉。由於都是內網,所以關掉就好了。

sudo firewall-cmd –state 查看防火牆狀態
sudo systemctl stop firewalld.service 關閉防火牆
再次查看狀態,看到已經關閉了。但在下一次開機時還會自啓動,因此 sudo systemctl disable firewalld.service 禁止開機時防火牆自啓。
這裏寫圖片描述

8、啓動
避免因爲缺少用戶定義造成的錯誤
1)、錯誤:Starting resourcemanager
ERROR: Attempting to launch yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting launch.

所以分別編輯開始和關閉腳本
vi sbin/start-yarn.sh
vi sbin/stop-yarn.sh
在頂部空白處添加內容:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

2)、錯誤: Starting resourcemanager
ERROR: Attempting to launch yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting launch.

所以分別編輯開始和關閉腳本
vi sbin/start-yarn.sh
vi sbin/stop-yarn.sh
頂部添加
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

3)、運行
在master上運行:

hdfs namenode –format

不報錯並在倒數五六行左右有一句 successfully。。。。即成功

start-dfs.sh
start-yarn.sh

或者

start-all.sh

運行完後輸入jps可看到master下的節點
這裏寫圖片描述

slave下的節點
這裏寫圖片描述
成功

9、測試
地址:http://192.168.71.128:50070
這裏寫圖片描述
地址:http://192.168.71.128:8088
這裏寫圖片描述
地址:http://192.168.1.35:8042
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章