JAVA开发搞了一年多的大数据,究竟干了点啥( 四 )


  • Presto是一个facebook开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节
  • Presto是一款内存计算型的引擎,所以对于内存管理必须做到精细,才能保证query有序、顺利的执行,部分发生饿死、死锁等情况 。也正是因为它是基于内存计算的,它的速度也是很快的 。
  • Presto采用典型的master-slave模型,master主要负责对从节点的一些管理以及query的解析和调度,而slave则是负责一些计算和读写 。
2.2 Spark? Spark是一个并行计算框架 , 适用于大规模的数据处理 。Spark也是一个基于内存的计算引擎,专门解决大数据的分布式问题 , 它是hadoop的一个补充,因此可以在Haddop文件系统中并行运行 。
? 平时使用最多的还是SparkSql,用于一些查询 , 或者是搭建一些定时Job,使用SparkSql组件去完成对数据的抽取、转换、加载,但是查阅了相关介绍,Spark的应用远远不止这些 , 它还有一些流计算、机器学习、图计算的场景应用,下面有一段关于Spark应用场景介绍,是从<https://help.aliyun.com/document_detail/441938.html>中看来了,我就不用我笨拙的语言来编排了,放在下面供大家探讨一下:
  • 离线ETL
    离线ETL主要应用于数据仓库,对大规模的数据进行抽?。‥xtract)、转换(Transform)和加载(Load),其特点是数据量大,耗时较长,通常设置为定时任务执行 。
  • 在线数据分析(OLAP)
    在线数据分析主要应用于BI(Business Intelligence) 。分析人员交互式地提交查询作业,Spark可以快速地返回结果 。除了Spark,常见的OLAP引擎包括Presto和Impala等 。Spark 3.0的主要特性在EMR中的Spark 2.4版本已支持 , 更多特性详情请参见Spark SQL Guide 。
  • 流计算
    流计算主要应用于实时大屏、实时风控、实时推荐和实时报警监控等 。流计算主要包括Spark Streaming和Flink引擎,Spark Streaming提供DStream和Structured Streaming两种接口,Structured Streaming和Dataframe用法类似,门槛较低 。Flink适合低延迟场景 , 而Spark Streaming更适合高吞吐的场景 , 详情请参见Structured Streaming Programming Guide 。
  • 机器学习
    Spark的MLlib提供了较丰富的机器学习库,包括分类、回归、协同过滤、聚合,同时提供了模型选择、自动调参和交叉验证等工具来提高生产力 。MLlib主要支持非深度学习的算法模块,详情请参见Machine Learning Library (MLlib) Guide 。
  • 图计算
    Spark的GraphX支持图计算的库,支持丰富的图计算的算子 , 包括属性算子、结构算子、Join算子和邻居聚合等 。详情请参见GraphX Programming Guide 。
2.3 MapReduce?Hadoop MapReduce:一个分布式的离线并行计算框架,它是Hadoop全家桶的一部分,它的思想是分而治之,也就是说将一个大的复杂的问题切割成一个个小的问题加以解决,最后再汇总,这从MapReduce的字面就可以看出来 。MapReduce处理任务过程是分为两个阶段的:
  • Map阶段:Map阶段的主要作用是“分” , 即把复杂的任务分解为若干个“简单的任务”来并行处理 。Map阶段的这些任务可以并行计算,彼此间没有依赖关系 。
  • Reduce阶段:Reduce阶段的主要作用是“合”,即对map阶段的结果进行全局汇总 。
下面从一张图例来看下MapReduce计算的处理过程:
JAVA开发搞了一年多的大数据,究竟干了点啥

文章插图
3.由数据同步想到的? 所谓大数据 , 必然和形形色色的数据表打交道,但是要清楚一点,对于一个规模还算可以的企业来讲,那下面的项目组肯定是一片一片的 , 他们之间的数据没有办法做到百分之百的共享,有时你想要的去做一些数据的分析 , 可能就需要其他项目组甚至第三方企业的支持,从别的渠道去拿到数据进行使用 , 因此,数据同步接入变成了大数据开发中必不可少的工作 。
? 其实数据同步接入的方式有很多,如果有数据库的权限,可以直接使用大数据平台自带的同步组件,编写一定的规则,配置好接入的频率,将数据接入过来;如果是第三方外部企业的数据,为了安全起见,我们通常也会选择接口的方式进行数据的接入 , 再同步至大数据平台;当然,使用消息中间件也是很不错的方式,比如Kafka , 但是这东西总归有些严格意义上的限制,很多企业为了安全是不会对外暴露自身的Kafka服务地址的;还有一些数据量过大的情况 , 可以考虑sftp服务器的方式,直接将数据上传到指定的服务器的文件夹里 , 不过这个总归有些依赖于手工支持的弊端在里面,不过据说好像也可以编写脚本完成自动化的上传和拉?。?对于我这个搞Java的来讲,这方面的解决策略还是不太懂的;其他方法也可以使用DolphinScheduler(DS)里面的一些小组件,去执行一些脚本来完成同步,当然脚本的编写就类似于

推荐阅读