高可用集群搭建及flume日志采集系统


Hadoop高可用集群搭建


一、网络配置器修改

【编辑器】-【虚拟网络编辑器】-【vmnet8】
勾选“使用本地DHCP服务……虚拟机(D)”;子网改为192.168.121.0;DHCP设置为:起始IP地址:192.168.121.128,结束IP地址:192.168.121.254;NAT设置:网关IP:192.168.121.2。

二、虚拟机创建及相关文件配置

1.安装操作系统:software selection(virtualization host)
创建三个文件夹(/export/servers、data、software)

创建servers:mkdir -p /export/servers
进入export文件夹:cd /export
创建data:mkdir data
创建software:mkdir software
查看:ls

2.修改主机名,hostnamectl set-hostname 主机名(node-01/02/03)(三台都做)
查看主机名:hostname
3.查看IP:ifconfig
修改网卡信息vim /etc/sysconfig/network-scripts/ifcfg-e…(table键)

修改如下配置

dhcp---static;
Ipv6init=”no”
HWADDR=mac地址
IPADDR=IP地址
GATEWAY=192.168.121.2
NETMASK=255.255.255.0
DNS1=8.8.8.8

重启网卡:systemctl restart network
4.配置主机名和IP映射:vim /etc/hosts

IP地址 主机名1
IP地址 主机名2
IP地址 主机名3

5.克隆虚拟机:
从第一台完成了网卡信息配置和IP映射的虚拟机进行克隆(完整克隆),修改主机名、IP地址和Mac地址
6.使用CRT连接每台虚拟机,并进行ssh免密设置(node-01上)
创建公钥:ssh-keygen -t rsa
将公钥发送至其他虚拟机:ssh-copy-id 主机名
7.使用FX上传jdk,hadoop和zookeeper至/export/software
使用tar将以上文件解压至/export/servers文件夹下(将jdk改名)
命令:tar -zvxf 压缩包名 -C 解压目录

三、文件配置

1.环境变量配置:vim /etc/profile
【编写如下配置:

# jdk
export JAVA_HOME=jdk文件存放目录
export PATH=$PATH:$JAVA_HOME/bin
# Hadoop
export HADOOP_HOME=Hadoop文件存放目录
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# zookeeper
export ZK_HOME=zookeeper文件存放目录
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin
】

完成后使用source /etc/profile更新配置文件
2.修改zookeeper配置文件
进入zookeeper目录下的conf目录,复制配置文件zoo_sample.cfg并重命名为zoo.cfg:
复制并重命名:cp zoo_sample.cfg zoo.cfg
打开:vim zoo.cfg
编写如下配置:

dataDir=/export/data/zookeeper/zkdata(此行修改即可)
server.1=node-01:2888:3888
server.2=node-02:2888:3888
server.3=node-03:2888:3888

创建myid文件:
创建:mkdir -p /export/data/zookeeper/zkdata
进入:cd /export/data/zookeeper/zkdata
打开:vim myid
【编写如下配置:

1

】(node-01上写1,node-02上写2,node-03上写3,分发文件后修改)

3.修改Hadoop配置文件
命令:cd /export/servers/hadoop-2.7.4/etc/hadoop

修改

core-site.xml

文件[配置HDFS端口,指定Hadoop临时目录和zookeeper集群地址]
打开:vim core-site.xml
【编写如下配置:

	<!--指定HDFS的nameservice为ns1-->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://ns1</value>
	</property>
	<!--指定Hadoop临时目录-->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/export/servers/hadoop-2.7.4/tmp</value>
	</property>
	<!--指定zookeeper地址-->
	<property>
		<name>ha.zookeeper.quorum</name>
		<value>node-01:2181,node-02:2181,node-03:2181</value>
	</property>

修改

hdfs-site.xml

文件[配置两台namenode端口地址和通信方式,并指定namenode的元数据上的存放位置,开启namenode失败自动切换以及配置sshfence(通过ssh远程登录到前一个active,并将其结束)]
打开:vim /etc/hdfs-site.xml
【编写如下配置:

	<!--设置副本个数-->
	<property>
		<name>dfs.replication</name>
		<value>2</value>
	</property>
	<!--设置namenode.name目录 -->
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>file:/export/data/hadoop/name</value>
	</property>
	<!--设置namenode.data目录 -->
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:/export/data/hadoop/data</value>
	</property>
	<!-- 开启WebHDFS-->
	<property>
		<name>dfs.webhdfs.enabled</name>
		<value>true</value>
	<!--在NN和DN上开启WebHDFS(REST API)功能,不是必须-->
	</property>
	<!--指定HDFS的nameservice为ns1,需要和core-site.xml中保持一致-->
	<property>
		<name>dfs.nameservices</name>
		<value>ns1</value>
	</property>
	<!--ns1下面有两个namenode,分别是nn1和nn2-->
	<property>
		<name>dfs.ha.namenodes.ns1</name>
		<value>nn1,nn2</value>
	</property>
	<!--nn1的RPC通信地址-->
	<property>
		<name>dfs.namenode.rpc-address.ns1.nn1</name>
		<value>node-01:9000</value>
	</property>
	<!--nn1的http通信地址-->
	<property>
		<name>dfs.namenode.http-address.ns1.nn1</name>
		<value>node-01:50070</value>
	</property>
	<!--nn2的RPC通信地址-->
	<property>
		<name>dfs.namenode.rpc-address.ns1.nn2</name>
		<value>node-02:9000</value>
	</property>
	<!--nn2的http通信地址-->
	<property>
		<name>dfs.namenode.http-address.ns1.nn2</name>
		<value>node-02:50070</value>
	</property>
	<!--指定namenode的元数据在journalnode上的存放位置-->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://node-01:8485;node-02:8485;node-03:8485/ns1</value>
	</property>
	<!--指定journalnode在本地磁盘存放数据的位置-->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/export/data/hadoop/journaldata</value>
	</property>
	<!--开启namenode失败自动切换-->
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	<!--配置失败自动切换实现方式-->
	<property>
		<name>dfs.client.failover.proxy.provider.ns1</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>/root/.ssh/id_rsa</value>
	</property>
	<!--配置sshfence隔离机制超时时间-->
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>30000</value>
	</property>

修改

mapred-site.xml

文件[配置MapReduce计算框架为yarn方式]
复制:cp mapred-site.xml.template mapred-site.xml
打开:vim mapred-site.xml
【编写如下代码:

	<!--指定MapReduce框架为yarn方式-->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>

修改

yarn-site.xml

文件[开启resourcemanager高可用,指定resourcemanager端口名称地址,并指定zookeeper集群地址]
打开:vim yarn-site.xml
【编写如下代码:

	<property>
		<name>yarn.nodemanager.resource.memory-mb</name>
		<value>2048</value>
	</property>
	<property>
		<name>yarn.scheduler.maximum-allocation-mb</name>
		<value>2048</value>
	</property>
	<property>
		<name>yarn.nodemanager.resource.cpu-vcores</name>
		<value>1</value>
	</property>
	<!--开启resourcemanager高可用-->
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<!--指定resourcemanager的cluster id-->
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>yrc</value>
	</property>
	<!--指定resourcemanager的名字-->
	<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>rm1,rm2</value>
	</property>
	<!--分别指定resourcemanager的地址-->
	<property>
		<name>yarn.resourcemanager.hostname.rm1</name>
		<value>node-01</value>
	</property>
	<property>
		<name>yarn.resourcemanager.hostname.rm2</name>
		<value>node-02</value>
	</property>
	<!--指定zookeeper集群地址-->
	<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>node-01:2181,node-02:2181,node-03:2181</value>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>

修改

slaves

文件[配置集群主机名称]
打开:vim slaves
【编写如下代码:

node-01
node-02
node-03

修改

hadoop-env.sh

文件[配置jdk环境变量]
打开:vim hadoop-env.sh
【修改如下代码:

export JAVA_HOME=/export/servers/jdk

四、分发文件
将/etc/profile 和/export 分发至node-02、03
分发至02:scp /etc/profile node-02:/etc/profile
分发至03:scp /etc/profile node-03:/etc/profile
分发至02:scp -r /export node-02:/
分发至03:scp -r /export node-03:/
分发完成后再node-01/02/03上分别执行source /etc/profile
进入/export/data/zookeeper/zkdata目录下,修改myid文件内容(node-02:2,node-03:3)

五、集群启动
1.关闭node-01/02/03的防火墙
关闭防火墙:systemctl stop firewalld
关闭防火墙开机自启:syetemcel disable firewalld
2.在node-01/02/03上分别启动zookeeper服务
启动:zkServer.sh start
[使用zkServer.sh status查看zookeeper状态(一主二从),此时jps有两个]
3.在node-01/02/03上启动监控namenode的journalnode
启动:hadoop-daemon.sh start journalnode
[此时jps有三个]
4.在node-01上格式化namenode,成功后将目录复制到node-02中
格式化:hadoop namenode -format
复制:scp -r /export/data/hadoop node-02:/export/data
5.在node-01上格式化zkfc
格式化zkfc:hdfs zkfc -formatZK
6.在node-01上启动HDFS
启动hdfs:start-dfs.sh
7.在node-01上启动yarn
启动yarn:start-yarn.sh
【以上启动完成后,节点分布为node-01:8,node-02:7,node-03:5】

六、主备切换验证
1.查看namenode在node-01/01上的状态

hdfs haadmin -getServiceState nn1/nn2

2.将active宕机,看standby是否自动切换为active

hdfs haadmin -transitionToStandby --forcemanual nn1/nn2(active)

[hdfs haadmin -transitionToActive --forceactive nn1/nn2(standby),此项不会成功]

六、flume部分:

解压后进入vim /etc/profile配置环境变量
【编写代码如下:

export FlUME_HOME=/export/servers/flume
export PATH=$PATH:$FLUME_HOME/bin

使用source /etc/profile更新配置文件
进入flume的解压目录下的flume-env.sh(需复制),配置jdk

命令:cp flume-env.sh.template flume.env.sh

【编写代码如下:

export JAVA_HOME=/export/servers/jdk(即jdk安装路径)

进入flume的安装目录下的conf目录,新建两个收集方案
进入:cp /export/servers/flume/conf
打开:vim spool-hdfs.conf(可不创)
【编写如下代码:

a1.sources=r1
a1.sinks=k1
a1.channels=c1
a1.sources.r1.type=spooldir
a1.sources.r1.spoolDir=/root/logs2
a1.sources.r1.fileHeader=true
a1.sinks.k1.type=hdfs
a1.sinks.k1.channel=c1
a1.sinks.k1.hdfs.path=hdfs://node-01:9000/source/logs/%{type}/%y%m%d
a1.sinks.k1.hdfs.filePrefix=events
a1.sinks.k1.hdfs.round=true
a1.sinks.k1.hdfs.roundValue=10
a1.sinks.k1.hdfs.roundUnit=minute
a1.sinks.k1.hdfs.rollInterval=3
a1.sinks.k1.hdfs.rollSize=20
a1.sinks.k1.hdfs.rollCount=5
a1.sinks.k1.hdfs.batchSize=1
a1.sinks.k1.hdfs.useLocalTimeStamp=true
a1.sinks.k1.hdfs.fileType=DataStream
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1

(创建文件夹:mkdir /root/logs2
打开:vim tail-hdfs.conf
【编写如下代码:

a1.sources=r1
a1.sinks=k1
a1.channels=c1
a1.sources.r1.type=exec
a1.sources.r1.command=tail -F /root/logs/test.log
a1.sources.r1.channels=c1
a1.sinks.k1.type=hdfs
a1.sinks.k1.channel=c1
a1.sinks.k1.hdfs.path=hdfs://node-01:9000/source/logs/%{type}/%y%m%d
a1.sinks.k1.hdfs.filePrefix=events
a1.sinks.k1.hdfs.round=true
a1.sinks.k1.hdfs.roundValue=10
a1.sinks.k1.hdfs.roundUnit=minute
a1.sinks.k1.hdfs.rollInterval=3
a1.sinks.k1.hdfs.rollSize=20
a1.sinks.k1.hdfs.rollCount=5
a1.sinks.k1.hdfs.batchSize=1
a1.sinks.k1.hdfs.useLocalTimeStamp=true
a1.sinks.k1.hdfs.fileType=DataStream
a1.channels.c1.type memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1

创建文件夹:mkdir /root/logs
创建文件:touch test.log
找一个地方编写文件:xy.sh
打开:vim xy.sh
【编写如下代码:

    #!/bin/bash

while true

do

  date >> /root/logs/test.log

  sleep 1

done

启动:flume-ng agent -c ./conf -f /export/servers/flume/conf/tail-hdfs.conf -n a1 -Dflume.root.logger=INFO,console
克隆回话,启动xy.sh文件:sh xy.sh(在该文件的目录下)

注意事项:

1.防火墙的关闭
2.主机名
3.zookeeper的myid
4.使用flume收集时注意主机的active

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值