Apache - Storm

一、Apache Storm
Storm是一个分布式的,可靠的,容错的数据流处理系统。Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt,bolt要么把数据保存到某种存储器,要么把数据传递给其它的bolt。一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。

  1、Storm组件

在Storm集群中、有两类节点:主节点master node和工作节点worker nodes。主节点运行Nimbus守护进程,这个守护进程负责在集群中分发代码,为工作节点分配任务,并监控故障。Supervisor守护进程作为拓扑的一部分运行在工作节点上。一个Storm拓扑结构在不同的机器上运行着众多的工作节点。每个工作节点都是topology中一个子集的实现。而Nimbus和Supervisor之间的协调则通过Zookeeper系统或者集群。

  2、Zookeeper

Zookeeper是完成Supervisor和Nimbus之间协调的服务。而应用程序实现实时的逻辑则被封装进Storm中的“topology”。topology则是一组由Spouts(数据源)和Bolts(数据操作)通过Stream Groupings进行连接的图。

  3、Spout

Spout从来源处读取数据并放入topology。Spout分成可靠和不可靠两种;当Storm接收失败时,可靠的Spout会对tuple(元组,数据项组成的列表)进行重发;而不可靠的Spout不会考虑接收成功与否只发射一次。而Spout中最主要的方法就是nextTuple(),该方法会发射一个新的tuple到topology,如果没有新tuple发射则会简单的返回。

  4、Bolt

Topology中所有的处理都由Bolt完成。Bolt从Spout中接收数据并进行处理,如果遇到复杂流的处理也可能将tuple发送给另一个Bolt进行处理。而Bolt中最重要的方法是execute(),以新的tuple作为参数接收。不管是Spout还是Bolt,如果将tuple发射成多个流,这些流都可以通过declareStream()来声明。

  5、Stream Groupings

Stream Grouping定义了一个流在Bolt任务中如何被切分。Shuffle grouping:随机分发tuple到Bolt的任务,保证每个任务获得相等数量的tuple。
Fields grouping:根据指定字段分割数据流,并分组。例如,根据“user-id”字段,相同“user-id”的元组总是分发到同一个任务,不同“user-id”的元组可能分发到不同的任务。
Partial Key grouping:根据指定字段分割数据流,并分组。类似Fields grouping。
All grouping:tuple被复制到bolt的所有任务。这种类型需要谨慎使用。
Global grouping:全部流都分配到bolt的同一个任务。明确地说,是分配给ID最小的那个task。
None grouping:无需关心流是如何分组。目前,无分组等效于随机分组。但最终,Storm将把无分组的Bolts放到Bolts或Spouts订阅它们的同一线程去执行(如果可能)。
Direct grouping:这是一个特别的分组类型。元组生产者决定tuple由哪个元组处理者任务接收。
Local or shuffle grouping:如果目标bolt有一个或多个任务在同一工作进程,tuples 会打乱这些进程内的任务。否则,这就像一个正常的 Shuffle grouping。

二、Apache-strom 必须要求Python 2.6以上
  1、升级 Python 官方下载地址:

https://www.python.org/ftp/python/
wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz # tar -xf Python-3.6.0.tgz # mv Python-3.6.0 /usr/local/python # cd /usr/local/python # ./configure --prefix=/usr/local/python # make # make install # mv /usr/bin/python /usr/bin/python_old # ln -s /usr/local/python/bin/python3.6 /usr/bin/python # python -V

  2、如发现yum 异常则, 编辑 /usr/bin/yum 文件

将文件头部的
#!/usr/bin/python
改为以下:(因为系统默认是2.6)
#!/usr/bin/python2.6

三、storm 安集群配置;(具体根据线上环境资源进行设置)

系统:Centos6.7
内核:2.6.32-573.el6.x86_64
安装目录:/opt/storm
数据日志目录:/opt/storm/{data,logs}
用户组权限:deploy
机器hostname需要在hosts里面配置关系映射:
zoo1 - 10.207.101.101
zoo2 - 10.207.101.102
zoo3 - 10.207.101.103

四、集群说明

主节点(nimbus)
zks1 
任务节点(supervisor)
zks2 zks3 等
注:storm主节点、任务节点安装配置完全一致。

  1、下载安装配置:官方下载地址:

http://mirrors.hust.edu.cn/apache/storm/
http://www-eu.apache.org/dist/storm/apache-storm-1.0.3/apache-storm-1.0.3.tar.gz
http://mirrors.hust.edu.cn/apache/storm/apache-storm-1.0.2/apache-storm-1.0.2.tar.gz

# tar -xf apache-storm-1.0.2.tar.gz
# cd apache-storm# cat apache-storm-0.9.6/conf/storm.yaml |grep -v ^# |grep -v ^$storm.zookeeper.servers:
- "10.207.101.101"
- "10.207.101.102"
- "10.207.101.103"
nimbus.host: "10.207.101.101"
storm.zookeeper.port: 2181
ui.port: 8090
storm.local.dir: "/opt/apache-storm-0.9.6/data"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 6704
worker.childopts: "-Xmx2g"# worker.heap.memory.mb: 2048
/** 调整分配给每个 worker 的内存,关于内存的调节,上文已有描述 */logviewer.port: 18090
topology.max.spout.pending: 1000
topology.message.timeout.secs: 300
storm.messaging.netty.server_worker_threads: 10

  2、主节点启动测验:

启动nimbus
# nohup ./bin/storm nimbus >/dev/null 2>&1 &
启动 UI
# nohup ./bin/storm ui >/dev/null 2>&1 &

  3、任务节点启动脚步

# cat supervisor_logviewer.shnohup ./bin/storm supervisor >/dev/null 2>&1 &
nohup ./bin/storm logviewer >/dev/null 2>&1 &

  4、进程检测

# ps -ef|grep storm 
# netstat -ano |grep 8090
wKioL1j7QCmz-bBgAAEEFLYWMiA134.jpg-wh_50

  

转载于:https://www.cnblogs.com/sharesdk/p/8794461.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础学习五 内置模块

time 模块 1 >>> import time2 >>> time.time()3 1491064723.8086694 >>> # time.time()返回当前时间的时间戳timestamp(定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数)的方法,无参数5 >>> time.asctime()6 Sun Apr 2…

如何在windows上将本地项目上传到Github

详细步骤参考: https://www.cnblogs.com/smfx1314/p/8426115.html 感谢作者分享!

Sublime Text3使用Package Control 报错There Are No Packages Available For Installation

在使用sublime时,有时候我们希望将代码复制出来后仍然是高亮显示,这样我们便需要安装SublimeHighLight插件,在安装SublimeHighLight插件之前,我们应该先安装Package Control插件! 1、Package Control插件作用&#xff…

数据结构学习笔记

数据结构学习笔记(一) 假期以来我都坚持每天看一点郝斌的数据结构视频。讲的很透彻,也很风趣。 前几天都是为讲数据结构而做准备,讲了一些结构体和指针,今天终于开始正式将数据结构。说实话,我今天才知道…

2018-1-27:内存的划分

内存的划分 1.寄存器 2.本地方法区 3.方法区 4.栈内存 存储的都是局部变量,变量的作用域一结束,该变量就立即释放 5.堆内存 存储的是对象,即凡是new的都在堆中 特点:   1.每一个实体都有首地址 2.堆内存中每一个变量都有默认初始…

mysql 1130 localhost_解决1130 Host 'localhost' is not allowed to connect to this MySQL server

WAMP 64bit安装好后,连接数据库,提示#1130 Host ‘localhost’ is not allowed to connect to this MySQL server1.首先停止mysql服务,如果不会可以直接停止所有wampserver。2.然后打开一个命令行窗口,切换到mysql的安装目录&…

Ubuntu 14.04下安装Redis报错:“You need tcl 8.5 or newer in order to run the Redis test”问题解决

解决方案参考文献:安装tcl https://blog.csdn.net/zhangshu123321/article/details/51440106 感谢楼主分享!

InstallSheild 获取系统环境变量,如Desktop路径等

使用FOLDER_DESKTOP变量获取的桌面路径可能为:C:\Users\Public\Desktop 而不是C:\Users\用户\Desktop Copy and paste the following define statements at the beginning of your setup.rul file. Also, make sure you copy and paste the prototype for the SHGe…

线程2---异步1

在Java中什么是同步?什么是异步?对于这两个概念我们必须要明确。只有明确这两个概念,才会在明确在什么场景下使用同步以及异步。 在这里我可以形象的举个例子来辨明这两个概念: 1.同步与异步同步和异步关注的是消息通信机制 (sync…

mysql通常使用语句_Mysql 常用SQL语句集锦

基础篇//查询时间,友好提示$sql "select date_format(create_time, %Y-%m-%d) as day from table_name";//int 时间戳类型$sql "select from_unixtime(create_time, %Y-%m-%d) as day from table_name";//一个sql返回多个总数$sql "sel…

为什么你需要设计和维护一套自我移动标准?

在一个很长的调研日的休息时分,我在同一个客户谈一个项目,在这个项目中,我正为一个全球经济公司开发一个iOS标准。他们的第一反应是这样的:“什么?你在开发Apple iOS以外的标准?那还要开发什么?…

JS 小知识点汇总

1.offsetWidth & width A:因为. 1.offsetWidth是只读属性,而style.width是可读写得。2.offsetWidth返回的是一个整数,style.width返回的是一个字符串,并且带有单位;**3.style.width只能返回以style方式定义的内部样式的width属性值。4.of…

django-redis中redis.conf配置详细说明

参考文献:https://blog.csdn.net/ljphilp/article/details/52934933 感谢楼主分享!

初识Mysql(一)

1 搭建数据库服务器2 MYSQL数据类型3 修改表结构1 搭建数据库服务器1.1 存在mariadb时:#systemctl status mariadb#systemctl stop mariadb#rpm -e --nodeps mariadb-libs #不依赖关系卸载#rm -rf /etc/my.cnf#rm -rf /var/lib/mysql/*1.2 新安装时[rootser51 ~]# …

数据挖掘资料

https://blog.csdn.net/baimafujinji/article/details/53269040 在2006年12月召开的 IEEE 数据挖掘国际会议上(ICDM, International Conference on Data Mining),与会的各位专家选出了当时的十大数据挖掘算法( top 10 …

如何进行个人知识管理和提高自己能力?

21世纪是一个知识爆炸的世纪,知识爆炸是指人类创造的知识,主要是自然科学知识,在短时期内以极高的速度增长起来。是人们对当前大量出现并飞速发展的各种知识现象所进行的夸张和描述。有人综合计算,全世界的知识总量,七到十年翻一番。这就是风行全球的摩登名词的意思…