1. 程式人生 > >Hadoop HDFS搭建日誌

Hadoop HDFS搭建日誌

目錄

HDFS叢集搭建

一、配置hosts檔案

二、建立hadoop執行帳號

三、配置ssh免密碼連入

更新known_hosts updated

四、下載並解壓hadoop安裝包

Hadoop 啟動/停止叢集和節點的命令


作業系統:Ubuntu16.04 Server

HDFS叢集搭建

閱讀:https://blog.csdn.net/boori/article/details/81021191

主要參考:https://www.cnblogs.com/caiyisen/p/7373512.html

VMware自帶的克隆,能克隆出三臺一模一樣的虛擬機器

當前環境:

Ubuntu16.04

java version "1.8.0_171"

先總的看一下所有的步驟:

一、配置hosts檔案

二、建立hadoop執行帳號

三、配置ssh免密碼連入

四、下載並解壓hadoop安裝包

五、配置 /etc/hadoop目錄下的幾個檔案及 /etc/profile

六、格式化namenode並啟動叢集 

一、配置hosts檔案

現對虛擬機器主機名進行修改,來進行區分一個主節點和兩個從節點。

 

修改只讀檔案許可權:sudo chmod a+w test.c

接下來,分別檢視三臺虛擬機器的ip地址

inet addr

就是這臺虛擬機器的ip地址。

10.2.68.104

10.2.68.101

10.2.68.100

主機1改成了Hadoop1Server_master

將三臺虛擬機器的ip地址和主機名加在裡面,其它的不用動它。

三臺虛擬機器都要修改hosts檔案。簡單的說配置hosts後三臺虛擬機器就可以進行通訊了,可以互相ping一下試試,是可以ping通的。

sudo vim /etc/hosts

127.0.0.1       localhost

10.2.68.104 Hadoop1Server

10.2.68.101 Hadoop2Server

10.2.68.100 Hadoop3Server

10.2.68.99 Hadoop4Server

10.2.68.98 Hadoop5Server

 

# The following lines are desirable for IPv6 capable hosts

::1     localhost ip6-localhost ip6-loopback

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

 

二、建立hadoop執行帳號

就是建立一個group組,然後在三臺虛擬機器上重新建立新的使用者,將這三個使用者都加入到這個group中。

以下操作三臺虛擬機器都要進行相同操作

 首先新增一個叫hadoop使用者組進來

sudo groupadd hadoop

cat /etc/group

新增名叫hduser的使用者,並新增到hadoop組中

sudo useradd -s /bin/bash -d /home/hduser -m hduser -g hadoop

賦予許可權

sudo adduser hduser sudo

更改其他使用者密碼,只要輸入passwd username

sudo passwd hduser

密碼:123456

切換到剛剛新建的使用者進行操作

su hduser

三、配置ssh免密碼連入

開始配置ssh之前,先確保三臺機器都裝了ssh。

輸入以下命令檢視安裝的ssh。

dpkg --list|grep ssh

機器顯示如下則正常:

ii  openssh-client                     1:7.2p2-4ubuntu2.6                         amd64        secure shell (SSH) client, for secure access to remote machines

ii  openssh-server                     1:7.2p2-4ubuntu2.6                         amd64        secure shell (SSH) server, for secure access from remote machines

ii  openssh-sftp-server                1:7.2p2-4ubuntu2.6                         amd64        secure shell (SSH) sftp server module, for SFTP access from remote machines

ii  ssh-import-id                      5.5-0ubuntu1                               all          securely retrieve an SSH public key and install it locally

如果缺少了opensh-server,需要進行安裝:sudo apt-get install openssh-server

安裝完畢之後開始配置ssh

接下來的這第三個步驟的操作請注意是在哪臺主機上進行,不是在三臺上同時進行

1)下面的操作在master機上操作

首先在master機上輸入以下命令,生成master機的一對公鑰和私鑰:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

警告:公鑰私鑰已存在

/home/user/.ssh/id_rsa already exists.

Overwrite (y/n)? nn

以下命令進入認證目錄可以看到,  id_rsa id_rsa.pub這兩個檔案,就是我們剛剛生成的公鑰和私鑰。

Cd .ssh

Ls

然後,下面的命令將公鑰加入到已認證的key中:

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

再次進入生成目錄,可以看到多出authorized_keys這個檔案:

cd .ssh

ls

顯示:

authorized_keys  id_rsa  id_rsa.pub  known_hosts

然後輸入ssh localhost 登入本機命令,第一次提示輸入密碼,輸入exit退出,再次輸入ssh localhost不用輸入密碼就可以登入本機成功,則本機ssh免密碼登入已經成功。

Exit退出登入

配置node1node2節點的ssh免密碼登入,目的是讓master主機可以不用密碼登入到node1node2主機。

2)這一步分別在node1node2主機上操作

master主機上的is_dsa.pub複製到node1主機上,命名為node1_dsa.pubnode2主機進行同樣的操作。

XShellWindows互傳檔案:https://blog.csdn.net/u010710198/article/details/21187809

Linuxscp命令用於Linux之間複製檔案和目錄:http://www.runoob.com/linux/linux-comm-scp.html

scp [可選引數] file_source file_target

從遠端複製到本地,只要將從本地複製到遠端的命令的後2個引數調換順序即可,如下例項

scp [email protected]:/home/root/others/music /home/space/music/1.mp3

目前ssh Hadoop3Server顯示:

Warning: the RSA host key for 'hadoop3server' differs from the key for the IP address '10.2.68.100'

Offending key for IP in /home/user/.ssh/known_hosts:3

Matching host key in /home/user/.ssh/known_hosts:11

root連:

The authenticity of host 'hadoop3server (10.2.68.100)' can't be established.

RSA key fingerprint is SHA256:7betrMgjuO3Owd03sMKOpovJt7xMXD7VIn3BQpWewKo.

Warning: Permanently added 'hadoop3server,10.2.68.100' (RSA) to the list of known hosts

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

遠端主機:後無空格

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818194440943-750328983.png

[email protected]:~$ scp [email protected]:~/.ssh/id_rsa.pub ~/.ssh/Hadoop3Server_rsa.pub

顯示:

id_rsa.pub                                          100%  400     0.4KB/s   00:00

將從master得到的金鑰加入到認證,node2主機進行同樣的操作。

把id_rsa.pub追加到授權的key裡面去。

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170817225001553-1348610209.png

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

cat ~/.ssh/Hadoop3Server_rsa.pub >> ~/.ssh/authorized_keys

然後開始驗證是不是已經可以進行ssh免密碼登入。

3)在master機上進行驗證

同樣第一次需要密碼,之後exit退出,再ssh node1就不需要密碼登入成功,說明ssh免密碼登入配置成功!

 https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170817225220256-1620186516.png

如果失敗了,可能是前面的認證沒有認證好,可以將.ssh目錄下的金鑰都刪了重新生成和配置一遍。或者檢查下hosts檔案ip地址寫的對不對。

此處免密登入為ssh Hadoop2Server等

更新known_hosts updated

報錯:

RSA host key for hadoop3server has changed and you have requested strict checking.

Host key verification failed.

解決:ssh-keygen -R hadoop3server

https://blog.csdn.net/github_38236333/article/details/78335903

之後顯示

The authenticity of host 'hadoop3server (10.2.68.100)' can't be established.

ECDSA key fingerprint is SHA256:lEys3rUjbFGXlkOctNUiJdNTi/TRb/9O6YMxqU5PcIo.

Are you sure you want to continue connecting (yes/no)? yes

成功登入

 

四、下載並解壓hadoop安裝包

版本:Hadoop2.6.0  (下載地址:http://mirrors.hust.edu.cn/apache/hadoop/common/

建議初學者選擇2.6.0或者2.7.0版本就可以了,而且如果後面要配置Eclipse開發環境的話,這兩個版本的外掛很容易找到,不用自己去編譯。

話不多說,將hadoop壓縮包,解壓到一個資料夾裡面,例子這裡解壓到了home資料夾,並修改資料夾名為hadoop2.6。所在的目錄就是/home/hduser/hadoop2.6

 三臺主機都要解壓到相應位置

本地為Hadoop 2.7.6

五、配置 /etc/hadoop目錄下的幾個檔案及 /etc/profile

主要有這5個檔案需要修改:

~/etc/hadoop/hadoop-env.sh

~/etc/hadoop/core-site.xml

~/etc/hadoop/hdfs-site.xml

~/etc/hadoop/mapred-site.xml

~/etc/hadoop/slaves

/etc/profile

三臺機都要進行這些操作,可以先在一臺主機上修改,修改完了複製到其它主機就可以了。

 首先是hadoop-env.sh ,新增java安裝的地址,儲存退出即可。

問題:~/etc/hadoop/hadoop-env.sh不存在,是新建檔案

在home下檢視hadoop資料夾,找到自己的路徑

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818185230943-1059228784.png

然後core-site.cml

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818185346928-551420188.png

解釋下:第一個fs.default.name設定master機為namenode   第二個hadoop.tmp.dir配置Hadoop的一個臨時目錄,用來存放每次執行的作業jpb的資訊。

 

接下來hdfs-site.xml的修改:

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818185837521-1613808053.png

解釋下:dfs.name.dirnamenode儲存永久性的元資料的目錄列表。這個目錄會建立在master機上。dfs.data.dirdatanode存放資料塊的目錄列表,這個目錄在node1node2機都會建立。 dfs.replication 設定檔案副本數,這裡兩個datanode,所以設定副本數為2

接下來mapred-site.xml的修改:

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818190442162-993203399.png

 

解釋下:這裡設定的是執行jobtracker的伺服器主機名和埠,也就是作業將在master主機的9001埠執行。

 接下來修改slaves檔案

教程:~/etc/hadoop/slaves

本地:~/hadoop/etc/hadoop/slaves

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818190652225-1627668972.png

這裡將兩臺從主機的主機名node1node2加進去就可以了。

原為:

Hadoop3Server

Hadoop4Server

Hadoop5Server

改為:

Hadoop2Server

Hadoop3Server

 

 最後修改profile檔案 ,如下進入profile:

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818191130896-1072316764.png

將這幾個路徑新增到末尾:

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818191116178-1439438859.png

修改完讓它生效:

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818191958209-1357205797.png

 

 檢查下是否可以看到hadoop版本資訊

顯示出了版本資訊,如果沒有顯示出來,回過去檢查 profile路徑是否填寫錯誤。

顯示版本資訊如下

[email protected]:~$ hadoop version

Hadoop 2.7.6

Subversion https://[email protected]/repos/asf/hadoop.git -r 085099c66cf28be31604560c376fa282e69282b8

Compiled by kshvachk on 2018-04-18T01:33Z

Compiled with protoc 2.5.0

From source with checksum 71e2695531cb3360ab74598755d036

This command was run using /home/user/hadoop/share/hadoop/common/hadoop-common-2.7.6.jar

六、格式化namenode並啟動叢集 

接下來需要格式化namenode,注意只需要在 master主機上進行格式化。格式化命令如下:

 https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818192101928-188344894.png

看到successful表示格式化成功。

接下來啟動叢集:

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818192202490-61857544.png

啟動完畢,檢查下啟動情況: master主機看到四個開啟的程序,node1node2看到三個開啟的程序表示啟動成功。

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818192314928-905788711.png

https://images2017.cnblogs.com/blog/1136325/201708/1136325-20170818193004584-919947754.png

[email protected]:~$ start-all.sh

報錯:指令碼已經棄用

This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh

第二次嘗試

start-dfs.sh

報錯:剛剛已經啟動叢集還未停止、佔用程序

Hadoop 啟動/停止叢集和節點的命令

啟動/停止Hadoop叢集:start-all.sh    stop-all.sh

[email protected]:~$ stop-all.sh

This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh

修復:

https://blog.csdn.net/violet_echo_0908/article/details/53486317

此處如上警告提示為/home/user/.ssh/known_hosts

看不懂,且無法通過vim修改

 

Add correct host key in /home/user/.ssh/known_hosts

未嘗試重新複製公鑰:

~/.ssh/is_dsa.pub ~/.ssh/Hadoop3Server_dsa.pub

 

清除舊的公鑰資訊

ssh-keygen -R 10.2.68.104

顯示:

/home/user/.ssh/known_hosts updated.

Original contents retained as /home/user/.ssh/known_hosts.old

 

ssh免驗證登入

https://blog.csdn.net/qq_38570571/article/details/79268426

 

ssh-keygen -f "/home/user/.ssh/known_hosts" -R hadoop3server

成功啟動顯示

[email protected]:~$ start-dfs.sh

Starting namenodes on [Hadoop1Server]

Hadoop1Server: starting namenode, logging to /home/user/hadoop/logs/hadoop-user-namenode-Hadoop1Server.out

Hadoop3Server: starting datanode, logging to /home/user/hadoop/logs/hadoop-user-datanode-Hadoop3Server.out

Hadoop5Server: starting datanode, logging to /home/user/hadoop/logs/hadoop-user-datanode-Hadoop5Server.out

Hadoop4Server: starting datanode, logging to /home/user/hadoop/logs/hadoop-user-datanode-Hadoop4Server.out

Starting secondary namenodes [Hadoop2Server]

Hadoop2Server: starting secondarynamenode, logging to /home/user/hadoop/logs/hadoop-user-secondarynamenode-Hadoop2Server.out