Spark不只是在批处理上有所成绩,而是更加注重整个生态圈的建设,其拥有流式处理框架SparkStreaming,采用微批的形式达到类似流处理的效果,现在又推出了Structured Streaming,实现基于状态的流处理框架 。 此外还拥有SparkSQL来帮助非开发人员更加便捷的调用Spark的服务和Spark MLlib这个机器学习库 。
Spark虽好,但其对内存资源消耗也很大,同时也使得他在稳定性上不如MapReduce,所以有些大公司数仓的日常任务仍旧采用传统MapReduce的方式执行,不求最快,但求最稳 。 我们的系统在刚从MapReduce上切到Spark时,每天夜里也是任务异常频发,最后调整了任务和资源分配,再加上一个很粗暴的重试机制解决了 。
Apache Flink官网:https://flink.apache.org/
Flink是德国Data Artisans公司开发一款分布式计算系统,该公司于19年初被阿里巴巴集团收购 。 包括Spark和Kafka,也都看到了未来流式计算的前景是非常巨大的,纷纷建立属于自己的流式计算生态圈 。
Flink和Spark Streaming相比,前者是真正的流式计算,而后者是微批处理,虽然批次足够小,但其本质毕竟还是批处理,这就导致有些场景SparkStreaming注定无法满足,虽然Spark现在将重心转移到了Structured Streaming,它弥补了Spark Streaming很多的不足,但是在处理流程上仍然是微批处理 。
而Flink在设计之初就同时考虑了批处理和流处理这两种需求,所以使用者也可以只通过一个计算引擎,就能实现批处理和流处理两种计算场景,其主要几个需要清楚的特性我觉得分别是:State状态管理,CheckPoint容错机制,Window滑动窗口,和Watermark乱序解决 。 这些内容网上都有很多介绍,不再阐述 。
Apache Impala官网:https://impala.apache.org/
Impala是Cloudera公司用C++开发的支持SQL语义的查询系统,可以用来查询HDFS、HBase、Kudu的内容,也支持多种序列化和压缩格式,因为也是基于内存的计算,比传统MapReduce快很多 。 不过因为已经使用了Spark,所以组里并没有对Impala进行大规模的应用 。 经过一些零散的调研和了解,好像其它公司对Impala的应用也不是非常多 。
Apach Zookeeper官网:https://zookeeper.apache.org/
Zookeeper无论在数据系统还是在其它后端系统的使用场景都非常广,它可以用作分布式锁服务,可以用做系统的配置中心,可以协助完成一致性算法的选主过程,可以用于ZKFC做节点健康情况的探查,总之用处还有很多 。 而它的工作机制,基本就是ZAB协议的机制,一个支持崩溃恢复的原子广播协议,其主要组成也是由一个Leader和多个Follower组成的,数据的提交遵循2PC协议 。 当Leader崩溃时,Follower会自动切换状态开始重新选主,重新选完之后再进行多节点的数据对齐 。
Apache Sqoop官网:https://sqoop.apache.org/
一款用于在传统关系型数据库和HDFS之间互相进行数据传递的工具,无论是import还是export都提供了大量的参数,因为是分布式执行,数据传输的速度也非常快 。 只是在使用的过程中需要注意数据源中的异常数据,会比较容易造成数据传递过程中的异常退出 。 为了弥补Sqoop的功能单一,推出了Sqoop 2,架构上比Sqoop 1复杂了很多,不过我没有用过 。
Apache Flume官网:http://flume.apache.org/
分布式数据传输工具,支持包含文件、Netcat、JMS、HTTP在内的多种数据源 。 其结构上分成Source、Channel、Sink三部分,Source将获取到的数据缓存在Channel中,这个Channel可以是文件,可以是内存,也可以使用JDBC,Sink从Channel消费数据,传递给系统中的其他模块,比如HBase、HDFS、Kafka等等 。
Apache Kafka官网:http://kafka.apache.org/
曾经是一款由Scala开发的分布式消息队列产品,现在生态已经扩展了,因为它推出了Kafka Streaming,所以现在也应该被称作是一个流处理平台了,但这里不说Kafka Streaming,因为没有用过和了解过 。
Kafka的队列按照Topic划分,每个Topic下由多个Partition组成,在单个Partition中的消息保证是有序的 。 这种结构下确保了消息是在磁盘顺序写入的,节省了磁盘寻址的时间,所以数据落盘的速度非常快 。 加之采用了mmap的方式,减少了用户态和内核态之间的数据拷贝次数,mmap是一种将文件内容和内存地址映射的技术,提效十分明显 。 Kafka和Flume的配合使用,形成了流式处理领域里的经典框架 。
Apache Ranger & Sentry官网:http://ranger.apache.org/
官网:http://sentry.apache.org/
Ranger和Sentry都是分布式的数据安全工具,这两个产品的功能也基本是一样的,就是去管理大数据计算生态圈产品的权限,Sentry是采用插件的形式,将自己集成到Impala、Hive、HDFS、Solr等产品上,当用户向这些产品发起请求,产品会先向Sentry Server进行校验,Sentry也可以和Kerberos配合使用,从而完成跨平台统一权限管理 。 而Ranger所提供的功能也类似,但是所支持的产品更加多样,包括HDFS、HBase、Hive、YARN、Storm、Solr、Kafka、Atlas等,其同样也是采用一个Ranger Admin连接多个集成到产品上的Ranger插件完成的权限验证过程 。
推荐阅读
- 我个人做出了以下6点思考 如何做好游戏用户运营?
- 分享推广品牌的几大方法 如何推广品牌?
- 给大家推荐13个既实用又好用的营销工具 新媒体营销分析工具有哪些?
- 推广创意的4大技巧 什么是推广创意?
- 写营销推广文案的2大内容 怎样写营销推广文案?
- 如何做饼干(饼干的做法烤箱新手做)
- DNF手游攻略大全让您技能天下无双
- 给宝宝适宜的环境刺激,促进大脑发育?
- 宝宝多大要戒除奶瓶?
- 分享整合营销的4大好处 整合营销的好处有哪些?