集群的整体资源:
五台机器,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:根据程序调整,在启动脚本中进行相关配置