




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、开发经验总结在 jstorm 中,spout 中 nextTuple 和 ack/fail 运行在不同的线程中,从而鼓励用户在 nextTuple 里面执行 block 的操作, 原生的 storm, nextTuple 和 ack/fail 在同一个线程,不允许 nextTuple/ack/fail 执行任何 block 的操作,否则就会 出现数据超时,但带来是,当没有数据时, 整个 spout 就不停的在空跑,极大的浪费了 cpu, 因此,jstorm更改了 storm 的 spout 设计,鼓励用户 block 操作(比如从队列中 take消息),从而节省 cpu。在架构上,“消息中间件
2、 + jstorm + 外部” 3 架马车式架构JStorm 从消息中间件中取出数据,计算出结果,上到外部o通常消息中间件使用 RocketMQ,Kafkao oo外部使用 HBase,该架构,非常方便 JStorm 程序进行重启(如因为增加业务升级程序)职责清晰化,减少和外部系统的交互,JStorm 将计算结果到o外部后,用户的查询就无需JStorm 中服务进程,查询外部即可。 *在实际计算中,常常发现需要做数据订正,因此在设计整个项目时,需要考虑重跑功能 *在 meta 中,数据最好带时间戳 *如果计算结果入 hadoop 或数据库,最好结果也含有时间戳如果使用异步 kafeta 客户端(
3、listener 方式)时,当增加/重启 meta时,均需要重启 topology如果使用 traion 时,增加 kafeta 时, brokerId 要按顺序,即新增机器 brokerId 要比之前的都要大,这样reassign spout 消费brokerId 时就不会发生错位。非事务环境中,尽量使用 IBasicBolt计算并发度时,spout 按单 task 每秒 500 的 QPS 计算并发全内存操作的 task,按单 task 每秒 2000 个QPS 计算并发有向外部输出结果的 task,按外部系统承受能力进行计算并发。对于 MetaQ 和 Kafka,拉取的频率不要太小,低于
4、 100ms 时,容易造成 MetaQ/Kafka 空转次数偏多一次获取数据 Block 大小是 2M 或 1M,太大内存 GC 压力比较大,太小效率比较低。一个 worker 运行 2 个 task条件允许时,尽量让程序可以,比如某种特殊情况出现时,比如截止到凌晨 2 点,数据还没有同步到 hadoop,发送出来从 jstorm 0.9.5.1 开始, 底层 netty 同时支持同步模式和异步模式,o 异步模式, 性能更好, 但容易造成 spout 出现 fail, 适合在无acker 模式下,ty.sync.mode: falseo 同步模式, 底层是接收端收一条消息,才能发送一条消息,
5、适合在有 acker 模式下,ty.sync.mode: true常见经验使用 zookeeper 时, 建议使用 curator,但不要使用过高的 curator 版本数据热点问题运维经验总结启动 supervisor 或 nimbus 最好是以方式启动, 避免终端退出时向jstorm 发送信号,导致 jstorm 莫名其妙的退出nohupjstorm supervisor /dev/null 2&1 &使用 admin 用户启动所有的程序, 尤其是不要用 root 用户启动 web ui,在安装目录下,建议使用 jstorm-current, 比如当前使用版本是jstorm 0.9.4,
6、则创建要将 jstorm-current指向 jstorm-0.9.4, 当以后升级时, 只需指向新的 jstorm 版本。ln -sjstorm-0.9.4 jstorm-current将 JStorm 的本地目录和日志配置到一个公共目录下, 比如/home/admin/jstorm_data 和/home/admin/logs, 不要配置到$JSTORM_HOME/data 和$JSTORM_HOME/logs,当升级时,替换整个目录时,容易丢失所有的本地数据和日志。JStorm 支持环境变量 JSTORM_CONF_DIR, 当设置了该变量时, 会从该目录里storm.yaml 文件,
7、因此建议设置该变量,该变量指定的目录存放配置文件 storm.yaml, 以后每次升级时,就可以简单的替换目录就可以了建议不超过 1 个月,强制重启一下 supervisor, 因为 supervisor 是一个 daemon 进程, 不停的创建子进程,当使用时间过长时, 文件打开的句柄会非常多,导致启动 worker 的时间会变慢,因此,建议每隔一周,强制重启一次 supervisorJStorm web ui使用 apache tomcat 7.x, 默认的端口是 8080, 如果需要将 80 端口重定向到 8080 时, 可以用 root 执行命令:iptables -t nat -A
8、PREROUTING -p tcp -dport 80 -j REDIRECT -to-port 8080Jvm GC 需要使用 CMS GC 方式, JStorm 默认已经设置, 使用 Storm 的朋友需要类似的设置,worker.childopts: -Xms1g -Xmx1g -Xmn378m -XX:SurvivorRatio=2-XX:+UseConcMarkSpGC -XX:+UseCMSInitiatingOccupancyOnly-XX:CMSInitiatingOccupancyFraction=65对于一些重要的应用,可以对大集群进行分组, 修改配置文件的 “storm.
9、zookeeper.root” 和 “nimbus.host”Zeromq2.1.764 位 java 就需要使用 64 位 zeromq在 64 位OS 上使用 32 位 java, 编译 zeromq 增加 flag m32对于应用使用 ZK 较频繁的,需要将 JStorm 的 ZK 和应用的 ZK不混在一起使用起来,nimbus 节点上建议不运行 supervisor, 并建议把 nimbus 放置到 ZK 所在的机器上运行slot 数为 ”CPU 核 - 1“, 假设 24 核 CPU, 则 slot 为 23配置 cronjob,定时检查 nimbus 和 supervisor,一旦
10、进程死去,自动重启ZK 的xns=500Linux 对外连接端口数限制,TCP c时,就开始大量抛异常,需要nt 对外发起连接数达到 28000 左右# echo 10000 65535 /proc/sys/net/ipv4/ip_local_port_range常见问题性能问题参考性能优化资源不够当”No supervisor resource is enough for component “, 则意味着资源不够 如果是仅仅是测试环境,可以将 supervisor 的 cpu 和 memory slot设置大,在 jstorm 中, 一个 task 默认会消耗一个 cpu slot 和一个
11、 memory slot, 而一台机器上默认的 cpu slot 是(cpu 核数 -1), memory slot 数(物理内存大小 * 75%/1g), 如果一个 worker 上运行 task 比较多时,需要将 memory slot size设小(默认是 1G), 比如 512M, memory.slot.per.size: 535298048#if it is null, then it will be detect by system supervisor.cpu.slot.num: null#if it is null, then it will be detect by sys
12、tem supervisor.mem.slot.num: null# support disk slot# if it is null, it will use $(storm.local.dir)/worker_shared_data supervisor.disk.slot: null序列化问题所有 spout,bolt,configuration, 发送的消息(Tuple)都必须实现Serializable, 否则就会出现序列化错误.如果是 spout 或 bolt 的成员变量没有实现 Serializable 时,但又必须使用时,可以对该变量进行实例化时,增加 transient 修饰
13、符, 然后在 open 或 prepare 时,Log4j0.9.0 开始,JStorm 依旧使用 Log4J,但 storm 使用 Logbak,因此应用程序如果有依赖 log4j-over-slf4j.jar,则需要 exclude 所有 log4j-over-slf4j.jar依赖,下个版本将自定义 classloader,就不用担心这个问题。SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError.SLF4J: Seea
14、lsofor more details. hread main java.lang.ExceptionInInitializerError.apache.log4j.Logger.getLogger(Logger.java:39).apache.log4j.Logger.getLogger(Logger.java:43)Exceptionat at atcom.alibaba.jstorm.daemon.worker.Worker.(Worker.java:32)Caused by: java.lang.IllegalSeException: Detected bothlog4j-over-s
15、lf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError. See alsofor more details.at.apache.log4j.Log4jLoggerFactory.(Log4jLoggerFactory.java: 49). 3 moreCould not find the main class: com.alibaba.jstorm.daemon.worker.Worker. Program will exit.类如果应用程序使用和JStorm 相同的jar 但版本不一样时,
16、建议打开classloader,修改配置文件topology.enable.classloader: true或者ConfigExten.setEnableTopologyClassLoader(conf, true);JStorm 默认是关掉 classloader,因此 JStorm 会强制使用 JStorm 依赖的 jar提交任务后,等待几分钟后,web ui 始终没有显示对应的 task有 3 种情况:用户程序初始化太慢如果有用户程序的日志输出,则表明是用户的初始化太慢或者出错,查看日志即可。 另外对于 MetaQ 1.x 的应用程序,Spout 会 recover /.meta_re
17、cover/目录下文件,可以直接删除这些消费失败,加速启动。通常是用户 jar或初始化发生问题打开 supervisor 日志,找出启动 worker 命令,单独执行,然后检查是否有问题。类似下图:检查是不是 storm 和 jstorm 使用相同的本地目录检查配置项 ”storm.local.dir“, 是不是 storm 和 jstorm 使用相同的本地目录,如果相同,则将二者分开提示端口被绑定有 2 种情况:多个 worker 抢占一个端口假设是 6800 端口被占, 可以执行命令 “ps -ef|grep 6800” 检查是否有多个进程, 如果有多个进程,则手动杀死他们系统打开太多的 connectionLinux 对外连接端口数限制,TCP c开始大量抛异常,需要nt 对外发起连接数达到 28000 左右时,就# echo 10000 65535 /proc/sys/net/ipv4/ip_local_port_range性能优化在对性能优化前,必须仔细阅读 开发经验总结 运维经验总结这 2 篇文章中,有很多性能优化相关的经验。选型按照性能来说, trident tran机制的普通接口, 因此,首先ion 使用 ack 机制普通接口 关掉 ack衡一下应该选用什么方式来完成任务。如果“使用 ack 机制普通接口”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业培训课件分类
- 营养师实操题
- 油漆工艺危险源辨识与风险评价信息表
- 英语单词大全3500
- 跨国公司内部股权调整与员工持股计划协议
- 电力采购合同谈判与电力市场改革政策适应
- 医院装修技术方案文本
- 楼盘研发方案
- 知识产权孵化器厂房转租及知识产权运营合同
- 正规公司税务运作方案
- 小学教育学(第5版)课件全套 曾文婕 第0-9章 绪论、学教育源流-小学教育评价
- 《资治通鉴》与为将之道知到课后答案智慧树章节测试答案2025年春武警指挥学院
- DBJ51-T 184-2021 四川省预成孔植桩技术标准
- 部队安全保密教育
- 儿童脓疱型银屑病的护理
- 消防工程验收重点及验收常见问题图析
- 【MOOC】教育研究方法-浙江大学 中国大学慕课MOOC答案
- 车棚扩建改造方案
- 《回归分析》课件
- 《医疗事故处理条例》课件
- 心脏手术围手术期
评论
0/150
提交评论