昨天去参加了数据库技术大会,主要听了一下hadoop相关的技术演讲,干货不多,不过也有一些,跟大家分享一下
会议上讲的最多的是两个名词ha和spark,ha主要涉及namenode和jobtracker的高可用,大家分享了一下各自ha的方案,感觉大同小异,基本上是参考了facebook的avatarnode方
案实现热备,使用zookeeper主从选取方式实现自动切换,目前咱们采用cdh4的版本基本解决了这个问题;spark是最近很火的一个开源项目,由伯克利大学AMP实验室贡献的,现在已
纳入apache基金会顶级项目,spark的性能非常高,据intel的同学介绍,开启缓存的时候性能高出hadoop100倍,即使不开缓存也要高出10倍左右,spark的主要优势在于数据不落地(或部分落地),
上级任务执行完毕,直接流入下级继续执行,不像hadoop的传统MR,需要执行完m或r以后写回到磁盘,再读取出做下一步操作,减少了很多io消耗。
另外关于hadoop的数据平台化搭建,各位演讲嘉宾都介绍了一下自己公司使用情况,总的来看各个公司平台搭建方式,和我们目前的基础建设基本相同,但要比我们完善很多。
首先日志收集方面,大家更倾向于自己写消息队列的方式,淘宝的同学写的Hqueue号称能吃下每秒150w的消息处理,不过开源项目kafka也是大家追捧的对象,用的人也很多;
存储层大家基本上都是用了hadoop原生的hdfs,应用层为了应对不同的业务需要,各家略有不同,不过总的来看基本划分为四部分:
一:离线批处理业务,大家都使用了hive作为日常离线业务的处理工具,不过大家也都在尝试基于spark的查询工具shark,shark是完全兼容hive语法的,换句话说,只需要修改底层计算方式,业务层无需变动,既可以从hive过度到shark
二:离线实时性要求较高的业务,大家更侧重于使用hbase这种分布式KV系统,有的公司甚至将hive和hbase整合在一起,已解决查询的高效问题,但这种方式的性能还有待验证。
Hbase本身不提供sql查询方式,但开源的phoenix基本解决了这个问题,能够支持大部分的sql语法,可以尝试一下
三:实时计算,主要用在广告系统,实时查看广告投放的效果,解决方案主要有storm,但一些嘉宾反应storm本身和hadoop相隔离运维成本很高,机器成本也比较高,随即提出使用基于spark的istream流计算框架,
spark本身和hadoop结合的比较好,istream可能真的能够弥补hadoop在实时处理实时计算方面的不足
四:数据挖掘、机器学习,主要方案有两个方向,mahout和Mllib,mahout自身集成了很多机器学习的算法包括聚类、分类、时间序列等等,是一个很全面的ML工具集,将大部分的算法使用MR来实现,将基于大数据的机器学习变为可能,
Mllib是基于spark的一个机器学习库,参考mahout的实现方式,Mllib也基本实现了常用的聚类、分类、时间序列算法
总的来看spark很美,但大家都还在尝试和调研阶段,我们也可以去尝试一下,毕竟这种高效的框架不仅能节省很大的机器开支还有可能给业务处理带来意想不到的惊喜。
最后还想提的一点也是最重要而咱们还没有去做的一点,hadoop集群的监控和可视化管理,目前我们更倾向于人机结合监控,手动启动恢复服务,大家也分享了一些hadoop监控管理的方案,包括apache的Ambari或者自己开发的监控工具,
同样也是大同小异,基本上都是使用Ganglia收集度量指标,用Nagios发送报警,另外希望将hadoop服务的启动关闭重启等也通过web的方式来管理,这样可能会让我们的工作更轻松一些。
最最后希望我们大家能够为了更好地搭建维护数据中心而努力,一步步走来,相信大家都会有所收获。