-
目的
1> 熟悉分布式大数据流式处理的概念和常用技术;
2> 了解开源分布式流式处理平台 Storm 的相关知识;
3> 掌握 Linux 下的 Storm 安装步骤、配置方法和运行管理;
4> 测试 Storm 相关实例参数以及各种指标。
-
内容
1> Java、Python、Maven、Zookeeper、Kafka、Storm 环境配置;
2> Zookeeper、Kafka、Storm 启动;
3> WordCountTopology 和 KafkaSpoutTopology 实例运行。
-
准备
相关包下载链接:https://cloud.tsinghua.edu.cn/d/9ca8781ab69f45c6882d
-
步骤
1> 安装 Java、Python;可以直接工具安装,也可以下载解压缩配置环境变量,链接中有 MacOS 和 Linux 版本的 Java8,配置环境变量不做详细阐述;
>> sudo apt-get install java python
2> 将 apache-maven-3.6.2-bin.tar、zookeeper-3.4.14.tar、kafka_2.12-2.3.0.tar、apache-storm-2.1.0.zip 分别解压到(/Documents/Storm/) 文件夹中;
>> tar -zxvf apache-maven-3.6.2-bin.tar
>> tar -zxvf zookeeper-3.4.14.tar
>> tar -zxvf kafka_2.12-2.3.0.tar
>> tar -zxvf apache-storm-2.1.0.zip
3> 配置 ZOOKEEPER_HOME、STORM_HOME、MAVEN_HOME、KAFKA_HOME 环境变量,执行. /etc/profile 生效;
>> sudo vim /etc/profile
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home"
CLASS_PATH="$JAVA_HOME/lib"
export ZOOKEEPER_HOME="$HOME/Documents/Storm/zookeeper-3.4.14"
export STORM_HOME="$HOME/Documents/Storm/apache-storm-2.1.0"
export MAVEN_HOME="$HOME/Documents/Storm/apache-maven-3.6.2"
export KAFKA_HOME="$HOME/Documents/Storm/kafka_2.12-2.3.0"
PATH=".$PATH:$JAVA_HOME/bin:$STORM_HOME/bin:$ZOOKEEPER_HOME/bin:$MAVEN_HOME/bin:$KAFKA_HOME/bin"
>> . /etc/profile
4> 在 $ZOOKEEPER_HOME 目录下创建 dataDir、dataLogDir 文件夹;
>> mkdir -p dataDir & mkdir dataLogDir
5> 配置 Zookeeper 的 zoo.cfg 文件(将 conf 中 zoo_sample.cfg 配置好放在该目录下改名为 zoo.cfg);
syncLimit=5
dataDir=$ZOOKEEPER_HOME/dataDir
dataLogDir=$ZOOKEEPER_HOME/dataLogDir
clientPort=2181
此处,启动时可能会在 $ZOOKEEPER_HOME 目录下新建一个名称为 $ZOOKEEPER_HOME 的文件夹,并在该目录下又新建 dataDir 和 dataLogDir 文件夹。
解决方法:将"$ZOOKEEPER_HOME"替换为"/home/leeway/Documents/Storm/zookeeper-3.4.14"。
6> 开启 Zookeeper 服务,并查看 Zookeeper 状态;
>> cd $ZOOKEEPER_HOME/bin
>> zkServer.sh start
>> zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /Users/Documents/Storm/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: standalone
7> 添加 Kafaka 主题 kafka-spout-test(根据 KafkaSpoutTopology 代码);
>> ./kafka-topics.sh --zookeeper localhost:2181 --create --topic kafka-spout-test --replication-factor 1 --partitions 1
8> 开启 Kafka 服务,并重新打开一个终端;
>> cd $KAFKA_HOME
>> bin/kafka-server-start.sh config/server.properties &
9> 配置 storm.yaml 文件(注意冒号:后面空格);
>> cd $STORM_HOME/conf
>> vi storm.yaml
#集群主机地址、nimbus 节点地址、本地状态存储路径、slot端口等
storm.zookeeper.servers:
- "127.0.0.1"
nimbus.seeds: ["127.0.0.1"]
storm.local.dir: "$STORM_HOME/status"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
supervisor.childopts: -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9998
此处,启动时可能会在 $STORM_HOME 目录下新建一个名称为 $STORM_HOME 的文件夹,并在该目录下又新建 status 文件夹。
解决方法:将"$STORM_HOME/status"替换为"/home/leeway/Documents/Storm/apache-storm-2.1.0/status"。
10> 创建 Storm 服务组件相关输出文件,将 Stdio 重定向至输出文件;
>> cd $STORM_HOME
>> mkdir storm_logs
>> cd storm_logs
>> touch drpc.log
>> touch ui.log
>> touch nimbus.log
>> touch supervisor.log
>> touch logviewer.log
11> 运行 Storm;
nohup storm drpc > $STORM_HOME/storm_logs/drpc.log 2>&1 & nohup storm ui >$STORM_HOME/storm_logs/ui.log 2>&1 & nohup storm nimbus > $STORM_HOME/storm_logs/nimbus.log 2>&1 & nohup storm supervisor > $STORM_HOME/storm_logs/supervisor.log 2>&1 & nohup storm logviewer > $STORM_HOME/storm_logs/logviewer.log 2>&1 &
12> 查看当前 Jps 状态;
>> jps|grep -v Jps
27984 DRPCServer
27632 Kafka
22769 QuorumPeerMain
27985 UIServer
27986 Nimbus
27987 Supervisor
27988 LogviewerServer
27974 ZooKeeperMain
13> 浏览器访问 127.0.0.1:8080 (Storm UI);
14> 使用 maven 打包 storm-starter和storm-kafka-client-examples 内例子(./target/ 中);
>> cd $STORM_HOME/examples/storm-starter
>> mvn package
>> cd $STORM_HOME/examples/storm-kafka-client-examples
>> mvn package
15> 运行 WordCountTopology 和 KafkaSpoutTopology 例子;
>> cd $STORM_HOME/examples/storm-starter/target
>> storm jar storm-starter-2.1.0.jar org.apache.storm.starter.WordCountTopology word-count-test
>> cd $STORM_HOME/examples/storm-kafka-client-examples/target
>> storm jar storm-kafka-client-examples-2.1.0.jar org.apache.storm.kafka.spout.KafkaSpoutTopologyMainNamedTopics
16> 在 Storm UI 中查看 WordCountTopology 和 KafkaSpoutTopology 的 Topology情况;
17> 停止 Storm,查找 Jps(或端口号)PID,杀掉进程,Storm 运行结束;
27984 DRPCServer
27632 Kafka
22769 QuorumPeerMain
27985 UIServer
27986 Nimbus
27987 Supervisor
27988 LogviewerServer
27974 ZooKeeperMain
>> kill -9 PID(上一步查到,可写多个)
18> Could not find leader nimbus from seed hosts ["127.0.0.1"] 解决办法:打开一个终端启动 Zookeeper。打开另外一个终端,进入 Zookeeper 客户端,删除 Zookeeper 下的 Storm 节点数据,重启即可。
>> cd $ZOOKEEPER_HOME/bin
>> ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[storm, zookeeper]
[zk: localhost:2181(CONNECTED) 1] rmr /storm
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 3]