狠狠撸

狠狠撸Share a Scribd company logo
基于Storm分布式流计算
的实时路况分析系统
陈光华
目录
? 一、背景
? 二、Storm介绍
? 三、拥堵状况分析流程
? 四、困难和坑
数据源:蜂窝, GPS
8万出租车
80000* 86400/15= 4 6080 0000
8000/15 =5333
背景
Storm介绍
参考:
1. http://blog.csdn.net/cnbird2008/article/details/8745156 《流式计算系统》
厂迟辞谤尘组件
厂迟辞谤尘组件
参考:
1. http://blog.csdn.net/cnbird2008/article/details/8745156 《storm介绍》
?Topology:storm中运行的一个实时应用程序.
?Nimbus:负责资源分配和任务调度.
?Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程.
?Worker:运行具体处理组件逻辑的进程.
?Task:worker中每一个spout/bolt的线程称为一个task.
?Spout:在一个topology中产生源数据流的组件.
?Bolt:在一个topology中接受数据然后执行处理的组件.
?Tuple:一次消息传递的基本单元.
?Stream 驳谤辞耻辫颈苍驳:消息的分组方法
?Tuple&Stream
… Tuple Tuple …
Stream
?Topology
Spout Bolt Bolt
Bolt
Bolt
Bolt
厂迟辞谤尘组件
Storm部署
1)ZeroMQ安装
# tar zxf zeromq-2.1.7.tar.gz
# cd zeromq-2.1.7
# ./configure
# make
# make install
# sudo ldconfig
2)安装jzmq
# git clone git://github.com/nathanmarz/jzmq.git
# cd jzmq
# ./autogen.sh
# ./configure
# make
# make install
3)zookeeper
# tar -zxf zookeeper-3.4.5.tar.gz
# cp -R zookeeper-3.4.5 /usr/local/
export
ZOOKEEPER_HOME="/path/to/zookeeper
export
PATH=$PATH:$ZOOKEEPER_HOME/bin
# cd /usr/local/zookeeper/conf/
# cp zoo_sample.cfg zoo.cfg
启动服务 bin/zkServer.sh start
4)Storm
# unzip storm-0.8.1.zip
export STORM_HOME=/usr/local/storm-0.8.1
export PATH=$PATH:$STORM_HOME/bin
到此为止单机版的Storm就安装完毕了。
Storm集群配置
配置文件:storm.yaml
########## These MUST be filled in for a storm configuration
storm.zookeeper.servers:
- "192.168.61.130"
- "192.168.61.134"
- "192.168.61.135"
nimbus.host: "192.168.61.130"
storm.local.dir: "/data/storm/data"
ui.port: "8080"
参考:
1. http://hitina.lofter.com/post/a8c5e_136579 《Twitter Storm 安装实战》
2.http://www.cnblogs.com/panfeng412/archive/2012/11/30/how-to-install-and-deploy-storm-cluster.html 《Storm集群安装部署步骤【详细版】》
启动Storm
启动Storm(在此之前要启动Zookeeper)
zkServer.sh start
./storm nimbus >/dev/null 2>&1 &
./storm supervisor >/dev/null 2>&1 &
./storm ui >/dev/null 2>&1 &
厂迟辞谤尘任务管理
架构预览
数据流
各个Bolt
1. SocketSpout:
接收Socket通讯传来的GPS数据,其中一份存储于HDFS用于历史数据分析,另
外一份采用随机的方式将分组发给下一个处理单元MapMatchingBolt;
2. MapMatchingBolt:
读取GPS数据的经纬度根据一定的地图匹配算法将该条GPS信息匹配到某一条道
路上,并按照field grouping的方式发送给下一个组件SpeedCalcBolt,地图匹配的
算法相当复杂;
3. SpeedCalcBolt:
维护了深圳市十万多条路的平均速度,这里为每一条道路都构建了一个速度值
队列,当改队列的速度的时间戳超过一定时间限度时,速度值出队列;
4. MergeBolt(DBWritterBolt):
每分钟计算一次十万多条路每条路的平均速度,输出到数据库DB
骋笔厂数据格式
性能提升的核心
预处理
11万条道路
分方向编号
按0.1度 *0.1划分网格,给每条路添加网格ID
预处理:分网格
处理逻辑
处理逻辑
处理逻辑
基于厂迟辞谤尘分布式流计算的实时路况系统
耗时最少路径推荐
平均速度作为权重因子
DijkStra
用时最短路径,而非最短物理路径
踩过的坑
问题1:更新storm程序导致业务中断
?原因:更新storm程序需要kill topology后重新提交一个
?改进:storm程序不需kill topology自动逐步更新
–patch: https://github.com/nathanmarz/storm/pull/741
问题2: Storm的动态增删节点
对于减少节点,被移除的supervisor上的worker会被nimbus重新负载
均衡到其他supervisor节点上;
增加节点提供了storm rebalance命令来让正在运行的topology重新
负载均衡;
https://github.com/nathanmarz/storm/issues/54
感谢观看

More Related Content

基于厂迟辞谤尘分布式流计算的实时路况系统