天天看点

Storm 环境部署及简单使用

===> 什么是 Storm?

        --> Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,遵循 Eclipse Public License 1.0。

        --> Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。

        --> Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。

            Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用

            户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。 

        --> Storm的主工程师Nathan Marz表示:Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,

               Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用

                任意编程语言来做开发

===> Storm 支持离线计算和流式计算

        --> 离线计算:批量获取数据,批量传输数据,周期性比量计算数据,数据展示(Sqoop-->HDFS--> MR ---> HDFS)

            --- 代表技术:

                    -- Sqoop 批量导入数据

                    -- HDFS 批量存储数据

                    -- MapReduce 批量计算

                    -- Hive

        --> 流式计算:数据实时产生,数据实时传输,数据实时计算,实时展示(Flume ---> Kafka ---> 流式计算 ---> Redis)

                    -- Flume 实时获取数据

                    -- Kafka/metaq 实时数据存储

                    -- Storm/JStorm 实时数据计算

                    -- Redis 实时结果缓存,持久化存储(MySQL)

===> Storm 与 Hadoop 的区别

        --> 

Storm

Hadoop

用于实时计算

用于离线计算

处理的数据保存在内存中,连连不断

处理的数据保存在文件系统中

数据通过网络传输进来

从 HDFS 平台获取数据

===> Storm 体系结构

===> Storm 运行流程

        --> Storm 结构中各部分职责:

            --- Nimbus: 

                    负责资源分配和任务调度

            --- Supervisor: 

            负责接受 Nimbus 分配的任务,启动和停止属于自己管理的 worker 进程

                  (*)可通过配置文件设置当前 supervisor 上启动几个 worker 进程

            --- Worker:

                    运行具体处理 组件逻辑 ,任务类型有两种:

                    -- Spout任务

                    -- Bolt 任务

            --- Executor: 

                        Storm 0.8 之后, Executor 为 Worker 进程中的具体的物理线程,同一个 Spout/Bolt的 Task可能会共享一个物理线程,一个 Executor 中只能运行隶属于同一个 Spout/Bolt 的 Task

            --- Task: 

                    worker 中每一个 spout/bolt 的线程称为一个 task, 在 storm0.8 之后, task 不再与物理线程对应,不同 spout/bolt 的 task 可能会共享一个物理线程,该 线程称为 executor

===> Strom 伪分布式安装部署

        --> 安装前需要部署 Zookeeper 环境,参见:http://blog.51cto.com/songqinglong/2062909 

        --> 解压:

<code>        </code><code>tar zxf apache</code><code>-</code><code>storm</code><code>-</code><code>1.0</code><code>.</code><code>3.tar</code><code>.gz </code><code>-</code><code>C </code><code>/</code><code>app</code>

        --&gt; 配置环境变量

<code>        </code><code>vim  ~</code><code>/</code><code>.bash_profile</code>

<code>        </code><code># storm_home</code>

<code>        </code><code>STORM_HOME</code><code>=</code><code>/</code><code>app</code><code>/</code><code>apache</code><code>-</code><code>storm</code><code>-</code><code>1.0</code><code>.</code><code>3</code>

<code>        </code><code>export STORM_HOME</code>

<code>        </code><code>PATH</code><code>=</code><code>$STORM_HOME</code><code>/</code><code>bin</code><code>:$PATH</code>

<code>        </code><code>export PATH</code>

        --&gt; 修改配置文件

<code>       </code><code>vim $STORM_HOME</code><code>/</code><code>conf</code><code>/</code><code>storm.yaml </code>

<code>         </code><code># 此处指定 zookeeper 节点           </code>

<code>         </code><code>storm.zookeeper.servers:</code>

<code>                </code><code>-</code> <code>"192.168.10.210"</code>

<code>         </code><code># </code>

<code>         </code><code># nimbus.seeds: ["host1", "host2", "host3"]</code>

<code>         </code><code># 此处指定 nimbus 节点</code>

<code>         </code><code>nimbus.seeds: [</code><code>"192.168.10.210"</code><code>]</code>

<code>         </code><code># 每个从节点上的worker个数</code>

<code>         </code><code>supervisor.slots:ports:</code>

<code>            </code><code>-</code> <code>6700</code>

<code>            </code><code>-</code> <code>6701</code>

<code>            </code><code>-</code> <code>6702</code>

<code>            </code><code>-</code> <code>6703</code>

<code>         </code><code># 开启任务 Debug 功能</code>

<code>         </code><code>"topology.eventlogger.executors"</code><code>: </code><code>1</code>

<code>         </code><code># 任务上传后,保存的目录</code>

<code>         </code><code>storm.local.</code><code>dir</code><code>: </code><code>"/data/storm_data"</code>

        --&gt; 启动Storm

            --- 伪分部模式:

<code>      </code><code>storm nimbus &amp;            </code>

<code>      </code><code>storm ui &amp;      </code><code># 可以通过 http 的方式查看:http://ip:8080</code>

<code>      </code><code>storm supervisor &amp;</code>

<code>      </code><code>storm logviewer &amp;</code>

            --- 完全分部式:

                    -- 主节点

<code>        </code><code>storm nimbus &amp;</code>

<code>        </code><code>storm ui &amp;</code>

<code>        </code><code>storm logviewer &amp;</code>

                    -- 从节点

<code>        </code><code>storm supervisor    </code>

<code>        </code><code>storm logviewer</code>

        --&gt; 查看:  http://ip:8080

===&gt; Strom 完全分布式安装部署

        --&gt; 安装方式与伪分布式基本相同,只需要将安装目录copy 到其它节点上即可

===&gt; Storm HA

        --&gt; 只需修改storm.yaml 文件中的 nimbus.seeds: ["bigdata1"] ,将主机加入到此列表中,并在主机上启动 nimbus 即可

===&gt; Storm 常用命令 

        --&gt; 提交任务

            --- 格式:storm jar    ***.jar   [Toplogy名字:类名字]   别名

            --- 示例:

<code>      </code><code>storm jar storm</code><code>-</code><code>starter</code><code>-</code><code>topologies</code><code>-</code><code>1.0</code><code>.</code><code>3.jar</code> <code>org.apache.storm.starter.WordCountTopology MyWordCountExample</code>

        --&gt; 杀死任务

            --- 格式:storm  kill  任务名称   -w  10    注: -w  等待秒数

<code>      </code><code>storm kill MyWordCountExample  </code><code>-</code><code>w  </code><code>10</code>

        --&gt; 停用任务

            --- 格式:storm deactivte 任务名称

<code>      </code><code>storm deactivte  MyWordCountExample</code>

            --- 格式:storm activate 任务名称

<code>      </code><code>storm activate MyWordCountExample</code>

        --&gt; 重新部署任务

            --- 格式:storm rebalance 任务名称

<code>      </code><code>storm rebalance MyWordCountExample</code>

            --- (*) 当集群有所变动,此命令将会信用拓扑,然后在相应的超时时间内重启拓扑,重新分配任务

===&gt; Storm 中 WordCount 程序流程分析

        --&gt; 通过查看 Storm  UI 上每个组件的events 链接,可以查看 Storm 的每个组件(spout/blot)发送的消息

        --&gt; 需要开启 Debug 功能,在配置文件中添加下列参数并重新启动 storm 

<code>            </code><code>"topology.eventlogger.executors"</code><code>: </code><code>1</code>

        --&gt;

===&gt; Storm 编程模型

        --&gt; Topology: Storm 中运行的一个实时应用程序的名称

        --&gt; Spout: 在一个topology 中获取源数据流,然后转换为 topology 的内部源数据

        --&gt; Bolt: 接受数据然后执行处理,用户可以在其中执行自己想要的操作

        --&gt; Tuple: 一次消息传递的基本单元