Hadoop集群安装

  1. 集群部署图

 

  1. 网络配置

主机名设置

/etc/hostname

静态网络设置

/etc/sysconfig/network-script/ifcfg-eth0

删除UUID和MAC地址

 

ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.9.253
NETMASK=255.255.255.0
GATEWAY=192.168.9.2
DNS1=1921.68.9.2
DNS2=114.114.114.114

  

删除/etc/udev/rules.d/70-persistent-net.rules

重启网络 service network restart

关闭防火墙

systemctl stop firewalld.service

systemctl disable firewalld.service

关闭seLinux

/etc/selinux/config

SELINUX=disabled

  

  1. 安装jdk

设置JAVA_HOME,PATH

  1. 服务间免密登录

生成秘钥

ssh-keygen  -t  dsa  -P  ''  -f  ~/.ssh/id_dsa

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

#分发各服务器

scp  ~/.ssh/authorized_keys   node2:/root/.ssh/

设置sshd服务

/etc/ssh/sshd_config

PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication yes

  

重启服务 service sshd restart

  1. zookeeper安装

配置ZOOKEEPER_HOME,PATH=$ZOOKEEPER_HOME/bin

配置zoo.cfg

cd $ZOOKEEPER_HOME/conf

cp zoo_sample.cfg  zoo.cfg

配置项:

#发送心跳的间隔时间,单位:毫秒
tickTime=2000
#ZooKeeper保存数据的目录
dataDir=/opt/zookeeper-3.4.6/data
#日志目录
dataLogDir=/var/bjsxt/zookeeper/datalog 
#客户端连接 ZooKeeper 服务器的端口,ZooKeeper  会监听这个端口,接受客户端的访问请求
clientPort=2181
#这个配置项是用来配置 ZooKeeper 接受客户端(这里所说的客户端不是用户连接ZooKeeper服务器的客户端,而是 ZooKeeper 服务器集群中follower或observer连接到 Leader的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5 个心跳的时间(也就是 tickTime)长度后 ZooKeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10秒
initLimit=5
#这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime 的时间长度,总的时间长度就是 4*2000=8 秒
syncLimit=2
#server.A=B:C:D:其 中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的ip地址;C 表示的是这个服务器与集群中的Leader服务器交换信息的端口;D表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于B都是一样,所以不同的ZooKeeper实例通信端口号不能一样,所以要给它们分配不同的端口号。	
server.1=server2:2881:3881
server.2=server3:2881:3881  
server.3=node4:2881:3881

  

 

创建$ZOOKEEPER_HOME/data目录

mkdir $ZOOKEEPER_HOME/data

在myid中写下当前ZooKeeper的编号

echo 1 > $ZOOKEEPER_HOME/data/myid

启动zookeeper

zkServer.sh start|stop|status

 

客户端登录

zkCli.sh create|ls|cd|get|set

退出

quit

  1. Hadoop安装

设置HADOOP_HOME/PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin

/etc/profile

hadoop-env.sh配置JDK

export JAVA_HOME=/usr/java/default

  

core-site.xml配置

 

<configuration>
<!--指定集群名-->
  <property>
	<name>fs.defaultFS</name>
	<value>hdfs://mycluster</value>   
  </property>
<!---目录需手动创建好->
  <property>
	<name>hadoop.tmp.dir</name>
	<value>/var/bjsxt/hadoop/ha</value>
  </property>
  <!-- 指定每个zookeeper服务器的位置和客户端端口号 -->
  <property>
	 <name>ha.zookeeper.quorum</name>
	 <value>node2:2181,node3:2181,node4:2181</value>
   </property>
</configuration>

  

hdfs-site.xml配置

<configuration>
  <!-- 指定副本的数量 -->
  <property>
    <name>dfs.replication</name>
    <value>2</hvalue>
  </property>
  <!-- 解析参数dfs.nameservices值hdfs://mycluster的地址 -->
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>
  <!-- mycluster由以下两个namenode支撑 -->
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
  </property>
  <!-- 指定namenode1地址和端口号  -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>node1:8020</value>
  </property>
  <!-- 指定namenode2地址和端口号  -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>node2:8020</value>
  </property>
  <!-- 指定客户端查找active的namenode的策略:
       	       	  会给所有namenode发请求,以决定哪个是active的 -->
  <property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <!-- 指定三台journal node服务器的地址 -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
  </property>
  <property>
  <!--目录需提前创建好-->
    <name>dfs.journalnode.edits.dir</name>
    <value>/var/bjsxt/hadoop/ha/jnn</value>
  </property>
  <!-- 当active nn出现故障时,ssh到对应的服务器,将namenode进程kill掉  -->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_dsa</value>
  </property>
  <!--启动NN故障自动切换 -->
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
</configuration>

  

修改slaves指定datanode的位置 $HADOOP_HOME/etc/hadoop

node2
node3
node4

  

  1. 服务启动

第一次启动

#启动zk集群
zkServer.sh start
#a) 在node1\node2\node3上启动三台journalnode
hadoop-daemon.sh start journalnode
选择namenode1,格式化HDFS 
hdfs namenode -format
检查$HADOOP_HOME/ha/dfs/name/current/目录下产生了fsimage文件
格式化后,启动namenode进程
hadoop-daemon.sh start namenode
在另一台namenode2上同步元数据 
hdfs namenode -bootstrapStandby
出现以下提示:
=====================================================
About to bootstrap Standby ID nn2 from:
           Nameservice ID: mycluster
        Other Namenode ID: nn1
  Other NN's HTTP address: http://node1:50070
  Other NN's IPC  address: node1/192.168.20.201:8020
             Namespace ID: 178118551
            Block pool ID: BP-1909026874-192.168.20.201-1577760263511
               Cluster ID: CID-8105daf4-bdbb-40e8-a9d0-8d3f3867535b
           Layout version: -60
       isUpgradeFinalized: true
=====================================================
接下来在node1上执行初始化zk:
hdfs zkfc -formatZK
启动|停止Hadoop集群
start-dfs.sh|stop-dfs.sh
后续启动
zkServer.sh start #分别启动各zk
start-dfs.sh
jps查询节点状态 
namenode:50070 web端查看Hadoop信息

  7.mapred|yarn配置
cd $HADOOP_HOME/etc/hadoop

mapred-site.xml配置
<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
</property>

  yarn-site.xml

<!-- 让yarn的容器支持mapreduce的洗牌,开启shuffle服务 -->
<property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
</property>
<!-- 启用resourcemanager的HA -->
<property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
 </property>
<!-- 指定zookeeper集群的各个节点地址和端口号 -->
 <property>
   <name>yarn.resourcemanager.zk-address</name>
   <value>node2:2181,node3:2181,node4:2181</value>
 </property>

<!-- 标识集群,以确保 RM 不会接管另一个集群的活动。 -->
 <property>
   <name>yarn.resourcemanager.cluster-id</name>
   <value>cluster1</value>
 </property>
<!-- RM HA的两个resourcemanager的名字 -->
 <property>
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
 </property>

<!-- 指定rm1的reourcemanager进程所在的主机名称 -->
 <property>
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>node3</value>
 </property>
<!-- 指定rm2的reourcemanager进程所在的主机名称 -->
 <property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>node4</value>
 </property>

  同步配置到各机器

scp mapred-site.xml yarn-site.xml node[234]:`pwd`

启动yarn

node3:

start-yarn.sh(只能启动本机上的ResourceManager和其他节点的NodeManager)

node4:

yarn-daemon.sh  start  resourcemanager(启动本机的ResourceManager)

关闭 stop-yarn.sh(只能关闭本机上的ResourceManager和其他节点的NodeManager)|yarn-daemon.sh  start  resourcemanager(关闭本机的ResourceManager)

 

结束

附上完整的启动关闭脚本

start.sh

#!/bin/bash
echo "------------------START------------------------------"
echo "start zookeeper service "
for node in node2 node3 node4
do
        echo "start "$node
        echo `ssh root@$node "source /etc/profile;zkServer.sh start"`
done
sleep 5
echo "start hadoop service"
echo `ssh root@node1 "source /etc/profile;start-dfs.sh"`
echo "start yarn"
echo `ssh root@node3 "source /etc/profile;start-yarn.sh"`
echo "start resourcemanager"
echo `ssh root@node4 "source /etc/profile;yarn-daemon.sh start resourcemanager"`
echo "------------------END---------------------------"

stop.sh

#!/bin/bash
echo "-----------------------START--------------------------"
echo "stop yarn"
echo `ssh root@node3 "source /etc/profile;stop-yarn.sh"`
echo `ssh root@node4 "source /etc/profile;yarn-daemon.sh  stop  resourcemanager"`
echo "stop hadoop"
echo `ssh root@node1 "source /etc/profile;stop-dfs.sh"`
echo "OK"
sleep 1
echo "stop zookeeper"
for node in node2 node3 node4
do
        echo "stop zk "$node
        echo `ssh root@$node "source /etc/profile;zkServer.sh stop"`
done
echo "-----------------------END------------------------------"

  

 

 

 

 

posted @ 2021-03-06 23:01  星剑  阅读(61)  评论(0)    收藏  举报