大数据集群搭建之Zookeeper,Kafka,Spark(Standalone模式)搭建流程及相关配置

集群的整体资源:
五台机器,32核,128G内存,24T硬盘 325=160C 128G5 =640G

32C,128G,24T Spark(2.2.1) ZooKeeper(3.4.12) Kafka(2.11)
10.251.27.123 主 1Follower 0
10.251.27.124 备 2Follower 1
10.251.27.125 Worker 3Leader 2
10.251.27.102 Worker 3
10.251.27.121 Worker 4

压缩包上传的路径:/home/was/softsource
软件安装的路径:/app/bigData
解压压缩包: tar –zxvf jdk-8u151-linux-x64.tar.gz -C /app/bigData

c:建立压缩文档
z:指定用gzip的压缩方式
x:进行解压
v:显示所有过程,可以打印出解压的日志文件
f:指定包的文件名,使用的档案的名字,是最后一个参数,后面只能接档案名
t:查看内容
C:指定安装路径

安装jdk,并配置环境变量 /home/was/.bash_profile
export PATH
export JAVA_HOME=/app/bigData/jdk_1.8
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.ja

ZK的搭建部署:
目前搭建的ZK集群中没有单独设置事务日志存放的目录,当集群操作频繁的时候,事务日志量增大,对集群性能有相当的影响,建议在zoo.cfg中单独设置事务日志目录

官网下载安装包,解压到/app/bigData目录下,进入安装目录下的conf目录,找到配置文件zoo_sample.cfg 复制一份改名zoo.cfg,zoo.cfg是官方指定的文件命令规则。对该配置文件进行ZK的整体配置

tickTime=2000 ZK中使用的基本时间单位,毫秒值,表示服务器 之间或者客户端和服务器之间维持心跳的时间间 隔。每隔tickTime发送一次

dataDir=/app/bigData/zookeeper/datalog ZK中的数据目录,主要用来存储内存数据库快照, myid的文件也要在此目录下,

#dataLogDir=/app/log ZK中的事务日志存放的目录,如果没有设置,则该目录和dataDir 相同,最好设置一个,因为如果日志量大的时候,会影响ZK的 性能

clientPort=2181 ZK开放的端口号,供监听client连接的端口号,zk会监听这个 端口,接收客户端的访问请求

initLimit=10 默认是5,ZK集群中的节点进行初始化连接通信时,follower和 leader之间的超时时间,10tickTime=102000=20S

syncLimit=5 默认是2,ZK主从之间发送消息,请求和应答的最大超时时间, 5tickTime=52000=10S

server.1=zk01:2888:3888 数字表示是第几号server,zk01表示server的ip地址,第一个 端口号表示该server与集群中leader交换消息时使用的端口, 第二个端口表示该server选举leader时所使用的端口。
server.2=zk02:2888:3888
server.3=zk03:2888:3888

ZK有两种日志,和一种快照
ZK的日志分成两种,一种是事务日志,一种是ZK运行时的系统日志

ZK事务日志:
在ZK集群中,当每次接到写请求的时候,都会将该请求发送给leader,leader将这次写请求转换成带状态的事务,然后广播出去,当大多数节点同意该写的请求后,leader通知所有的节点,让他们将这次写操作应用到内存数据库中去,并将该次记录到事务日志中,当事务日志量达到10W次(默认),内存数据库将会序列化一次,将其持久化到磁盘,序列化后的文件称为快照,这样做的好处是,只要没有清理事务日志和快照,那么可以让任意节点恢复到任意快照点。

ZK系统运行日志:
ZK使用log4j记录系统日志,系统日志文件默认是ZK安装目录下的zookeeper.out。没有特殊需求,没必要改,如果要改,在log4j.properties和zkEnv.sh以及zkServer.sh中都要做出相应的修改。

查看事务日志:
事务日志是一个二进制文件,ZK提供了LogFormatter工具类,可以进行查看:
Java -cp /app/bigData/zookeeper/zookeeper-3.4.12.jar:/app/bigData/zookeeper/lib/slf4j-api-1.7.25.jar
org.apache.zookeeper.server.LogFormatter
/app/bigData/zookeeper/datalog/version-2/log.100000001

三台机器全部按照此方式进行更改配置,在dataDir目录下新建myid文件,向该文件写入一个数字,该数字必须和配置文件中的server后面的数字相同,该数字表示该server是第几号server。myid是整个集群用来发现彼此的重要标识

向每台机器上的myid文件写入数字:27.123: echo 1 >myid;27.124:echo 2>myid; 27.125:echo 3 >myid

启动ZK集群
启动完成之后查看每个节点的ZK状态:./zkServer.sh status
手动停掉其中的leader节点 ./zkSever.sh stop 检查ZK的HA

Kafka集群的搭建和部署:

Kafka集群依赖ZK集群,搭建Kafka集群之前先搭建配置完成ZK,Kafka也可以使用内	部自带的有ZK集群去启动,但是建议使用单独的ZK集群。

1.官网下载安装包,解压到相关的路径,解压完成之后,进行到config下,修改		server.properties文件
	
listeners=PLAINTEXT://10.251.27.121:9092		socket服务器监听的地址

broker.id=0							Kafka集群中每台节点中唯一的brokerid,和										ZK中的myid性质一样
				
num.network.threads=3					broker进行网络处理的线程数量	

num.io.threads=8						broker进行IO处理的线程数量

socket.send.buffer.bytes=102400			发送缓冲区buffer的大小,数据先存储在缓冲										区上,当缓冲区大小到达一定的限度的时候,										再发送,提高性能

socket.receive.buffer.bytes=102400 接收缓冲区的大小,当数据达到一定的程度的 时候,序列化到磁盘中

socket.request.max.bytes=104857600		向kafka请求消息和发送消息的请求的最大个										数

log.dirs= /app/bigData/kafka/kafkalog		这个目录必须保证是存在的,不会自动生成,										kafka消息存放的目录,可以配置多个,多个										之间用逗号分隔,但是数量必须小于broker										的IO处理的线程数量

num.partitions=1 kafka默认的分区数量,默认是一个,可以修 改成多个。提高并行度

num.recovery.threads.per.data.dir=1 kafka broker启动的过程会加载此节点上所有 的topic的log文件,如果数据量大的话导致 加载时间过长,该配置项是指为每个log文件 加载创建的一个线程池里线程的数量。默认1

offsets.topic.replication.factor=1 主题偏移量的备份数量,如果要提高可用性,可适 当提高

transaction.state.log.replication.factor=1 事务状态主题的副本个数,建议设置成大于1的, 比如3

log.retention.hours=168 消息最大的持久化时间,默认是7天

log.segment.bytes=1073741824 kafka的消息是以追加的形式落地到文件,当超过 这个值的时候,会新起一个文件

log.retention.check.interval.ms=300000 每隔5分钟检查是否有过期的消息,若有,则删 除

zookeeper.connect=10.251.27.123:2181, 10.251.27.124:2181, 10.251.27.125:2181
指定zk的地址,zk的连接端口,kafak集群依赖zk 管理该集群

zookeeper.connection.timeout.ms=6000 zk连接超时时间

group.initial.rebalance.delay.ms=0 默认是3秒,推迟空消费组接收到成员加入请求后 本应立即开启的reblance。比如如果所有的消费者 加入的时间是10S,那么就可以设置成10000。防 止多个消费者加入时导致的多次reblance。每次 reblance的代价是比较大的,因为很多状态在 reblance前需要被持久化,并且reblance后又被重 新初始化。

delete.topic.enable=true 默认是false,该配置主要是为了方便删除topic

分发配置完的kafka到其他机器上,修改/app/bigData/kafka/congfig/server.properties中 broker.id

启动集群,三个节点都要启动:
nohup /app/bigData/kafka/bin/kafka-server-start.sh /app/bigData/kafka/config/server.properties 1>/dev/null 2>&1 &

查看kafka启动的状态:jps

创建topic:
/app/bigData/kafka/bin/kafka-topics.sh --zookeeper 10.251.27.123:2181 --create --topic test --partitions 3 --replication-factor 2
创建topic首先需要指定创建的命令,然后指定zk的集群ip和端口,一个或者全部,partitions指定该topic有几个分区,replication-factor指定每个分区的副本数。

查看主题列表:
	/app/bigData/kafka/bin/kafka-topics.sh --zookeeper 10.251.27.123:2181 --list
			
查看主题数据:
	/app/bigData/kafka/bin/kafka-console-consumer.sh	--bootstrap-server 					spark-01:9092,spark-02:9092,spark-03:9092 --topic test --from-beginning

查看主题描述:
/app/bigData/kafka/bin/kafka-topics.sh --zookeeper 10.251.27.123:2181 --describe --topic test

删除主题:需要配置delete.topic.enable=true
/app/bigData/kafka/bin/kafka-topics.sh --zookeeper 10.251.27.123:2181 --delete --topic test

Spark集群的搭建和部署:Standalone模式
1.下载spark安装包:版本2.2.1
2.解压到bigdata路径下
ln -s /app/bigData/spark-2.2.1-bin-hadoop2.7/ /app/bigData/spark 为spark安装包文 件在bigdata/spark目录下建立一个同步的链接

	ln -s 当需要在不同的目录用到相同的文件的时候,不需要在每一个目录下都放一		个必须相同的文件,我们只要在某个固定的目录下放置该文件,然后在其他的目录		下链接它就可以。不必重复的占用磁盘空间。ln命令有强一致性,
			
3.修改配置文件:
	1.将spark-env.sh.template文件改名成spark.env.sh:mv spark-env.sh.template 			  spark-env.sh

	2.改名后修改配置项
		export JAVA_HOME=/app/bigData/jdk_1.8			指定jdk安装路径
		export SPARK_MASTER_HOST=10.251.27.123		添加master节点
		export SPARK_MASTER_PORT=7077				指定master节点的端口号

4.重命名slaves.template文件,添加worker节点
		10.251.27.123
		10.251.27.124
		10.251.27.125
		
5.将配置好的目录复制到124和125节点

此配置方式是手动指定master,并且只有一个master,存在单点故障的问题。此集群 目前有一个master,和3个worker。

HA模式:
由于standalone模式只能启动一个master,因此存在单点故障的问题,要解决此问题,需要借助zk,并且至少启动两个master节点实现高可用

1.修改spark-env.sh文件,将之前指定的master地址和端口号注释
2.将文件复制到124和125机器上
3.通过zk方式选举出一个master,然后手动启动其他机器上的master,这些master是		standby模式,当alive模式的master挂掉的时候,zk从处于standby模式的master
	选举出一个,转换成alive模式,此集群目前有三个master和3个worker。

集群配置建议:
ZK:目前搭建的zk集群中没有单独设置事务日志存放的目录,当集群操作频繁的时候, 事务日志量增大,对集群性能有相当的影响,建议在zoo.cfg中单独设置事务日志目录
dataLogDir=/app/bigData/zookeeper/transactionLog

Kafka:
	offsets.topic.replication.factor=1			主题偏移量的备份数量,如果要提高可用											性,可适当提高,集群中使用的默认配置											1,建议3

	transaction.state.log.replication.factor=1	事务状态主题的副本个数,集群中使用的											默认配置1,如有需要,建议提高

	group.initial.rebalance.delay.ms=0			推迟空消费者组在新加入消费者时本应											立即进行的reblance,集群中使用的是0,											如有需要,建议5000

	num.recovery.threads.per.data.dir=1		根据实际情况进行调大,broker启动时减											少加载主题log的时间,集群中使用的是											1,可以适当增加。

message.max.bytes=209715200 broker能接收消息的最大字节数

replica.fetch.max.bytes=209715200 broker可复制的消息的最大字节数,该配 置项必须不小于message.max.bytes,因 为该配置项是消费者从partition中获取 消息放入内存中所用的内存大小,如果小 于message.max.bytes,可能会导致给消 费者分配的内存放不下一个message

Spark:根据程序调整,在启动脚本中进行相关配置

你可能感兴趣的:(大数据集群,集群搭建,zookeeper,spark,kafka,高可用)