zookeeper介绍
它是一个分布式服务框架,是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理、发布订阅、命名服务、分布式锁、分布式协调等;
Zookeeper 是分为服务端和客户端的, 客户端有 Java 的客户端, 有 Shell 命令行的客户端等, 客户端通过一个类似于文件系统的 API 来访问 Zookeeper 集群。
客户端最终是直接访问 Zookeeper 集群, 集群中有两大类角色, 一类是 Leader, 一类是 Follower, 其实就是主从, Leader 负责读和写, Follower 只能读, 遇到会产生修改的请求会转发给 Leader 处理, 这是因为 Zookeeper 本质上就是为了在分布式环境中对消息的一致性的支持, 而 Zookeeper 所基于的 ZAB 协议是 Paxos 协议的一个变种, ZAB 协议中是有一个全局的事务生成者, 就是 Leader, 修改设计到在分布式环境下对事务达成一致, 必须由 Leader 发起
比如说一个常见的分布式主从系统, 如果有 ZK 在的话, 主节点不需要和每个从节点保持连接, 只需要监听从节点创建的 Znode, 便可以知道谁在线
storm介绍
Storm用来实时处理数据,特点:低延迟,高可用,分布式,可扩展,数据不丢失,提供简单容易的接口,便于开发。它的主(nimbus),从(supervisor)。
storm和zookeeper的关系:
所有的supervisor会将自己的节点信息写至Zookeeper,之后nimbus会从Zookeeper上获取到supervisor的信息,再将topology里的workers按照负载均衡的思想(分摊到多个操作单元上进行执行)分配至supervisor中,不过这个过程也是写入zookeeper中,而不是直接发送给supervisor,supervisor再从zookeeper上获取任务信息。
storm和hadoop的区别:
1)storm用于实时计算,hadoop用于离线计算
2)storm处理的数据保存在内存中,源源不断,hadoop处理的数据保存在文件系统中,一批一批
3)storm的数据通过网络传输进来,hadoop的数据保存在磁盘中
一、zookeeper配置
1.zookeeper下载安装
http://archive.apache.org/dist/zookeeper/
解压到/usr中:
cd /usr/
tar -zxvf zookeeper-3.4.9.tar.gz
2.配置zookeeper集群
cd /usr/zookeeper-3.4.9/conf/
cp zoo_sample.cfg zoo.cfg
mkdir -p /usr/zookeeper-3.4.9/zkdatas/
配置zoo.cfg:
vim zoo.cfg
添加:
dataDir=/export/servers/zookeeper-3.4.9/zkdatas
#保留多少个快照
autopurge.snapRetainCount=3
# 日志多少小时清理一次
autopurge.purgeInterval=1
# 集群中服务器地址
#本机地址为0.0.0.0;其他最好用ip
server.1=0.0.0.0:2888:3888
server.2=192.168.233.76:2888:3888
server.3=192.168.233.27:2888:3888
server.4=192.168.233.80:2888:3888
server.5=192.168.233.248:2888:3888
3.添加myid配置
主机上:
echo 1 > /usr/zookeeper-3.4.9/zkdatas/myid
发送前改权限:chown -R hadoop:hadoop /usr/zookeeper-3.4.9
发送到其他机子上:
scp -r /usr/zookeeper-3.4.9/ 192.168.233.76:/usr/
其他机子也必须改相应的myid,比如第二台就是2。
4.启动zookeeper及查看启动状态
第一次启动最好都用root
/usr/zookeeper-3.4.9/bin/zkServer.sh start
全部机子启动后,再一各个查leader/usr/zookeeper-3.4.9/bin/zkServer.sh status
(因为leader和follower需要选举,所以得全部启动完才能用这个指令)
5.启动异常
一个个开启zookeeper节点,查看zookeeper.out日志可能会出现
Cannot open channel to 4 at election address
,
这个错误一般是正常的,因为zookeeper没有全部启动完监测连接不通。
二、storm安装配置
1.storm下载安装
cd /home/share/apps
tar -zxvf apache-storm-2.1.0.tar
2.storm配置
cd /home/share/apps/apache-storm-1.0.0/
vim conf/storm.yaml
添加:
storm.zookeeper.servers:
- "192.168.233.68"
- "192.168.233.76"
- "192.168.233.27"
- "192.168.233.80"
- "192.168.233.248"
storm.local.dir: "/home/share/apps/apache-storm-2.1.0/status"
nimbus.seeds: ["192.168.233.68"]
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
注:(这些配置前都要空一格,:后也要空一格)(status文件夹是自己创建的,用来保存zookeeper保存的各个服务器的状态)
3.设置环境变量
vim /etc/profile
添加:
#set storm path
export STORM_HOME=/home/share/apps/apache-storm-2.1.0/
export PATH=$PATH:$STORM_HOME/bin
4.启动nimbus和storm ui
在master上,启动nimbus:nohup storm nimbus &
,启动storm ui:nohup storm ui &
在slaves上,启动supervisor:nohup storm supervisor &
注:出错可以查看nohup.out日志
5.将storm发给其他用户
和zookeeper差不多,也可以共享在一个文件里面,其他集群打开,要注意/etc/profile中的路径修改
6.jps查看并访问ui页面
在master上开启http://192.168.233.68:8080/
:
links http://192.168.233.68:8080/
,links这个linux自带的浏览器渲染有问题,读取不了数据,所以大家还是在window上用vpn
连上linux账号,用window上的火狐、谷歌浏览器登录stormui管理。可以试试在linux下个火狐,不知道行不行。
7.遇到nimbus无启动,查看logs里面的nimbus.log
如果nimbus.log是找不到libstdc++.so.6
解决方案如下:
yum whatprovides libstdc++.so.6
查看支持版本:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* epel: d2lzkl7pfhq30w.cloudfront.net
* extras: mirrors.163.com
* updates: mirrors.163.com
libstdc++-4.8.5-39.el7.i686 : GNU Standard C++ Library
Repo : base
Matched from:
Provides : libstdc++.so.6
安装相应版本
yum install libstdc++-4.8.5-39.el7.i686