Hadoop集群安装
- 集群部署图

-
网络配置
主机名设置
/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
-
安装jdk
设置JAVA_HOME,PATH
-
服务间免密登录
生成秘钥
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
-
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
-
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
-
服务启动
第一次启动
#启动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------------------------------"

浙公网安备 33010602011771号