配置hadoop环境、datanode扩容、增加服务器扩容

基本需求:搭建三台hadoop集群
扩展需求:datanode磁盘扩容和增加服务器扩容。
环境:CentOS6.8、hadoop-2.6.4、zookeeper-3.4.14
压缩包在结尾

Centos6.8安装

  1. 三台虚拟机通用配置:
    处理器数量、内核数量:1
    内存:2G
    网络:仅主机
    LSI Logic 推荐
    SCSI 推荐
    创建新虚拟磁盘
    磁盘大小:20G
    将磁盘拆分为多个文件
    自定义硬盘分区:/boot 200M
    swap 2000
    / 剩余全部

配置参考网址:特别鸣谢DanielMaster同学的文章

  1. 三台虚拟机名称依次为:vm1、vm2、vm3
    三台虚拟机用户密码:
    root用户密码是一样的:root123
    三台各有三个普通用户:hadoop
    密码一样:hadoop
  2. IP
    vm1:192.168.76.135
    vm2:192.168.76.129
    vm3:192.168.76.130
    IP相关:
    vi /etc/sysconfig/network-scripts/ifcfg-eht0;
    onboot改为yes
    BOOTPROTO改为static
    添加:
    IPADDR=192.168.76.132
    GATEWAY=192.168.76.1
    DNS1=192.168.1.1
    NETMASK=255.255.255.0
    保存退出
    重启服务:service network restart

安装java

tar -zxvf jdk-8u131-linux-x64.tar.gz
cd jdk1.8.0_131
pwd # 复制路径
vim /etc/profile
profile文件是系统环境变量的配置文件
在该文件的最后一行添加内容:
export JAVA_HOME=[path]
export PATH=$JAVA_HOME/bin:$PATH
保存退出
source /etc/profile
使环境变量生效
查看是否成功:
java -version

问题
jps报: command not found
jps与jdk有关,所以需要先安装jdk

Zookeeper安装

root用户下安装,非root用户运行:

  1. 解压Zookeeper的安装包
    tar -xvf zookeeper-3.4.14.tar.gz
  2. 进入安装目录的conf目录下:
    cd zookeeper-3.4.14/conf
  3. 复制:
    cp zoo_sample.cfg zoo.cfg
  4. 编辑zoo.cfg
    vim zoo.cfg
    修改
    dataDir=/home/software/zookeeper-3.4.14/tmp
    添加:(原有内容不用删除)
    server.1=192.168.76.135:2888:3888
    server.2=192.168.76.129:2888:3888
    server.3=192.168.76.130:2888:3888
    保存退出
  5. 创建dataDir指定的路径
    cd …
    mkdir tmp
  6. 进入这个目录
    cd tmp
  7. 编辑文件myid
    vim myid
    添加当前节点的编号,对应的server. 之后的那个数字
    保存退出
  8. 回到software目录下,远程拷贝给另外两个节点

scp -r zookeeper-3.4.14 root@192.168.76.129:/home/software/
scp -r zookeeper-3.4.14 root@192.168.76.130:/home/software/
密码:root123;

  1. 复制完成之后,需要修改myid(/zookeeper-3.4.14/tmp目录下)
  2. 赋予hadoop用户启动权限(三个节点都需要执行,如果使用root用户运行,可跳过)

chown -R hadoop:hadoop /home/software/zookeeper-3.4.14

  1. 切换到hadoop用户
    su hadoop
  2. 三个节点都进入bin目录启动Zookeeper
    cd zookeeper-3.4.14/bin
    sh zkServer.sh start
    启动完成之后等待半分钟到一分钟,然后查看三个节点的状态
    sh zkServer.sh status
    如果配置成功,那么三个节点中应该出现1个leader以及2个follower
    如果出错,则查看zookeeper.out文件(bin目录下)

Zookeeper的问题:

  • sh zkServer.sh status 报错
    Error contacting Service.It is probably not running.
    查看zookeeper.out文件(文件位置:zookeeper的bin目录下)
    发现报:
    java.net.NoRouteToHostException: No route to host
    往上翻有提示 binding to port 0.0.0.0/0.0.0.0:2181、cannot…ip…等
    解决:
    防火墙未关闭,关闭防火墙即可
    进入三台家目录 cd ~
    依次关闭防火墙
    service iptables stop 关闭防火墙
    chkconfig iptables off 永久关闭
    service iptables status 查看防火墙状态
    重新进入bin目录启动即可

Hadoop集群配置——root用户

root用户下:

  1. 三个节点关闭防火墙:
    service iptables stop
    chkconfig iptables off
  2. 三个节点需要修改主机名:
    vim /etc/sysconfig/network
    修改HOSTNAME属性,例如:
    HOSTNAME=hadoop01
    重新生效:
    source /etc/sysconfig/network
  3. 三个节点需要进行IP和主机名的映射:
    vim /etc/hosts
    添加:
    192.168.76.135 hadoop01
    192.168.76.129 hadoop02
    192.168.76.130 hadoop03
    注意:映射完成之后,三个节点的hosts文件应该是一样的
  4. 三个节点重启
    reboot
  5. 三个节点之间来配置免密登陆:
    ssh-keygen
    注意:这三句话在三个节点上都需要执行
    ssh-copy-id root@hadoop01
    ssh-copy-id root@hadoop02
    ssh-copy-id root@hadoop03
    输入yes
    密码:root123
    执行完成之后,每一个节点测试一下是否能够免密登陆:
    ssh hadoop01
    ssh hadoop02
    ssh hadoop03
  6. 安装JDK
  7. 安装Zookeeper
    ***** 在第一个节点上 *****
  8. 解压Hadoop的安装包:
    tar -xvf hadoop-2.7.1_64bit.tar.gz
  9. 进入Hadoop安装目录的子目录中:
    cd hadoop-2.7.1/etc/hadoop/
  10. 编辑hadoop-env.sh:
    vim hadoop-env.sh
    修改:
export JAVA_HOME=/home/software/java/jdk1.8.0_161 	
export HADOOP_CONF_DIR=/home/software/hadoop-2.6.4/etc/hadoop 

保存退出之后,重新生效:
source hadoop-env.sh
11. 编辑core-site.xml
vim core-site.xml
添加:

<!-- 指定在Zookeeper上注册的节点的名字 -->
	<property>
	    <name>fs.defaultFS</name>                
	    <value>hdfs://ns</value>
	</property>
	<!-- 指定Hadoop数据临时存放目录 -->
	<property>
	    <name>hadoop.tmp.dir</name>
	    <value>/home/software/hadoop-2.6.4/tmp</value>
	</property> 
	<!-- 指定zookeeper的存放地址 -->
	<property>
	    <name>ha.zookeeper.quorum</name>
	    <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
	</property> 
  1. 编辑hdfs-site.xml
    vim hdfs-site.xml
    添加:
<!-- 绑定在Zookeeper上注册的节点名 -->
<property>
    <name>dfs.nameservices</name>
    <value>ns</value>
</property>
<!-- ns集群下有两个namenode,分别为nn1, nn2 -->
<property>
    <name>dfs.ha.namenodes.ns</name>
    <value>nn1,nn2</value>
</property>
<!--nn1的RPC通信-->
<property>
    <name>dfs.namenode.rpc-address.ns.nn1</name>
    <value>hadoop01:9000</value>
</property>
<!--nn1的http通信-->
<property>
    <name>dfs.namenode.http-address.ns.nn1</name>
    <value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
    <name>dfs.namenode.rpc-address.ns.nn2</name>
    <value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
    <name>dfs.namenode.http-address.ns.nn2</name>
    <value>hadoop02:50070</value>
</property>
<!--指定namenode的元数据在JournalNode上存放的位置,这样,namenode2可以从journalnode集群里的指定位置上获取信息,达到热备效果-->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/software/hadoop-2.6.4/tmp/journal</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
    <name>dfs.client.failover.proxy.provider.ns</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
</property>
<!--配置namenode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
<property>    
    <name>dfs.namenode.name.dir</name>    
    <value>file:///home/software/hadoop-2.6.4/tmp/hdfs/name</value>    
</property>    
<!--配置datanode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
<property>    
    <name>dfs.datanode.data.dir</name>    
    <value>file:///home/software/hadoop-2.6.4/tmp/hdfs/data</value>    
</property>
<!--配置副本数量-->    
<property>    
    <name>dfs.replication</name>    
    <value>3</value>    
</property>   
<!--设置用户的操作权限,false表示关闭权限验证,任何用户都可以操作-->                                                                    
<property>    
    <name>dfs.permissions</name>    
    <value>false</value>    
</property>  
  1. 编辑mapred-site.xml
    cp mapred-site.xml.template mapred-site.xml
    vim mapred-site.xml
    添加:
	<!--告诉hadoop以后MR运行在YARN上-->
	<property>    
	    <name>mapreduce.framework.name</name>    
	    <value>yarn</value>    
	</property>
  1. 编辑yarn-site.xml
    vim yarn-site.xml
    添加:
	<!--配置yarn的高可用-->
	<property>
	    <name>yarn.resourcemanager.ha.enabled</name>
	    <value>true</value>
	</property>
	<!--指定两个resourcemaneger的名称-->
	<property>
	    <name>yarn.resourcemanager.ha.rm-ids</name>
	    <value>rm1,rm2</value>
	</property>
	<!--配置rm1的主机-->
	<property>
	    <name>yarn.resourcemanager.hostname.rm1</name>
	    <value>hadoop01</value>
	</property>
	<!--配置rm2的主机-->
	<property>
	    <name>yarn.resourcemanager.hostname.rm2</name>
	    <value>hadoop03</value>
	</property>
	<!--开启yarn恢复机制-->
	<property>
	    <name>yarn.resourcemanager.recovery.enabled</name>
	    <value>true</value>
	</property>
	<!--执行rm恢复机制实现类-->
	<property>
	    <name>yarn.resourcemanager.store.class</name>
	    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
	</property>
	<!--配置zookeeper的地址-->
	<property>
	    <name>yarn.resourcemanager.zk-address</name>
	    <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
	</property>
	<!--执行yarn集群的别名-->
	<property>
	    <name>yarn.resourcemanager.cluster-id</name>
	    <value>ns-yarn</value>
	</property>
	<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
	<property>    
	    <name>yarn.nodemanager.aux-services</name>    
	    <value>mapreduce_shuffle</value>    
	</property>  
	<!-- 指定resourcemanager地址 -->
	<property>
	    <name>yarn.resourcemanager.hostname</name>
	    <value>hadoop03</value>
	</property>
  1. 编辑slaves:
    vim slaves
    添加三个节点的主机名,例如:
	hadoop01
	hadoop02
	hadoop03
  1. 将第一个节点上Hadoop的安装目录整个拷贝给另外两个节点:
    回到software目录下,然后拷贝:
	scp -r hadoop-2.6.4 root@hadoop02:/home/software/
	scp -r hadoop-2.6.4 root@hadoop03:/home/software/

***** 集群配置及启动 *****
17. 三个节点配置环境变量
vim /etc/profile
添加:

export HADOOP_HOME=/home/software/hadoop-2.6.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存退出,并且需要重新生效:
source /etc/profile
18. 三个节点启动Zookeeper
cd /home/software/zookeeper-3.4.14/bin
sh zkServer.sh start
启动完成之后,查看状态确认启动:
sh zkServer.sh status
19. 在第一个节点上格式化Zookeeper:
hdfs zkfc -formatZK
20. 在三个节点上启动JournalNode
hadoop-daemon.sh start journalnode
21. 在第一个节点上格式化NameNode
hdfs namenode -format
22. 在第一个节点上启动NameNode
hadoop-daemon.sh start namenode
23. 在第二个节点上格式化NameNode
hadoop namenode -bootstrapStandby
(表示将第二个namenode设置为备份状态)
24. 在第二个节点上启动NameNode
hadoop-daemon.sh start namenode
25. 在第一个和第二个节点上启动FailoverController切换节点状态
hadoop-daemon.sh start zkfc
26. 三个节点启动DataNode
hadoop-daemon.sh start datanode
27. 在第三个节点上启动yarn
start-yarn.sh
28. 在第一个节点上启动ResourceManager
yarn-daemon.sh start resourcemanager

***** 集群停止*****

  1. 先停止hdfs
    stop-dfs.sh
  2. 第三个节点停止yarn
    stop-yarn.sh
  3. 第一或者第二个节点停止resourcemanager
    yarn-daemon.sh stop resourcemanager
  4. 停止zookeeper
    sh zkServer.sh stop

补充:
如果启动完成之后,节点个数发生缺少,可以试图单独启动

  • 如果是缺少NameNode、DataNode、JournalNode、DFSZKFailoverController,利用hadoop-daemon.sh
    start xxx
  • 如果是缺少ResourceManager、NodeManager,利用yarn-daemon.sh start XXXX

jps之后,第一个节点上:
Jps
QuorumPeerMain
NameNode
DataNode
JournalNode
NodeManager
ResourceManager
DFSZKFailoverController
第二个节点上:
Jps
QuorumPeerMain
NameNode
DataNode
JournalNode
NodeManager
DFSZKFailoverController
第三个节点上:
Jps
QuorumPeerMain
DataNode
JournalNode
ResourceManager
NodeManager

问题:
启动Hadoop完全分布式之前,一定要先启动Zookeeper

  1. hdfs zkfc -formatZK — HA is not available
  2. command not found:环境变量配置错了或者配置完之后没有source
  3. unkown host:hosts文件映射错误或者主机名写错
  4. already running as 2830 ,jps — kill -9 2830 重新启动

Hadoop集群配置——非root用户

非root用户下:

  1. 三个节点关闭防火墙:
    service iptables stop
    chkconfig iptables off
  2. 三个节点需要修改主机名:
    vim /etc/sysconfig/network
    修改HOSTNAME属性,例如:
    HOSTNAME=hadoop01(三台都修改)
    重新生效:
    source /etc/sysconfig/network
  3. 三个节点需要进行IP和主机名的映射:
    vim /etc/hosts
    添加:
    192.168.76.135 hadoop01
    192.168.76.129 hadoop02
    192.168.76.130 hadoop03
    注意:映射完成之后,三个节点的hosts文件应该是一样的
  4. 三个节点重启
    reboot
  5. 三个节点之间来配置免密登陆:
    (1)确认ssh服务开启
    netstat -antp|grep sshd
    端口是22,最好三台都确认一下
    (2)root用户下:
    打开文件:vim /etc/ssh/sshd_config
    确保有以下配置,大概在50行:
AuthorizedKeysFile   .ssh/authorized_keys
PubkeyAuthentication  yes

(3)创建用户hadoop,并且passwd初始化密码:hadoop
(4)在第一个节点hadoop01上输入:
ssh hadoop@hadoop02,尝试登陆hadoop02,此时需要密码,因为尚未配置免密登录
(5)三个节点切换到hadoop用户:su - hadoop
生成秘钥(三个节点都执行):ssh-keygen
(知识点补充:ssh-keygen -t rsa中-t表示加密类型,此处ssh-keygen即可)
(6)配置秘钥授权文件
6.1 在hadoop01节点上以hadoop用户生成一个空白文件authorized_keys

touch ~/.ssh/authorized_keys

6.2 将hadoop01自己的公钥放入文件authorized_keys中

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

6.3 以hadoop02节点的hadoop用户,将hadoop02的公钥传输到hadoop01节点,文件名为hadoop02.id_rsa.pub

scp ~/.ssh/id_rsa.pub hadoop@hadoop01:~/.ssh/hadoop02.id_rsa.pub

6.4 在hadoop01节点上,将hadoop02.id_rsa.pub的内容写入authorized_keys文件

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

6.5 以hadoop03节点上的hadoop用户,将hadoop03的公钥传输到hadoop01节点,文件名为hadoop03.id_rsa.pub

scp ~/.ssh/id_rsa.pub hadoop@hadoop01:~/.ssh/hadoop03.id_rsa.pub

6.6 在hadoop01机器上,将hadoop03.id_rsa.pub的内容写入authorized_keys文件

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

此时authorized_keys文件中已经有了hadoop01、hadoop02、hadoop03的公钥;

(7)同步秘钥授权文件

以hadoop用户登录hadoop01节点,执行以下命令将秘钥授权文件同步到hadoop02、hadoop03节点:

scp ~/.ssh/authorized_keys hadoop@hadoop02:~/.ssh/
scp ~/.ssh/authorized_keys hadoop@hadoop03:~/.ssh/

至此,秘钥授权文件已经同步到所有节点。如果前面的所有操作用的是root用户,此时已经可以免密码登录成功了,
但是今天因为用的不是root账号,此时在hadoop01输入命令ssh hadoop@hadoop02,依然要求输入hadoop02的账号的密码,这是因为文件和文件夹权限的问题导致的,接下来解决权限问题:
(8)配置文件/夹的权限(三台都需要执行)

chmod 700  ~/.ssh
chmod 600  ~/.ssh/authorized_keys

至此,非root账号的SSH免密登录配置已经完成
(9)在三个节点上测试免密登录
ssh hadoop01
ssh hadoop02
ssh hadoop03
6. 切换回root用户
在/home/software/下解压hadoop-2.6.4压缩包
赋予hadoop用户安装权限:

chown -R hadoop:hadoop /home/software/hadoop-2.6.4
  1. 切换至hadoop用户
    su hadoop
  2. 进入Hadoop安装目录的子目录中:
    cd hadoop-2.6.4/etc/hadoop/
  3. 编辑hadoop-env.sh:
    vim hadoop-env.sh
    修改:
export JAVA_HOME=/home/software/jdk1.8.0_161
export HADOOP_CONF_DIR=/home/software/hadoop-2.6.4/etc/hadoop

保存退出之后,重新生效:
source hadoop-env.sh
10. 编辑core-site.xml
vim core-site.xml
添加:

	<!-- 指定在Zookeeper上注册的节点的名字 -->
	<property>
	    <name>fs.defaultFS</name>                
	    <value>hdfs://ns</value>
	</property>
	<!-- 指定Hadoop数据临时存放目录 -->
	<property>
	    <name>hadoop.tmp.dir</name>
	    <value>/home/software/hadoop-2.6.4/tmp</value>
	</property> 
	<!-- 指定zookeeper的存放地址 -->
	<property>
	    <name>ha.zookeeper.quorum</name>
	    <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
	</property> 
  1. 编辑hdfs-site.xml——注:此文件只有一处与hadoop的root用户搭建不一样,即隔离机制免密登录的<value>
    
    vim hdfs-site.xml
    添加:
	<!-- 绑定在Zookeeper上注册的节点名 -->
	<property>
	    <name>dfs.nameservices</name>
	    <value>ns</value>
	</property>
	<!-- ns集群下有两个namenode,分别为nn1, nn2 -->
	<property>
	    <name>dfs.ha.namenodes.ns</name>
	    <value>nn1,nn2</value>
	</property>
	<!--nn1的RPC通信-->
	<property>
	    <name>dfs.namenode.rpc-address.ns.nn1</name>
	    <value>hadoop01:9000</value>
	</property>
	<!--nn1的http通信-->
	<property>
	    <name>dfs.namenode.http-address.ns.nn1</name>
	    <value>hadoop01:50070</value>
	</property>
	<!-- nn2的RPC通信地址 -->
	<property>
	    <name>dfs.namenode.rpc-address.ns.nn2</name>
	    <value>hadoop02:9000</value>
	</property>
	<!-- nn2的http通信地址 -->
	<property>
	    <name>dfs.namenode.http-address.ns.nn2</name>
	    <value>hadoop02:50070</value>
	</property>
	<!--指定namenode的元数据在JournalNode上存放的位置,这样,namenode2可以从journalnode集群里的指定位置上获取信息,达到热备效果-->
	<property>
	    <name>dfs.namenode.shared.edits.dir</name>
	    <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value>
	</property>
	<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
	<property>
	    <name>dfs.journalnode.edits.dir</name>
	    <value>/home/software/hadoop-2.6.4/tmp/journal</value>
	</property>
	<!-- 开启NameNode故障时自动切换 -->
	<property>
	    <name>dfs.ha.automatic-failover.enabled</name>
	    <value>true</value>
	</property>
	<!-- 配置失败自动切换实现方式 -->
	<property>
	    <name>dfs.client.failover.proxy.provider.ns</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
	<!-- 配置隔离机制 -->
	<property>
	    <name>dfs.ha.fencing.methods</name>
	    <value>sshfence</value>
	</property>
	<!-- 使用隔离机制时需要ssh免登陆 -->
	<property>
	    <name>dfs.ha.fencing.ssh.private-key-files</name>
	    <value>/home/hadoop/.ssh/id_rsa</value>
	</property>
	<!--配置namenode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
	<property>    
	    <name>dfs.namenode.name.dir</name>    
	    <value>file:///home/software/hadoop-2.6.4/tmp/hdfs/name</value>    
	</property>    
	<!--配置datanode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
	<property>    
	    <name>dfs.datanode.data.dir</name>    
	    <value>file:///home/software/hadoop-2.6.4/tmp/hdfs/data</value>    
	</property>
	<!--配置副本数量-->    
	<property>    
	    <name>dfs.replication</name>    
	    <value>3</value>    
	</property>   
	<!--设置用户的操作权限,false表示关闭权限验证,任何用户都可以操作-->                                                                    
	<property>    
	    <name>dfs.permissions</name>    
	    <value>false</value>    
	</property>  	
  1. 编辑mapred-site.xml
    cp mapred-site.xml.template mapred-site.xml
    vim mapred-site.xml
    添加:
	<property>    
	    <name>mapreduce.framework.name</name>    
	    <value>yarn</value>    
	</property>
  1. 编辑yarn-site.xml
    vim yarn-site.xml
    添加:
<!--配置yarn的高可用-->
	<property>
	    <name>yarn.resourcemanager.ha.enabled</name>
	    <value>true</value>
	</property>
	<!--指定两个resourcemaneger的名称-->
	<property>
	    <name>yarn.resourcemanager.ha.rm-ids</name>
	    <value>rm1,rm2</value>
	</property>
	<!--配置rm1的主机-->
	<property>
	    <name>yarn.resourcemanager.hostname.rm1</name>
	    <value>hadoop01</value>
	</property>
	<!--配置rm2的主机-->
	<property>
	    <name>yarn.resourcemanager.hostname.rm2</name>
	    <value>hadoop03</value>
	</property>
	<!--开启yarn恢复机制-->
	<property>
	    <name>yarn.resourcemanager.recovery.enabled</name>
	    <value>true</value>
	</property>
	<!--执行rm恢复机制实现类-->
	<property>
	    <name>yarn.resourcemanager.store.class</name>
	    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
	</property>
	<!--配置zookeeper的地址-->
	<property>
	    <name>yarn.resourcemanager.zk-address</name>
	    <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
	</property>
	<!--执行yarn集群的别名-->
	<property>
	    <name>yarn.resourcemanager.cluster-id</name>
	    <value>ns-yarn</value>
	</property>
	<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
	<property>    
	    <name>yarn.nodemanager.aux-services</name>    
	    <value>mapreduce_shuffle</value>    
	</property>  
	<!-- 指定resourcemanager地址 -->
	<property>
	    <name>yarn.resourcemanager.hostname</name>
	    <value>hadoop03</value>
	</property>
  1. 编辑slaves:
    vim slaves
    添加三个节点的主机名,例如:
hadoop01
hadoop02
hadoop03
  1. 将第一个节点上Hadoop的安装目录整个拷贝给另外两个节点:
    回到software目录下,然后拷贝:
scp -r hadoop-2.6.4 root@hadoop02:/home/software/
scp -r hadoop-2.6.4 root@hadoop03:/home/software/
  1. 三个节点配置环境变量
    
    vim /etc/profile
    添加:
export HADOOP_HOME=/home/software/hadoop-2.6.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存退出,并且需要重新生效:
source /etc/profile
18. 赋予hadoop02、hadoop03的hadoop用户权限
chown -R hadoop:hadoop /home/software/hadoop-2.6.4
19. 三个节点启动Zookeeper
cd /home/software/zookeeper-3.4.14/bin
sh zkServer.sh start
启动完成之后,查看状态确认启动:
sh zkServer.sh status
20. 在第一个节点上格式化Zookeeper:
hdfs zkfc -formatZK
21. 在三个节点上启动JournalNode
hadoop-daemon.sh start journalnode
22. 在第一个节点上格式化NameNode
hdfs namenode -format
23. 在第一个节点上启动NameNode
hadoop-daemon.sh start namenode
24. 在第二个节点上格式化NameNode
hadoop namenode -bootstrapStandby
表示将第二个namenode设置为备份状态
25. 在第二个节点上启动NameNode
hadoop-daemon.sh start namenode
26. 三个节点启动DataNode
hadoop-daemon.sh start datanode
27. 在第一个和第二个节点上启动FailoverController切换节点状态
hadoop-daemon.sh start zkfc
28. 在第三个节点上启动yarn
start-yarn.sh
29. 在第一个节点上启动ResourceManager
yarn-daemon.sh start resourcemanager

启动顺序:
1、启动zookeeper(每台都执行)
zkServer.sh status

2、启动journalnode(每台都执行)
hadoop-daemon.sh start journalnode

3、启动hdfs
start-dfs.sh

4、hadoop03节点启动yarn
start-yarn.sh

5、hadoop01节点启动yarn进程
yarn-daemon.sh start resourcemanager

集群停止:

  1. 先停止hdfs
    stop-dfs.sh
  2. 第三个节点停止yarn
    stop-yarn.sh
  3. 第一或者第二个节点停止resourcemanager
    yarn-daemon.sh stop resourcemanager
  4. 停止zookeeper
    sh zkServer.sh stop

hadoop集群增加服务器

  1. 创建一台虚拟机,可以ping通主机
  2. 配置ip
  3. 关闭防火墙
    service iptables stop
    chkconfig iptables off
    service iptables status
  4. 关闭selinux
    vim /etc/selinux/config
    SELINUX=disabled
  5. 设置主机名为hadoop04
    vim /etc/sysconfig/network
  6. 配置主机名和ip对应关系—每个节点都要设置一致
    vim /etc/hosts
  7. 配置免密登录:
    root用户下这么配置:
    在hadoop04上:
	ssh-keygen
	ssh-copy-id hadoop01
	ssh-copy-id hadoop02
	ssh-copy-id hadoop03

在hadoop01、02、03上依次执行:
ssh-copy-id hadoop04

hadoop用户配置免密登录(基于三台的基础):
su hadoop
ssh-keygen
以hadoop04节点的hadoop用户,将hadoop04的公钥传输到hadoop01节点,文件名hadoop04.id_rsa.pub

scp ~/.ssh/id_rsa.pub hadoop@hadoop01:~/.ssh/hadoop02.id_rsa.pub

在hadoop01节点上,将hadoop04.id_rsa.pub的内容写入authorized_keys文件

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

以hadoop用户登录hadoop01节点,执行以下命令将秘钥授权文件同步到hadoop02、hadoop03节点、hadoop04节点:

scp ~/.ssh/authorized_keys hadoop@hadoop02:~/.ssh/
scp ~/.ssh/authorized_keys hadoop@hadoop03:~/.ssh/
scp ~/.ssh/authorized_keys hadoop@hadoop04:~/.ssh/

配置文件/夹的权限(第四个节点)

chmod 700  ~/.ssh
chmod 600  ~/.ssh/authorized_keys

至此,非root账号的SSH免密登录配置已经完成
在三个节点上测试免密登录
ssh hadoop01
ssh hadoop02
ssh hadoop03
ssh hadoop04
8. 配置JDK
解压 tar -zxvf xxx
pwd 复制路径
vim /etc/profile
(还需要配置hadoop环境变量,可以直接从hadoop01上远程拷贝一个:scp -r /etc/profile root@hadoop04:/etc/profile)
export JAVA_HOME=[path]
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
source /etc/profile
测试:java -version
9. 解压hadoop安装包
10. 在主节点中拷贝所有的hadoop配置文件到新的节点

scp	-r	/home/software/hadoop-2.6.4/etc/hadoop/* root@hadoop04:/home/software/hadoop-2.6.4/etc/hadoop/
  1. 在主节点中设置白名单配置文件(两个namenode都需要)
touch /home/software/hadoop-2.6.4/etc/hadoop/dfs.hosts
vim /home/software/hadoop-2.6.4/etc/hadoop/dfs.hosts

将所有节点ip添加到dfs.hosts中
hadoop01、02、03、04
12. 在主节点添加配置到hdfs-site.xml中(两个namenode都需要)

	<property>
	<name>dfs.hosts</name>
	<value>/home/software/hadoop-2.6.4/etc/hadoop/dfs.hosts</value>
	</property>
  1. 将新节点的ip添加到slaves
    (两个namenode都需要,最好四个节点都同步)
    vim slaves
    hadoop01、02、03、04

14.启动完成后,在第四个节点平衡

hdfs dfsadmin -setBalancerBandwidth 67108864
start-balancer.sh -threshold 5

启动
1、启动zookeeper(每台都执行)
zkServer.sh status

2、启动journalnode(每台都执行)
hadoop-daemon.sh start journalnode

3、启动hdfs
start-dfs.sh

4、hadoop03节点启动yarn
start-yarn.sh

5、hadoop01节点启动yarn进程
yarn-daemon.sh start resourcemanager

hadoop对datanode扩容

先停掉要扩容节点服务:
一、 扩展磁盘

  1. 关闭虚拟机-设置-磁盘-扩展
  2. 查看磁盘情况
    fdisk -l 或者 df -h
  3. 创建磁盘
    fdisk /dev/sda
    m 表示显示每个字母代表的含义
    n
    p
    1
    两次回车
    wq 保存退出
    如果提示重启,则重启
  4. 格式化
    mkfs.ext3 /dev/sda4
    可能出现的问题
    如果格式化失败,报“不是一个目录…不存在”的错
    解决
    执行partprobe命令,再格式化还是不行的话,可以重启下虚拟机。
  5. 创建挂载点
    mkdir exapp
    mount /dev/sda4 /exapp
  6. df -h
  7. blkid 查看block设备id
  8. vim /etc/fstab
    加上:/dev/sda4 /exapp ext3 defaults 0 0

补充知识点:
格式说明:/dev/sdb1 代表哪个分区; ext4是该分区的格式; defaults是挂载时所要设定的参数(只读,读写,启用quota等),输入defaults包括的参数有(rw、dev、exec、auto、nouser、async)
1是使用dump是否要记录,0是不要; 2是开机时检查的顺序,是boot系统文件就为1,其他文件系统都为2,如不要检查就为0。)

二、 扩展datanode

  1. 在挂载的磁盘/exapp下创建一个文件夹:
    mkdir /exapp/datanode
  2. 修改文件权限(在root用户下)
    chown -R hadoop:hadoop /exapp/datanode
  3. 修改etc/hadoop下的hdfs-site.xml文件:
    在“dfs.datanode.data.dir”的value后加上:,/exapp/datanode
	<!--配置datanode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
	<property>    
	    <name>dfs.datanode.data.dir</name>    
	    <value>file:///home/software/hadoop-2.6.4/tmp/hdfs/data,/exapp/datanode</value>    
	</property>
  1. su hadoop 重启datanode
    hadoop-daemon.sh start datanode
  2. 50070端口查看是否成功

问题:
在这里插入图片描述启动datanode报指定目录加载失败,是因为没有给挂载目录权限,加上第二点即可。

资源下载:
提取码:0130

zookeeper-3.4.14

hadoop-2.6.4

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值