Hadoop (3) CentOS Hadoop Fully-Distributed 的設定

1. Fully-Distributed:

今天要處理 Fully-Distributed 的設定,Pseudo-Distributed 和 Fully-Distributed 的設定差不多只是不用設定 slaves。

事前準備:

  1. 2~3 台 CentOS 主機或虛擬機 (最少是一個 master 和 一個 worker)。我這邊開虛擬機,user 分別是 master (master) 和 node1 (worker1)。
  2. 設定好 Hadoop 和 Java 的變數,最後我們會把 master 的 Hadoop 傳給每個 worker,所以 worker 可以先不裝 Hadoop。

2. ssh 設定:

Hadoop 是藉由 ssh 溝通,所以我們要先確保機器間 ssh 是可以溝通的。

在 master 上產生 key。

$ ssh-keygen -t rsa -P ""

看一下 key 有沒有出來

$ cd ~/.ssh
$ ls 

這時應該會看到。

id_rsa  id_rsa.pub

把 public key 加入授權。

$ cat id_rsa.pub >> authorized_keys

變更權限:

$ sudo chmod 600 authorized_keys
$ sudo chmod 700 -R ../.ssh

ssh 自己看看,應該不用輸入密碼了。

$ ssh master@127.0.0.1

把 master 的 authorized_keys,傳給 worker1。

$ scp authorized_keys node1@ip:~/.ssh

把 worker1 的 authorized_keys,傳給 master。

$ cat id_rsa.pub >> authorized_keys
$ scp authorized_keys master@ip:~/.ssh

測試一下是不是能夠不用密碼互連。

$ ssh master@ip
$ ssh node1@ip

用 ifconfig 可以查詢 ip。


3. 設定 hosts 和 hostname:

修改機器顯示的名字。

$ sudo vim /etc/hostname

我把機器的名字改這樣,其實這只是方便我們看而已,沒啥實質用處。

master or work[0-9]+

追加映射規則。

$ sudo vim /etc/hosts

這個規則跟上面的名聲無關。

192.168.ooo.xxx  master
192.168.ooo.xxx  worker1

這時 master 和 worker1 應該可以相互溝通了。

$ ssh master@master
$ ssh node1@worker1

如果之後 slave 的 datanode 有起來,但是在 webgui 裡 slave 不是 live node 的話,就是 ip 的對應問題。 這時候要把 localhost 對應的 hostname 改成非 local 的 ip 對應,例如:

127.0.0.1       localhost
# 127.0.0.1     master
192.168.0.xxx   masrer

3. 設定 Fully-Distributed Hadoop:

我們需要修改 $HADOOP_HOME/etc/hadoop 的五個配置文件: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

修改 slaves。

$ vim slaves

添加 workers。

worker1

修改 core-site.xml。

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
  </property>

  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/local/hadoop-2.7.6/tmp</value>
    <description>Abase for other temporary directories.</description>  
  </property>
</configuration>

修改 hdfs-site.xml

<configuration>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>master:50090</value>
  </property>
  
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/usr/local/hadoop-2.7.6/tmp/dfs/name</value>
  </property>

  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/usr/local/hadoop-2.7.6/tmp/dfs/data</value>
  </property>
  
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
</configuration>

修改 mapred-site.xml

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

修改 yarn-site.xml


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

  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>

打包傳給 worker

$ cd /usr/local
$ tar -zcf ~/Downloads/hadoop.tar.gz hadoop-2.7.6/
$ ~/Downloads
$ scp hadoop.tar.gz node1@worker1:~/Downloads
$ cd ~/Dowloads
$ tar -zxvf hadoop.tar.gz 
$ sudo mv hadoop-2.7.6 /usr/local

4. 啟動 hadoop

格式化 worker。

$ hadoop namenode -format

啟動分散式資料系統

$ start-dfs.sh

分別在 master 和 node1 上輸入 jps。

$ jps # master
6785 SecondaryNameNode
6613 NameNode
10169 Jps

$ jps # node1
7425 Jps
4918 DataNode

回到 maseter,開啟 127.0.0.1:50070

$ start-yarn.sh
$ jps # master
6785 SecondaryNameNode
6613 NameNode
7230 ResourceManager
10334 Jps

$ jps # node1
7425 Jps
4918 DataNode
5117 NodeManager

如果沒有 WebUI 的話,可以試試把防火牆關掉。

$ service firewalld stop

留言

熱門文章