jstorm(为什么有人说大数据工程师比Java程序员工资高50%)
本文目录
为什么有人说大数据工程师比Java程序员工资高50%
当前正处在大数据时代,基于大数据的相关应用也正处在落地应用的初期,由于大数据研发人才存在较大的人才缺口,所以目前整个IT行业内,从事大数据开发的研发人员在薪资待遇上也是比较高的。由于早期从事大数据开发的工程师往往都具有较高的学历(研究生以上),这也是薪资待遇比较高的原因之一。
在IT行业内,技术人员的薪资待遇与所掌握的知识结构有密切的关系,对于掌握流行技术的开发人员来说,在薪资待遇方面往往会更好,这也是促进人才结构升级的办法。大数据相关研发工作对于开发人员往往有更多的要求(数学、统计学等),要从事大数据相关的研发工作往往也需要较长时间的积累,所以大数据人才的待遇也相对比较高。由于大数据行业的发展速度要明显快于人才的培养速度,所以大数据领域在未来较长一段时间内都将面临人才短缺的问题,尤其是专业的技术人才,这在一定程度上进一步推升了大数据开发岗位的薪资待遇。
Java程序员群体是目前IT行业内一个较为庞大的人群,主要原因在于Java语言有广泛的应用场景和稳定的性能表现,不论是大型互联网应用还是中小型开发,Java都有丰富的解决方案。由于Java语言在大数据领域也有广泛的使用,所以不少Java程序员也陆续转向了大数据领域,从目前的行业发展情况来看,选择大数据方向的Java程序员往往在待遇上有一个较为明显的提升。
最后,随着产业互联网的发展,未来从事大数据开发的工程师在待遇上会有进一步上升的空间,所以学习大数据相关知识对于程序员来说是有必要的。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网方面的问题,也可以咨询我,谢谢!
jstorm 核心
生成Topology
IRichSpout IRichSpout 为最简单的Spout接口
其中注意: =》spout对象必须是继承Serializable, 因此要求spout内所有数据结构必须是可序列化的 =》spout可以有构造函数,但构造函数只执行一次,是在提交任务时,创建spout对象,因此在task分配到具体worker之前的初始化工作可以在此处完成,一旦完成,初始化的内容将携带到每一个=》task内(因为提交任务时将spout序列化到文件中去,在worker起来时再将spout从文件中反序列化出来)。 =》open是当task起来后执行的初始化动作 =》close是当task被shutdown后执行的动作 =》activate 是当task被激活时,触发的动作 =》deactivate 是task被deactive时,触发的动作 =》nextTuple 是spout实现核心, nextuple完成自己的逻辑,即每一次取消息后,用collector 将消息emit出去。 =》ack, 当spout收到一条ack消息时,触发的动作,详情可以参考 ack机制 =》fail, 当spout收到一条fail消息时,触发的动作,详情可以参考 ack机制 =》declareOutputFields, 定义spout发送数据,每个字段的含义 =》getComponentConfiguration 获取本spout的component 配置
Bolt
其中注意: =》bolt对象必须是继承Serializable, 因此要求spout内所有数据结构必须是可序列化的 =》bolt可以有构造函数,但构造函数只执行一次,是在提交任务时,创建bolt对象,因此在task分配到具体worker之前的初始化工作可以在此处完成,一旦完成,初始化的内容将携带到每一个task内(因为提交任务时将bolt序列化到文件中去,在worker起来时再将bolt从文件中反序列化出来)。 =》prepare是当task起来后执行的初始化动作 =》cleanup是当task被shutdown后执行的动作 =》execute是bolt实现核心, 完成自己的逻辑,即接受每一次取消息后,处理完,有可能用collector 将产生的新消息emit出去。 ** 在executor中,当程序处理一条消息时,需要执行collector.ack, 详情可以参考 ack机制 ** 在executor中,当程序无法处理一条消息时或出错时,需要执行collector.fail ,详情可以参考 ack机制 =》declareOutputFields, 定义bolt发送数据,每个字段的含义 =》getComponentConfiguration 获取本bolt的component 配置
打包
提交jar xxxx.jar 为打包后的jar com.alibaba.xxxx.xx 为入口类,即提交任务的类 parameter即为提交参数
Storm中有个特殊的task名叫acker,他们负责跟踪spout发出的每一个Tuple的Tuple树(因为一个tuple通过spout发出了,经过每一个bolt处理后,会生成一个新的tuple发送出去)。当acker(框架自启动的task)发现一个Tuple树已经处理完成了,它会发送一个消息给产生这个Tuple的那个task。Acker的跟踪算法是Storm的主要突破之一,对任意大的一个Tuple树,它只需要恒定的20字节就可以进行跟踪。
Acker跟踪算法的原理:acker对于每个spout-tuple保存一个ack-val的校验值,它的初始值是0,然后每发射一个Tuple或Ack一个Tuple时,这个Tuple的id就要跟这个校验值异或一下,并且把得到的值更新为ack-val的新值。那么假设每个发射出去的Tuple都被ack了,那么最后ack-val的值就一定是0。Acker就根据ack-val是否为0来判断是否完全处理,如果为0则认为已完全处理。 要实现ack机制:
阿里自己的Jstorm会提供 public interface IFailValueSpout { void fail(Object msgId, List《object》values); } 这样更合理一些, 可以直接取得系统cache的msg values
ack机制即,spout发送的每一条消息,在规定的时间内,spout收到Acker的ack响应,即认为该tuple 被后续bolt成功处理
在规定的时间内(默认是30秒),没有收到Acker的ack响应tuple,就触发fail动作,即认为该tuple处理失败,timeout时间可以通过Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS来设定。 l或者收到Acker发送的fail响应tuple,也认为失败,触发fail动作 注意,我开始以为如果继承BaseBasicBolt那么程序抛出异常,也会让spout进行重发,但是我错了,程序直接异常停止了 这里我以分布式程序入门案例worldcount为例子吧。
有人问到Storm 是怎么处理重复的tuple? 因为Storm 要保证tuple 的可靠处理,当tuple 处理失败或者超时的时候,spout 会fail并重新发送该tuple,那么就会有tuple 重复计算的问题。这个问题是很难解决的,storm也没有提供机制帮助你解决。不过也有一些可行的策略: (1)不处理,这也算是种策略。因为实时计算通常并不要求很高的精确度,后 续的批处理计算会更正实时计算的误差。 (2)使用第三方集中存储来过滤,比如利用 MySQL 、MemCached 或者 Redis 根据逻辑主键来去重。 (3)使用bloom filter 做过滤,简单高效。
在学习storm的过程中,有不少人对storm的Spout组件中的ack及fail相关的问题存在困惑,这里做一个简要的概述。
Storm保证每一个数据都得到有效处理,这是如何保证的呢?正是ack及fail机制确保数据都得到处理的保证,但是storm只是提供给我们一个接口,而具体的方法得由我们自己来实现。例如在spout下一个拓扑节点的bolt上,我们定义某种情况下为数据处理失败,则调用fail,则我们可以在fail方法中进行数据重发,这样就保证了数据都得到了处理。其实,通过读storm的源码,里面有讲到,有些类(BaseBasicBolt?)是会自动调用ack和fail的,不需要我们程序员去ack和fail,但是其他Bolt就没有这种功能了。
本文相关文章:
supesite(康盛的supesite与其他门户建站程序比如cms、帝国等相比,有什么差别吗谢谢!)
2024年8月7日 11:30
d3dx9_26 dll(win10打开程序提示丢失d3dx9 26.dll怎么解决)
2024年8月2日 12:10
旗帜软件照片处理工具提示应用程序发生异常怎么处理?旗帜软件老显示文件缺失
2024年8月1日 01:30
佳能4000打印机驱动(佳能打印机ipmax ip4000能在网上下载到那些版本的驱动程序)
2024年7月29日 15:30
g450显卡驱动(商务G450安装不了显卡驱动像这样“NVIDIA此图形驱动程序无法找到兼容的图形硬件”)
2024年7月28日 08:20
sourceinsight3 5(我安装的Source Insight 3.5 为什么不能高亮显示C语言程序)
2024年7月23日 04:51
ios7怎样关闭后台程序(苹果新系统ios7怎么关闭后台程序)
2024年7月17日 02:00
淘宝突然说您使用的程序是内测版本 将于2020-03-28到期是什么意思 叫我下载新版本?手机上显示淘宝是内测版本会到期是怎么回事儿
2024年7月14日 10:48
PDF文件进行ORC识别过程中,无法进行识别,程序停止工作了,怎么回事?扫描仪中ORC和CCD功能的区别
2024年7月1日 20:10
publisher下载(谁可以提供Publisher独立程序的免费下载地址)
2024年6月30日 10:07
有哪些微信小程序小游戏让你眼前一亮,或者带给你一些思考和想法的推荐吗?微信小游戏排行榜前十名
2024年6月26日 03:25
winmgmt(电脑碰到“WinMgmt.exe-应用程序错误”应该怎么处理)
2024年6月24日 22:36
更多文章:
极客未来物联网科技有限公司怎么样?山西极客未来智能科技有限公司怎么样
2024年6月11日 16:51
伪娘和易装癖和人妖的区别是什么?想百度请教下大家兔宝宝易装怎么样推荐吗
2024年6月24日 22:21
湖南道有道人力资源有限公司怎么样?道有道,非常道,这句话应该怎么说,
2024年6月9日 23:19
南方CASS7.1成图系统怎样进行导线平差?导线测量如何进行平差计算
2024年7月15日 09:55
vista操作系统下载(vista操作系统硬盘版那里可以下载!!要在硬盘上安装!!没有光驱~~~)
2024年8月3日 10:25
以前家里超过2台电脑连接路由器会被断网,现在还会断网吗?关于使用路由器断网的原因及解决方法有哪些
2024年1月7日 18:35
苍灵世界1.0正式版饮血剑怎么升级?苍灵世界正式版1.0.0攻略开局怎么玩怎么做任务
2024年4月26日 15:30