在虚拟机CentOs7中配置hadoop2.7.5伪分布式

因完全分布式的集群安装hive后hive出现了点问题导致无法用hive进行select查询,导致学习进度卡住,所以我决定去搭建一个伪分布式的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进程?

那么我们如何搭建一个伪分布式集群呢?

我们要准备好以下条件:

1.我们的机器上需要安装VM虚拟软件
我安装的是VMware Workstation 15,安装方式大家可自行百度。

2.在虚拟软件上安装Linux(RHEL CENTOS UBUNTU…)
我安装的是Centos 7,安装方式可参考这里

3.配置好我们的网络环境
详情请看我的博客 正确的配置虚拟机静态网络

4.配置好我们的java环境
Hadoop毕竟是Java程序的集合,所以在安装Hadoop软件之前,我们必须配置好Java环境。我安装的的是jdk1.8版本。

5.安装HADOOP并做相应配置
我安装的是hadoop-3.1.2.tar.gz,建议安装2.7.5版本,因为其支持的hbase版本较多.
当然下面的步骤同样适应于hadoop-2.7.5版本的安装,其中有些微小的区别我也已经作了说明。

第一部分 安装前部署

首先,用root用户登录我们的虚拟机。

1.可以通过如下三个命令查看我们安装的虚拟机版本

[root@localhost ~]# cat /etc/issue #不知为什么我的虚拟机显示\S,正常情况下应该显示版本信息。
\S
Allen \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专版,其他的可以参考)
https://www.cnblogs.com/dunitian/p/4974761.html
(2)Centos 7 系统安装完毕修改网卡名为eth0
https://jingyan.baidu.com/album/7f41ecec1b022e593d095c1e.html?picindex=5

[root@hadoop ~]# ifconfig
-bash: ifconfig: command not found
[root@hadoop ~]# ip addr
1: lo:  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:  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.137.46/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完全没用!!!!!!!!!

4.修改 /etc/hosts。

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

[root@hadoop ~]# ip addr #查看IP地址
1: lo:  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: 	 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

[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.关闭防火墙

查看防火墙状态

firewall-cmd --state

停止firewall

systemctl stop firewalld.service

禁止firewall开机启动

systemctl disable firewalld.service 

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

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

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)

10.如果CentOS自带openjdk,但是它没有jps命令
在Centos7中,自带了OpenJdk。为了省事,我们很多时候就不把OpenJdk卸载,去重新安装JDK。但在大数据开发中,很多时候需要用到JPS命令,已经配置JDK的环境变量。

安装JDK开发插件

  1. 查看OpenJDK版本
    rpm -qa | grep openjdk
    可以看到安装的是 java 1.8版本

  2. yum install -y java-1.8.0-openjdk-devel

查看OpenJDK路径
1.whereis java
2. ll /usr/bin/java
3. ll /etc/alternatives/java
4. ll /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/bin/
可以看到 java的可执行文件,即可确认这是openJDK的执行路径。

配置OpenJDK环境变量
1.编辑 /etc/profile
2.添加以下代码:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64
export CLASSPATH=.: J A V A H O M E / j r e / l i b / r t . j a r : JAVA_HOME/jre/lib/rt.jar: JAVAHOME/jre/lib/rt.jar:JAVA_HOME/lib/dt.jar: J A V A H O M E / l i b / t o o l s . j a r e x p o r t P A T H = JAVA_HOME/lib/tools.jar export PATH= JAVAHOME/lib/tools.jarexportPATH=PATH:$JAVA_HOME/bin
3.更新环境变量
source /etc/profile

11.设置ntp时间同步服务
1、安装ntp
yum install -y ntp
2、设置NTP服务开机启动
chkconfig ntpd on
service nptd start

第二部分 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.2.tar.gz  include  lib  lib64  libexec  sbin  share  src
[root@hadoop local]# tar xzvf hadoop-3.1.2.tar.gz  #解压缩
[root@hadoop local]# mv hadoop-3.1.2 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.2必须添加如下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.2
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.2.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.2是第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 #添加如下几行

  
  
    fs.defaultFS
    hdfs://hadoop:9000   
  
  
  
    hadoop.tmp.dir
    /var/hadoop/tmp   
      

注意:在hadoop安装目录的文档中有所有配置文件的默认参数表,用户可以查看后,根据实际情况进行修改。

比如:在D:/hadoop-3.1.2/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 #添加如下几行

  
  
    dfs.replication
    1
  
  
   
    dfs.http.address 
    192.168.42.134:50070 
  

在D:\hadoop-3.1.2\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.2版本上的默认值是 0.0.0.0:9870 ,在hadoop-2.7.5版本上的默认值是0.0.0.0:50070,所以不同版本可以通过不同端口访问NameNode。

第四个:mapred-site.xml

[root@hadoop hadoop]# mv mapred-site.xml.templete mapred-site.xml #重命名,hadoop-3.1.2系统中就是mapred-site.xml不需要改名,hadoop-2.7.5需要改名
[root@hadoop hadoop]# vi mapred-site.xml #添加如下几行,指定hadoop运行在哪种计算框架上,这里指定yarn框架。


mapreduce.framework.name
yarn

第五个:yarn-site.xml

[root@hadoop hadoop]# vi yarn-site.xml #添加如下几行



    yarn.resourcemanager.hostname
    hadoop



    yarn.nodemanager.aux-services
    mapreduce_shuffle


其实还有第6个文件slaves,内容为localhost,不需要修改。slaves这个文件指定DataNode在哪台机器上。这个文件在hadoop-2.7.5中存在,但是在hadoop-3.1.2里没有这个文件,该文件改名为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.137.46
************************************************************/

格式化完成后,系统会在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 #显示以下几个进程说明启动成功
Jps
DataNode #可有可无
SecondaryNameNode #重要
NameNode #重要
NodeManager #可有可无
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

在虚拟机CentOs7中配置hadoop2.7.5伪分布式_第1张图片
6.登录MR管理界面: http://ip:8088

在虚拟机CentOs7中配置hadoop2.7.5伪分布式_第2张图片
附:hdfs常用命令
在虚拟机CentOs7中配置hadoop2.7.5伪分布式_第3张图片

第四部分 一些问题?

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.2启动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端口?
解决方式参考
https://blog.csdn.net/Neone__u/article/details/53741786

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 

本篇文章参考:
https://www.cnblogs.com/zhengna/p/9316424.html

你可能感兴趣的:(大数据)