hadoop搭建偽分布式集群(centos7+hadoop-3.1.0/2.7.7)


目錄:

Hadoop三種安裝模式

搭建偽分布式集群准備條件

第一部分 安裝前部署

1.查看虛擬機版本
2.查看IP地址
3.修改主機名為hadoop
4.修改 /etc/hosts
5.關閉防火牆
6.關閉SELINUX
7.安裝yum源並安裝基礎包
8.關閉不必要的服務
9.安裝Java環境

第二部分 Hadoop正式安裝

1.安裝Hadoop
2.修改hadoop的5個配置文件
3.解決互信問題

第三部分 啟動Hadoop集群

1.格式化NameNode
2.啟動Hadoop集群
3.驗證集群是否啟動成功
4.關閉hadoop集群
5.登錄HDFS管理界面:http://ip:50070
6.登錄MR管理界面: http://ip:8088

第四部分 一些問題?

1.啟動Hadoop集群報錯:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2.啟動Hadoop集群報錯:Attempting to operate on hdfs namenode as root but there is no HDFS_NAMENODE_USER defined. Aborting operation.
3.啟動hadoop后無法訪問50070端口
4.Hadoop集群啟動后,使用jps查看沒有DataNode進程?


 

Hadoop三種安裝模式

1.Hadoop單機模式
單機模式是Hadoop默認的安裝模式,這種安裝模式主要就是並不配置更多的配置文件,只是保守的去設置默認的幾個配置文件中的初始化參數,他並不與其他節點進行交互,並且也不使用HDFS文件系統,它主要就是為了調試MapReduce程序而生。

2.Hadoop偽分布式安裝模式
Hadoop偽分布式安裝,需要配置5個常規的配置文件(XML),並且這里涉及到了NameNode和DataNode節點交互問題,而且NameNode和DataNode在同一個節點上,還需要配置互信。其實從嚴格意義上來講,我們的偽分布式集群,就已經可以稱之為真正意義上的集群了,而且這里也包含了hdfs和MapReduce所有組件,只不過就是所有組件在同一個節點上而已。

3.Hadoop完全分布式安裝模式
Hadoop完全分布式集群主要分為:常規Hadoop完全分布式集群和Hadoop HA集群(這里我們主要針對的是NameNode個數和NameNode的高可用保障機制而言)。由此可知較偽分布式集群而言,我們的完全分布式集群,所有處理節點並不在同一個節點上,而是在多個節點上。

那么我們如何搭建一個偽分布式集群呢?

我們要准備好以下條件:

1.我們的機器上需要安裝VM虛擬軟件
我安裝的是VMware Workstation 11,安裝方式大家可自行百度。

2.在虛擬軟件上安裝Linux(RHEL CENTOS UBUNTU...)
我安裝的是Centos 7,安裝方式可參考這里

3.配置好我們的java環境
Hadoop畢竟是Java程序的集合,所以在安裝Hadoop軟件之前,我們必須配置好Java環境。我安裝的的是jdk1.8版本。

4.安裝HADOOP並做相應配置
我安裝的是hadoop-3.1.0.tar.gz

這真是我踩過的一個大坑,當我好不容易安裝了hadoop-3.1.0之后,再安裝hbase時,發現竟然hadoop-3.1.0不支持任何版本的hbase。。。。好心塞啊,所以大家如果想要后期學習hbase的話,還是建議不要安裝這個版本的hadoop了,最好安裝hadoop-2.7.1+版本,因為它支持所有的hbase版本。具體看這里

當然下面的步驟同樣適應於hadoop-2.7.7版本的安裝,其中有些微小的區別我也已經作了說明。

第一部分 安裝前部署

首先,我們使用xshell遠程連接我們的虛擬機,最好用root用戶登錄。

1.可以通過如下三個命令查看我們安裝的虛擬機版本

[root@localhost ~]# cat /etc/issue #不知為什么我的虛擬機顯示\S,正常情況下應該顯示版本信息。
\S
Kernel \r on an \m

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 

[root@localhost ~]# cat /etc/system-release
CentOS Linux release 7.5.1804 (Core) 

2.通過 ip addr 可以查看虛擬機的IP地址。注意:centos 7換了查看IP地址的命令【ifconfig==>ip】

這里推薦2篇參考博文:

(1)ifconfig: command not found(CentOS專版,其他的可以參考)
(2)Centos 7 系統安裝完畢修改網卡名為eth0

[root@hadoop ~]# ifconfig
-bash: ifconfig: command not found
[root@hadoop ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:bd:97:52 brd ff:ff:ff:ff:ff:ff
    inet 192.168.42.134/24 brd 192.168.42.255 scope global noprefixroute dynamic eth0
       valid_lft 1506sec preferred_lft 1506sec
    inet6 fe80::b46e:fbba:4f30:8322/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

3.修改主機名為hadoop。方法:修改配置文件 /etc/hostname 保存退出

[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# cat /etc/hostname 
localhost.localdomain
[root@localhost ~]# vi /etc/hostname 
[root@localhost ~]# cat /etc/hostname 
hadoop
[root@localhost ~]# reboot
----------重啟后----------
[root@hadoop ~]# hostname
hadoop

注意:網上還有一種普遍的方式修改Linux主機名(點這里),但是測試之后發現在centos 7根本不生效,我估計這種方式可能是僅適用於低版本的Linux。

[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# cat /etc/sysconfig/network
# Created by anaconda
[root@localhost ~]# vi /etc/sysconfig/network 
[root@localhost ~]# cat /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=hadoop
[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# vi /etc/hosts
[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost hadoop localhost6 localhost6.localdomain6
[root@localhost ~]# reboot
-------重啟后----------
[root@localhost ~]# hostname
localhost.localdomain
這種方法在centos 7完全沒用!!!!!!!!!
View Code

4.修改 /etc/hosts。

先vi /etc/hosts打開文件,再在最后一行加入:IP地址 主機名
如果不知道自己虛擬機的IP地址,可以ip addr查看。注意:CentOS后來換指令了【ifconfig==>ip】
如果不知道自己的主機名,可以hostname查看。

[root@hadoop ~]# ip addr #查看IP地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:bd:97:52 brd ff:ff:ff:ff:ff:ff
    inet 192.168.42.134/24 brd 192.168.42.255 scope global noprefixroute dynamic eth0
       valid_lft 1542sec preferred_lft 1542sec
    inet6 fe80::b46e:fbba:4f30:8322/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

[root@hadoop ~]# hostname #查看主機名
hadoop 
View Code
[root@hadoop ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@hadoop ~]# vi /etc/hosts
[root@hadoop ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.42.134 hadoop

5.關閉防火牆(參考這里)。

首先安裝iptables服務:yum install iptables-services
關閉防火牆:/bin/systemctl stop iptables.service && /bin/systemctl stop ip6tables.service
永久關閉防火牆:systemctl disable iptables.service && systemctl disable ip6tables.service
查看防火牆是否關閉:firewall-cmd --state

[root@hadoop ~]#  yum install iptables-services 
[root@hadoop ~]# /bin/systemctl stop iptables.service
[root@hadoop ~]# /bin/systemctl stop ip6tables.service
[root@hadoop ~]# systemctl disable iptables.service
[root@hadoop ~]# systemctl disable ip6tables.service
[root@hadoop ~]# firewall-cmd --state
not running

6.關閉SELINUX(參考這里)。

使用vi /etc/selinux/config編輯文件,將SELINUX=enfocing修改為disabled

[root@hadoop ~]# vi /etc/selinux/config
[root@hadoop ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

[root@hadoop ~]# getenforce #查看SELinux狀態
Enforcing
[root@localhost ~]# reboot
----------重啟后----------
[root@hadoop ~]# getenforce
Disabled

7.安裝yum源(參考這里)並安裝基礎包。

以下軟件我們未來做hadoop開發基本上都能用上,作為一個嚴謹的開發人員,一定要保證它們均被安裝,使我們的系統可靠、安全。

yum -y install openssh*
yum -y install man*
yum -y install compat-libstdc++-33*
yum -y install libaio-0.*
yum -y install libaio-devel*
yum -y install sysstat-9.* #沒裝上
yum -y install glibc-2.* #沒裝上
yum -y install glibc-devl-2.* glibc-headers-2.* #第一個沒裝上 
yum -y install ksh-2*
yum -y install libgcc-4.*
yum -y install libstdc++-4.*
yum -y install libstdc++-4.*.i686*
yum -y install libstdc++-devel-4.*
yum -y install gcc-4.*x86_64*
yum -y install gcc-c++-4.*x86_64*
yum -y install elfutils-libelf-0*x86_64* elfutils-libelf-devel-0*x86_64*
yum -y install elfutils-libelf-0*i686* elfutils-libelf-devel-0*i686*
yum -y install libtool-ltdl*686*
yum -y install ncurses*i686*
yum -y install ncurses*
yum -y install readline*
yum -y install unixODBC*
yum -y install zlib
yum -y install zlib*
yum -y install openssl*
yum -y install patch
yum -y install git
yum -y install lzo-devel zlib-devel gcc autoconf automake libtool  #autoconf沒裝上
yum -y install lzop
yum -y install lrzsz
yum -y install nc
yum -y install glibc
yum -y install gzip
yum -y install zlib
yum -y install gcc
yum -y install gcc-c++
yum -y install make
yum -y install protobuf
yum -y install protoc  #沒裝上
yum -y install cmake
yum -y install openssl-devel
yum -y install ncurses-devel
yum -y install unzip
yum -y install telnet
yum -y install telnet-server
yum -y install wget
yum -y install svn
yum -y install ntpdate
View Code

8.關閉不必要的服務。

chkconfig autofs off
chkconfig acpid off
chkconfig sendmail off
chkconfig cups-config-daemon off
chkconfig cpus off
chkconfig xfs off
chkconfig lm_sensors off
chkconfig gpm off
chkconfig openibd off
chkconfig pcmcia off
chkconfig cpuspeed off
chkconfig nfslock off
chkconfig iptables off
chkconfig ip6tables off
chkconfig rpcidmapd off
chkconfig apmd off
chkconfig sendmail off
chkconfig arptables_jf off
chkconfig microcode_ctl off
chkconfig rpcgssd off
centos7開始用systemctl取代chkconfig

9.安裝Java環境。

rpm -qa|grep java命令查看是否系統已安裝jdk包,如果有的話需要使用 rmp -e 軟件包名稱 命令先卸載(我的centos7 默認沒有java)。
上傳jdk包到/usr/目錄。然后解壓,重命名,配置環境變量

[root@hadoop ~]# cd /usr/
root@hadoop usr]# tar -xzvf jdk-8u11-linux-x64.tar.gz #解壓
[root@hadoop usr]# mv jdk1.8.0_11/ java/ 重命名
[root@hadoop usr]# vi /etc/profile #配置環境變量,添加如下4行
export JAVA_HOME=/usr/java
export JRE_HOME=/usr/java/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin

[root@hadoop usr]# source /etc/profile #使配置的環境變量生效
[root@hadoop usr]# java -version #查看
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

第二部分 Hadoop正式安裝

官方文檔:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html#Standalone_Operation

1.安裝Hadoop。上傳Hadoop安裝包到/usr/local/目錄下,然后解壓縮,重命名,配置環境變量

[root@hadoop usr]# cd /usr/local/
[root@hadoop local]# ls
bin  etc  games  hadoop-3.1.0.tar.gz  include  lib  lib64  libexec  sbin  share  src
[root@hadoop local]# tar xzvf hadoop-3.1.0.tar.gz  #解壓縮
[root@hadoop local]# mv hadoop-3.1.0 hadoop #重命名
[root@hadoop local]# vi /etc/profile #配置環境變量:將以下幾行添加到配置文件末尾,保存退出

export HADOOP_HOME
=/usr/local/hadoop #export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib:$HADOOP_PREFIX/lib/native" export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native export HADOOP_COMMON_LIB_NATIVE_DIR=/usr/local/hadoop/lib/native export HADOOP_OPTS="-Djava.library.path=/usr/local/hadoop/lib" #export HADOOP_ROOT_LOGGER=DEBUG,console export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin #hadoop-3.1.0必須添加如下5個變量否則啟動報錯,hadoop-2.x貌似不需要 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root [root@hadoop local]# source /etc/profile #使配置文件生效 [root@hadoop ~]# hadoop version #測試是否配置成功 Hadoop 3.1.0 Source code repository https://github.com/apache/hadoop -r 16b70619a24cdcf5d3b0fcf4b58ca77238ccbe6d Compiled by centos on 2018-03-30T00:00Z Compiled with protoc 2.5.0 From source with checksum 14182d20c972b3e2105580a1ad6990 This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.1.0.jar

2.修改hadoop的5個配置文件。非常重要。。。

現在先看一下hadooped目錄。我們可以看到,hadoop下一共有7個目錄,bin和sbin是可執行文件的目錄,etc是放配置文件的目錄,include、lib和libexec均是放一些類庫的,share是放一些共享類庫和jar包的。

[root@hadoop local]# cd hadoop
[root@hadoop hadoop]# ll
total 176
drwxr-xr-x 2 1000 1000    183 Mar 29 20:22 bin
drwxr-xr-x 3 1000 1000     20 Mar 29 20:01 etc
drwxr-xr-x 2 1000 1000    106 Mar 29 20:22 include
drwxr-xr-x 3 1000 1000     20 Mar 29 20:22 lib
drwxr-xr-x 4 1000 1000    288 Mar 29 20:22 libexec
-rw-rw-r-- 1 1000 1000 147145 Mar 21 13:57 LICENSE.txt
-rw-rw-r-- 1 1000 1000  21867 Mar 21 13:57 NOTICE.txt
-rw-rw-r-- 1 1000 1000   1366 Mar 21 13:57 README.txt
drwxr-xr-x 3 1000 1000   4096 Mar 29 20:01 sbin
drwxr-xr-x 4 1000 1000     31 Mar 29 20:36 share

首先,進入cd /usr/local/hadoop/etc/hadoop目錄,這5個配置文件均在此目錄中。

第一個:hadoop-env.sh

[root@hadoop hadoop]# vi hadoop-env.sh #添加如下一行變量
#hadoop-3.1.0是第54行,hadoop-2.7.7是第25行
#可以使用 :set number來顯示行數
export JAVA_HOME=/usr/java

第二個:core-site.xml(HADOOP-HDFS系統內核文件)

[root@hadoop hadoop]# vi core-site.xml #添加如下幾行
<configuration>
  <!--指定HADOOP所使用的文件系統schema(URI),HDFS的老大(NameNode)的地址-->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop:9000</value>   
  </property>
  <!--指定HADOOP運行時產生文件的存儲目錄-->
  <property>     <name>hadoop.tmp.dir</name>     <value>/var/hadoop/tmp</value>   </property> </configuration>

注意:在hadoop安裝目錄的文檔中有所有配置文件的默認參數表,用戶可以查看后,根據實際情況進行修改。

比如:在D:/hadoop-3.1.0/share/doc/hadoop/hadoop-project-dist/hadoop-common/core-default.html文檔中可以看到:

hadoop.tmp.dir的默認值是/tmp/hadoop-${user.name}。/tmp/是Linux系統的臨時目錄,如果我們不重新指定的話,默認Hadoop工作目錄在Linux的臨時目錄,一旦Linux系統重啟,所有文件將會清空,包括元數據等信息都丟失了,需要重新進行格式化,非常麻煩。

 

第三個:hdfs-site.xml 

[root@hadoop hadoop]# vi hdfs-site.xml #添加如下幾行
<configuration>
  <!--指定HDFS副本的數量-->
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <!--設置默認端口,這段是我后來加的,如果不加上會導致啟動hadoop-3.1.0后無法訪問50070端口查看HDFS管理界面,hadoop-2.7.7可以不加-->
  <property>
    <name>dfs.http.address</name>
    <value>192.168.42.134:50070</value>
  </property>
</configuration>

在D:\hadoop-3.1.0\share\doc\hadoop\hadoop-project-dist\hadoop-hdfs\hdfs-default.xml文檔中可以看到:

dfs.replication的默認值是3,由於HDFS的副本數不能大於DataNode數,而我們此時安裝的hadoop中只有一個DataNode,所以將dfs.replication值改為1。

dfs.namenode.http-address在hadoop-3.1.0版本上的默認值是 0.0.0.0:9870 ,在hadoop-2.7.7版本上的默認值是0.0.0.0:50070,所以不同版本可以通過不同端口訪問NameNode。

 

第四個:mapred-site.xml

[root@hadoop hadoop]# mv mapred-site.xml.templete mapred-site.xml #重命名,hadoop-3.1.0系統中就是mapred-site.xml不需要改名,hadoop-2.7.7需要改名
[root@hadoop hadoop]# vi mapred-site.xml #添加如下幾行,指定hadoop運行在哪種計算框架上,這里指定yarn框架。
<!--指定mr運行在yarn上-->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>

第五個:yarn-site.xml

[root@hadoop hadoop]# vi yarn-site.xml #添加如下幾行
<configuration>
    <!-- 指定YARN的老大(ResourceManager)的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop</value>
    </property>
    <!-- 指定reducer獲取數據的方式-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

其實還有第6個文件slaves,內容為localhost,不需要修改。slaves這個文件指定DataNode在哪台機器上。這個文件在hadoop-2.7.7中存在,但是在hadoop-3.1.0里沒有這個文件,我懷疑是該文件改名為workers了。當搭建分布式hadoop集群時,需要修改這個文件,配置DataNode在哪台機器上。

舊版本中貌似有個masters文件用來配置SecondaryNameNode在哪台機器上(最好不要跟NameNode放在同一台機器上),但是我在新版本目錄中沒找到這個文件,不知道新版本如何配置SecondaryNameNode?

 

3.解決互信問題。

主要是目的是當hadoop集群有多台機器時,我們可以在任意一台機器上輸入start-all.sh命令啟動集群中的所有節點,方便快捷。如果不配置免密碼登錄的話,那么我們需要一台一台機器輸入密碼登錄后分別啟動各個節點,非常麻煩。

方式一:配置ssh,生成密鑰,使ssh可以免密碼連接localhost

[root@hadoop rpms_yum]# cd /root
[root@hadoop ~]# ssh-keygen -t rsa #生成ssh密鑰對
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #直接回車
Enter passphrase (empty for no passphrase): #直接回車
Enter same passphrase again: #直接回車
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:9NevFFklAS5HaUGJtVrfAlbYk82bStTwPvHIWY7as38 root@hadoop
The key's randomart image is:
+---[RSA 2048]----+
|           +*O*=.|
|          .o=+=o+|
|        . ..O  +=|
|       . . * *.%o|
|        S o o %o+|
|           . + +.|
|            . + .|
|             . +E|
|              o.o|
+----[SHA256]-----+
[root@hadoop ~]# cd .ssh/
[root@hadoop .ssh]# ls #id_rsa為私鑰,id_rsa.pub為公鑰
id_rsa  id_rsa.pub  known_hosts
[root@hadoop .ssh]# cp id_rsa.pub authorized_keys #使主機之間可以免密碼登錄
[root@hadoop .ssh]# ssh hadoop date #查看(不需要輸入密碼,直接輸出結果,說明免密成功)
Mon Jul 16 05:02:27 EDT 2018

方式二:采用sshUserSetup.sh腳本去解決互信問題(sshUserSetup.sh是Oracle自帶的一個快速配置互信的腳本程序,我們可以拿來借用一下)
將sshUserSetup.sh上傳到/root目錄,執行命令搭建本機互信(因為本機有2個節點,NameNode和DataNode)

[root@hadoop ~]# cd /root/
[root@hadoop ~]# ls
anaconda-ks.cfg  sshUserSetup.sh
[root@hadoop ~]# sh sshUserSetup.sh -user root -hosts "hadoop" -advanced -noPromptPassphrase 
#這個文件我是從網上找的,執行命令后總是報錯:syntax error near unexpected token `else'

第三部分 啟動Hadoop集群

1.首先格式化NameNode

注意:如果格式化NameNode之后運行過hadoop,然后又想再格式化一次NameNode,那么需要先刪除第一次運行Hadoop后產生的VERSION文件,否則會出錯,詳情見第四部分問題4。

[root@hadoop ~]# hdfs namenode -format #中間沒有報錯並且最后顯示如下信息表示格式化成功
...
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop/192.168.42.134
************************************************************/

格式化完成后,系統會在dfs.data.dir目錄下生成元數據信息。

2.輸入 start-all.sh 啟動

[root@hadoop hadoop]# start-all.sh
Starting namenodes on [hadoop]
Last login: Mon Jul 16 05:02:39 EDT 2018 from hadoop on pts/1
Last failed login: Mon Jul 16 05:51:35 EDT 2018 from 192.168.42.131 on ssh:notty
There was 1 failed login attempt since the last successful login.
Starting datanodes
Last login: Mon Jul 16 05:57:58 EDT 2018 on pts/1
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Starting secondary namenodes [hadoop]
Last login: Mon Jul 16 05:58:01 EDT 2018 on pts/1
2018-07-16 05:58:41,527 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting resourcemanager
Last login: Mon Jul 16 05:58:20 EDT 2018 on pts/1
Starting nodemanagers
Last login: Mon Jul 16 05:58:44 EDT 2018 on pts/1

3.執行 jps 驗證集群是否啟動成功

[root@hadoop hadoop]# jps #顯示以下幾個進程說明啟動成功
96662 Jps
95273 DataNode #可有可無
95465 SecondaryNameNode #重要
95144 NameNode #重要
95900 NodeManager #可有可無
95775 ResourceManager #非常重要

4.關閉hadoop集群

[root@hadoop hadoop]# stop-all.sh
Stopping namenodes on [hadoop]
Last login: Mon Jul 16 05:58:46 EDT 2018 on pts/1
Stopping datanodes
Last login: Mon Jul 16 06:19:41 EDT 2018 on pts/1
Stopping secondary namenodes [hadoop]
Last login: Mon Jul 16 06:19:49 EDT 2018 on pts/1
2018-07-16 06:20:25,023 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Stopping nodemanagers
Last login: Mon Jul 16 06:20:13 EDT 2018 on pts/1
Stopping resourcemanager
Last login: Mon Jul 16 06:20:25 EDT 2018 on pts/1

5.登錄HDFS管理界面(NameNode):http://ip:50070

6.登錄MR管理界面: http://ip:8088

第四部分 一些問題?

1.我們可以看到不管是啟動還是關閉hadoop集群,系統都會報如下錯誤:

 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

解決方式:先看看我們安裝的hadoop是否是64位的

[root@hadoop hadoop]# file /usr/local/hadoop/lib/native/libhadoop.so.1.0.0  #出現以下信息表示我們的hadoop是64位的
/usr/local/hadoop/lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=8d84d1f56b8c218d2a33512179fabffbf237816a, not stripped

永久解決方式:

[root@hadoop hadoop]# vi /usr/local/hadoop/etc/hadoop/log4j.properties #在文件末尾添加如下一句,保存退出
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=Error

2.hadoop-3.1.0啟動hadoop集群時還有可能可能會報如下錯誤信息:

[root@hadoop ~]# start-all.sh
Starting namenodes on [hadoop]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
2018-07-16 05:45:04,628 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.

解決方式:

[root@hadoop hadoop]# vi /etc/profile #添加如下幾行
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
[root@hadoop hadoop]# source /etc/profile

3.啟動hadoop后發現無法訪問50070端口?

解決方式參考這里

4.Hadoop集群啟動后,使用jps查看沒有DataNode進程?

原因:在第一次格式化dfs后,啟動並使用了hadoop,后來又重新執行了格式化命令(hdfs namenode -format),這時namenode的clusterID會重新生成,而datanode的clusterID 保持不變。因此就會造成datanode與namenode之間的id不一致。

解決方法:刪除dfs.data.dir(在core-site.xml中配置了此目錄位置)目錄里面的所有文件,重新格式化,最后重啟。

[root@hadoop ~]# stop-all.sh 
...
[root@hadoop ~]# rm -rf /var/hadoop/tmp/
[root@hadoop ~]# hdfs namenode -format
...
[root@hadoop ~]# start-all.sh 
...

 

 

另,找到一篇很好的hadoop搭建偽分布式集群的博文,推薦給大家。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM