运行hadoop需要jdk支撑,所以首先要安装jdk
root@s100:/soft# tar xf jdk-8u162-linux-x64.tar.gz
root@s100:/soft# ln -s /soft/jdk1.8.0_162 /soft/jdk
#添加java的环境变量
root@s100:~# vim /etc/environment
JAVA_HOME=/soft/jdk
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/so
ft/jdk/bin"
root@s100:/soft# source /etc/environment
#测试java环境变量是否生效
root@s100:~# java -version
java version "1.8.0_162"
安装完jdk后,就可以安装hadoop了
root@s100:/soft# tar xf hadoop-2.7.5.tar.gz
root@s100:/soft# ln -s /soft/hadoop-2.7.5 /soft/hadoop
#添加hadoop的环境变量到$PATH
root@s100:/soft# vim /etc/environment
JAVA_HOME=/soft/jdk
HADOOP_HOME=/soft/hadoop
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/so
ft/jdk/bin:/soft/hadoop/bin:/soft/hadoop/sbin"
root@s100:/soft# source /etc/environment
#查看hadoop环境变量是否生效
root@s100:~# hadoop version
Error: JAVA_HOME is not set and could not be found.
#报错,说明没有加载java_home,解决办法为重新启动服务器。然后再查看hadoop正常了
root@s100:~# reboot
root@s100:~# hadoop version
Hadoop 2.7.5
hadoop的运行模式分为:独立/本地模式、伪分布式模式、完全分布式模式
在hadoop部署完后默认的模式为独立/本地模式,在独立模式下可以进行测试和开发环境,所有的程序运行在一个JVM中,不需要启动hadoop进程。在独立模式下应用的文件系统就是本地文件系统。
伪分布式完全类似于完全分布式,但其只有一个节点。而在生产环境下主要用的还是完全分布式模式
hadoop的伪分布式模式部署方式如下:
root@s100:~# cd /soft/hadoop/etc/hadoop/
#修改core-site.xml
root@s100:/soft/hadoop/etc/hadoop# vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
#修改hdfs-site.xml
root@s100:/soft/hadoop/etc/hadoop# vim hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
#修改mapred-site.xml.template
root@s100:/soft/hadoop/etc/hadoop# vim mapred-site.xml.template
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
#修改yarn-site.xml
root@s100:/soft/hadoop/etc/hadoop# vim yarn-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
创建密钥对
root@s100:~# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
root@s100:~# cd .ssh/
root@s100:~/.ssh# cp id_rsa.pub authorized_keys
#测试无密码登录
root@s100:~# ssh localhsot
在修改完上面的几个配置文件后,接下来就要对hadoop文件系统格式化,启动hadoop
#格式hadoop文件系统
root@s100:~# hadoop namenode -format
#启动hadoop进行,当然也可以停止hadoop进程用stop-all.sh
root@s100:~# start-all.sh
#查看hadoop进程
root@s100:~# jps
4977 ResourceManager #资源管理进程RM
4482 DataNode #收据节点DN
4835 SecondaryNameNode #辅助名称节点2NN
4228 NameNode #名称节点NN
5509 Jps
5239 NodeManager #节点管理进程NM
#当然也可以通过ps来查看上面5个进程是否启动成功
root@s100:~# ps -ef
root 4228 1 8 17:20 ? 00:00:04 /soft/jdk/bin/java -Dproc_namen
root 4482 1 7 17:20 ? 00:00:03 /soft/jdk/bin/java -Dproc_datan
root 4835 1 7 17:21 ? 00:00:02 /soft/jdk/bin/java -Dproc_secon
root 4977 1 22 17:21 pts/0 00:00:06 /soft/jdk/bin/java -Dproc_resou
root 5239 1 20 17:21 ? 00:00:05 /soft/jdk/bin/java -Dproc_nodem
创建hadoop目录方式为:
root@s100:~# hadoop fs -mkdir -p /user/ubuntu/data
root@s100:~# hadoop fs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2018-04-14 17:24 /user
#如果要递归显示hadoop目录 使用-R参数
root@s100:~# hadoop fs -ls -R /
drwxr-xr-x - root supergroup 0 2018-04-14 17:24 /user
drwxr-xr-x - root supergroup 0 2018-04-14 17:24 /user/ubuntu
drwxr-xr-x - root supergroup 0 2018-04-14 17:24 /user/ubuntu/data
hadoop完全分布式部署方式如下:
要进行完全分布式的部署,就要用到集群架构,有一个节点作为namenode和resourcemanager,有一个节点作为secondarynamenode,其他节点作为datanode和nodemanager.这里让s100主机作为namenode,s104主机作为secondarynamenode节点,s101、s102、s103作为datanode
通过s100命令ssh-keygen创建的秘钥对将公钥发送到其他机器进行免密码登录,还要讲hosts文件分发到其他机器上。
#修改hosts文件
root@s100:~# vim /etc/hosts
127.0.0.1 localhost
192.168.1.100 s100
192.168.1.101 s101
192.168.1.102 s102
192.168.1.103 s103
192.168.1.104 s104
#分发hosts文件
root@s100:~# scp /etc/hosts s101:/etc/
root@s100:~# scp /etc/hosts s102:/etc/
root@s100:~# scp /etc/hosts s103:/etc/
root@s100:~# scp /etc/hosts s104:/etc/
#分发s100的ssh公钥到其他机器上,当然首先要保证其他机器家目录下有.ssh目录
root@s100:~/.ssh# cp id_rsa.pub authorized_keys
root@s100:~/.ssh# scp authorized_keys s101:~/.ssh/
root@s100:~/.ssh# scp authorized_keys s102:~/.ssh/
root@s100:~/.ssh# scp authorized_keys s103:~/.ssh/
root@s100:~/.ssh# scp authorized_keys s104:~/.ssh/
因为是集群架构,所以还要讲s100主机上部署好的jdk和hadoop软件也要分发到其他机器上,首先要保证其他机器上也要有你要分发到的目录,比如/soft目录
root@s100:~/.ssh# rsync -rl /soft/* s101:/soft/
root@s100:~/.ssh# rsync -rl /soft/* s102:/soft/
root@s100:~/.ssh# rsync -rl /soft/* s103:/soft/
root@s100:~/.ssh# rsync -rl /soft/* s104:/soft/
将java和hadoop的环境变量文件environment分发下去
root@s100:~# scp /etc/environment s101:/etc/
root@s100:~# scp /etc/environment s102:/etc/
root@s100:~# scp /etc/environment s103:/etc/
root@s100:~# scp /etc/environment s104:/etc/
#使环境变量生效,分别在分发到的机器上执行source命令,比如在s101上
root@s101:~# source /etc/environment
#然后执行如下命令,检查java和hadoop部署是否成功
root@s101:~# java -version
root@s101:~# hadoop version
#注意点,如果执行hadoop version报错的话,就要重启机器是hadoop能够调用jdk
接下来正式部署hadoop的完全分布式模式,首先停止在伪分布式模式下的hadoop进程:stop-all.sh
修改hadoop的配置文件,配置hadoop为完全分布式模式,分别配置core-site.xml hdfs-site.xml slaves yarn-site.xml,设置完配置文件后将其分发到s101 s102 s103 s104机器上
#设置s100作为namenode节点
root@s100:/soft/hadoop/etc/hadoop# vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://s100/</value>
</property>
</configuration>
#设置s100作为resourcemanager节点
root@s100:/soft/hadoop/etc/hadoop# vim yarn-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>s100</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
#设置s101 s102 s103作为datanode节点
root@s100:/soft/hadoop/etc/hadoop# vim slaves
s101
s102
s103
#设置hdfs-site.xml,设置副本数为3,因为有3个节点作为datanode
root@s100:/soft/hadoop/etc/hadoop# vim hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>s104:50090</value>
</property>
</configuration>
#最后将修改好的配置文件分发到s101 s102 s103机器上
root@s100:/soft/hadoop/etc/hadoop# scp core-site.xml hdfs-site.xml slaves yarn-site.xml s101:/soft/hadoop/etc/hadoop/
root@s100:/soft/hadoop/etc/hadoop# scp core-site.xml hdfs-site.xml slaves yarn-site.xml s102:/soft/hadoop/etc/hadoop/
root@s100:/soft/hadoop/etc/hadoop# scp core-site.xml hdfs-site.xml slaves yarn-site.xml s103:/soft/hadoop/etc/hadoop/
root@s100:/soft/hadoop/etc/hadoop# scp core-site.xml hdfs-site.xml slaves yarn-site.xml s104:/soft/hadoop/etc/hadoop/
最后启动hadoop进程如下,s100启动了NameNode和ResourceManager进程,而s101 s102 s103启动DataNode和NodeManager进程,s104运行SecondaryNameNode进程。
root@s100:~# start-all.sh
s100: starting namenode, logging to /soft/hadoop-2.7.5/logs/hadoop-root-namenode-s100.out
s102: starting datanode, logging to /soft/hadoop-2.7.5/logs/hadoop-root-datanode-s102.out
s101: starting datanode, logging to /soft/hadoop-2.7.5/logs/hadoop-root-datanode-s101.out
s103: starting datanode, logging to /soft/hadoop-2.7.5/logs/hadoop-root-datanode-s103.out
Starting secondary namenodes [s104]
s104: starting secondarynamenode, logging to /soft/hadoop-2.7.5/logs/hadoop-root-secondarynamenode-s104.out
starting yarn daemons
starting resourcemanager, logging to /soft/hadoop-2.7.5/logs/yarn-root-resourcemanager-s100.out
s101: starting nodemanager, logging to /soft/hadoop-2.7.5/logs/yarn-root-nodemanager-s101.out
s102: starting nodemanager, logging to /soft/hadoop-2.7.5/logs/yarn-root-nodemanager-s102.out
s103: starting nodemanager, logging to /soft/hadoop-2.7.5/logs/yarn-root-nodemanager-s103.out
在进程启动成功后就可以格式化hadoop文件系统并创建hadoop目录了
root@s100:~# hadoop namenode -format
root@s100:~# hadoop fs -mkdir -p /user/ubuntu/data
#上传一个文件到hadoop文件目录中
root@s100:~# hadoop fs -put helloworld.txt /user/ubuntu/data
解决重启hadoop后datanode节点启动不了datanode进程:hadoop每次开机启动都会清除临时目录tmp,而hadoop创建文件系统默认又在tmp目录,当namenode节点在重新格式化hadoop文件系统后改变了hadoop文件系统属性,这时重启hadoop有时会启动不了datanode节点的进程,解决办法为在每个节点下删除tmp目录下的hadoop文件系统目录hadoop-root,然后再格式化hadoop文件系统,再启动hadoop所有节点便启动正常。
由于重启服务器后,hadoop在tmp临时目录中文件系统目录会被删除,为了能让hadoop的文件系统目录永久保存下来,那么就要更改hadoop文件系统存放的默认目录,改成自定义的目录。根据hadoop的配置文件core-site.xml的定义的hadoop目录常量hadoop.tmp.dir,这个常量默认的值为/tmp/hadoop-${user.name},所以只要修改这个默认的值那么其他引用这个常量的配置信息都会自动修改成自定义的值。
#首先停止hadoop进程和在所有节点上创建一个hadoop目录作为自定义的hadoop文件系统目录
root@s100:~# stop-all.sh
root@s100:~# mkdir /root/hadoop #其他节点也要创建这个目录
#自定义hadoop文件系统的目录
root@s100:/soft/hadoop/etc/hadoop# vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://s100:8020/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop</value>
</property>
</configuration>
#重新分发core-site.xml文件
root@s100:/soft/hadoop/etc/hadoop# scp core-site.xml s101:/soft/hadoop/etc/hadoop/
root@s100:/soft/hadoop/etc/hadoop# scp core-site.xml s102:/soft/hadoop/etc/hadoop/
root@s100:/soft/hadoop/etc/hadoop# scp core-site.xml s103:/soft/hadoop/etc/hadoop/
root@s100:/soft/hadoop/etc/hadoop# scp core-site.xml s104:/soft/hadoop/etc/hadoop/
#在所以设备上删除hadoop默认的文件系统目录和hadoop的日志文件
root@s100:/soft/hadoop/etc/hadoop# rm -rf /tmp/hadoop-root
root@s100:/soft/hadoop/etc/hadoop# rm -fr /soft/hadoop/logs
#重新格式化hadoop文件系统,启动hadoop进程
root@s100:~# hadoop namenode -format
root@s100:~# start-all.sh
配置好自定义的hadoop文件系统目录后,可以测试重启机器后hadoop文件系统是否还存在,如果存在说明配置hadoop自定义的文件系统目录成功。
启动hadoop进程可以使用start-all.sh,这种方式是启动hadoop的所有进程,当然也可以使用hadoop-daemon.sh来单独启动进程。比如使用如下:
hadoop-daemon.sh namenode #表示在namenode节点上启动namenode进程
hadoop-daemon.sh datanode #表示在datanode节点上启动datanode进程
hadoop-daemon.sh secondarynamenode #表示在secondarynamenode节点上启动secondarynamenode进程
hadoop-daemons.sh datanode #表示在namenode节点执行这个命令启动所有datanode节点的datanode进程
配置hadoop的namenode节点为多目录及配置datanode为多目录
配置namenode的多目录作用为实现namenode节点的可靠性,配置的多目录存储的数据是相同的,相当于多个目录存储相同的副本。而配置datanode节点的多目录可以实现存储数据不同的block,多个目录不是存储相同的副本,仅仅只是让不同的block可以存储在不同的目录上而已。
#停止hadoop进程
root@s100:/soft/hadoop/etc/hadoop# stop-all.sh
#修改配置文件hdfs-site.xml如下
root@s100:/soft/hadoop/etc/hadoop# vim hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>s104:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp.dir}/dfs/name2</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp.dir}/dfs/data2</value>
</property>
</configuration>
#分发这个修改好的配置文件到其他主机上
root@s100:/soft/hadoop/etc/hadoop# scp hdfs-site.xml s101:/soft/hadoop/etc/hadoop/
root@s100:/soft/hadoop/etc/hadoop# scp hdfs-site.xml s102:/soft/hadoop/etc/hadoop/
root@s100:/soft/hadoop/etc/hadoop# scp hdfs-site.xml s103:/soft/hadoop/etc/hadoop/
root@s100:/soft/hadoop/etc/hadoop# scp hdfs-site.xml s104:/soft/hadoop/etc/hadoop/
上面的配置文件修改、分发完成后,就可以格式化hadoop文件系统并启动hadoop进程。
root@s100:~# hadoop namenode -format
root@s100:~# start-all.sh
这在生产环境下经常使用配置多目录的操作,让namenode配置多工作目录,每个目录可以挂载到不同的磁盘,即使有一块磁盘坏掉,也可以保证元数据不丢失(当然也可以从seconderynamenode拷贝工作目录到namenode节点,但不能完全恢复namenode的元数据,有一部分会丢失的);让datanode的数据目录配置成多目录,每个目录挂载到不同的磁盘,当datanode节点的磁盘紧张的时候,可以添加磁盘,让数据目录挂载到新添加的磁盘上。
那么为什么hadoop推荐存储大文件而不是小文件,因为存储在namenode上的一个block的元数据大小为150Byte,无论是大文件还是小文件,那么这个文件在namenode节点上的block元数据大小就是150byte,为了更好利用namenode的内存使用率推荐存储大文件。还有namenode内存大小常态为128G或更大。。。
hadoop存储block根据机架感知
为了保证数据的冗余性,我们要设计程序让数据块分布存储在不同的机架上,这就要用到机架感知的方式。实现的步骤如下:
1.编写一个类MyDNSToSwitchMapping,这个类实现DNSToSwitchMapping接口,然后对这个类打成一个JAR包,将这个jar包分发到集群各个节点上hadoop的classpath(/soft/hadoop/share/hadoop/common/lib)下
2.修改core-site.xml配置文件,然后将这个配置文件分发到其他几点上。添加如下内容
vim core-site.xml
<property>
<name>net.topology.node.switch.mapping.impl</name>
<value>com.goser.rackaware.MyDNSToSwitchMapping</value>
</property>
#这里的com.goser.rackaware.MyDNSToSwitchMapping类路径是表示在eclipse中定义的类路径
hadoop高可用架构配置
配置架构图如下:
配置环境为:为了试验需要,可以在一个节点上做为多个角色来使用,比如:mini1 mini2为namenode节点,mini3 mini4为resourcemanager节点 ,mini5 mini6 mini7位zookeeper集群和journode集群节点及datanode
首先在mini5 mini6 mini7部署zookeeper,至于如何配置zookeeper集群请参考
然后在mini1上部署hadoop,修改配置文件如下:
#修改core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bi/</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app/hdpdata/</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>mini5:2181,mini6:2181,mini7:2181</value>
</property>
</configuration>
#修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为bi,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>bi</value>
</property>
<!-- bi下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.bi</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.bi.nn1</name>
<value>mini1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.bi.nn1</name>
<value>mini1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.bi.nn2</name>
<value>mini2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.bi.nn2</name>
<value>mini2:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://mini5:8485;mini6:8485;mini7:8485/bi</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.bi</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
#修改mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
#修改yarn-site.xml
<configuration>
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>mini3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>mini4</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>mini5:2181,mini6:2181,mini7:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
#修改slaves
mini5
mini6
mini7
在mini1上配置完hadoop后,就可以使用rsync将hadoop远程同步到其他节点上
启动hadoop高可用的步骤如下:
1.启动zookeeper集群(分别在mini5、mini6、mini7上启动zk) zkServer.sh start
2.启动journalnode(分别在在mini5、mini6、mini7上执行) hadoop-daemon.sh start journalnode
3.格式化HDFS,在mini1上执行命令:hdfs namenode -format
格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里配置的是/home/hadoop/dhpdata,然后将/home/hadoop/dhpdata拷贝到hadoop02的//home/hadoop/dhpdata下
4.格式化ZKFC(在mini1上执行一次即可,其他节点不需要执行) hdfs zkfc -formatZK
5.启动HDFS(在mini1上执行) start-dfs.sh
6.启动YARN
在mini3上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动),在mini4上启动yarn :hadoop-daemon.sh start yarn
验证HDFS HA
首先向hdfs上传一个文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9 <pid of NN>
通过浏览器访问:http://192.168.1.101:50070
NameNode 'mini2:9000' (active)
这个时候mini2上的NameNode变成了active
在执行命令:
hadoop fs -ls /
-rw-r--r-- 3 root supergroup 1926 2014-02-06 15:36 /profile
刚才上传的文件依然存在!!!
手动启动那个挂掉的NameNode
hadoop-daemon.sh start namenode
通过浏览器访问:http://192.168.1.100:50070
NameNode 'mini1:9000' (standby)