欢迎来到天天文库
浏览记录
ID:4242507
大小:764.90 KB
页数:4页
时间:2017-11-30
《sparksql:基于内存的大数据处理引擎》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、CloudComputing云计算SparkSQL:基于内存的大数据处理引擎文/高彦杰,陈冠诚作为Shark的下一代技术,SparkSQL的性能已完全超过Shark,且由于底层机制相同,用户可以做到无缝迁移,而受到用户的青睐。本文将深入分析SparkSQL架构思路和优化策略,并与同类产品进行比较。在刚刚结束的SparkSummit2014上,Databricks和Databricks利用Catalyst开发了SparkSQL。在宣布不再支持Shark的开发,全力以赴开发SharkSpark1.0版本中已发布SparkSQL。的下一代技术SparkS
2、QL,同时Hive社区也启动了机器学习、图计算、流计算如火如荼的发展和流HiveOilSpark项目,将Spark作为除MapReduce~行吸弓1了大批学习者,那为什么还要重视在大数Tez之外的新执行引擎。根据BigDataBenchmark据环境下使用SQL呢?主要有以下几点原因。测试对比数据,Shark的InMemory性能可达到-易用性与用户惯性。在过去很多年中,有大批Hive的100倍,即使是OnDisk也能达到1O倍的性程序员的工作是围绕着“DB+应用”的架构来做能提升,是Hive的强有力的替代解决方案。而作为Shark进化版本的Spa
3、rkSQL,在最新测试中的,SQL的易用性提升了应用的开发效率。程序员的性能已超过Shark。本文中,统称SparkSQL、已习惯业务逻辑代码调用SQL的模式去写程序。Shark和HiveonSpark为SQLonSpark。虽然Shark提供SQL和JDBC的支持会让传统用户像以前一样不再开发,但其架构和优化仍有借鉴意义,因此地编写程序,大大减少了迁移成本。文章中也会有所涉及。一生态系统的力量。很多系统软件性能好,但未取得成功和没落,很大程度上因为生态系统为什么使用SparkSQL问题。传统的SOL在JDBC、ODBC等标准下形成了一套成熟的生态
4、系统,很多应用组件和工具可由于Shark底层依赖于Hive,所以这个架构的优以迁移使用,如一些可视化工具、数据分析工具势是传统Hive用户可以将Shark无缝集成进现有等,原有企业的ITEK具可以无缝过渡。系统运行查询负载。但也有一些问题:随着版本一数据解耦,SparkSQL正在扩展支持多种持久升级,查询优化器依赖于Hive,不方便添加新的化层,用户可使用原有的持久化层存储数据,也优化策略,需要进行另一套系统的学习和二次开发,学习成本很高。另一方面,MapReduce是进可体验和迁移~ljSparkSQL提供的数据分析环境。程级并行,~HHive在
5、不同的进程空间会使用一些静态变量,当在同一进程空1司进行多线程并行执SparkSQL架构分析行时,多线程同时写同名称的静态变量会产生一致性问题,所以Shark需要使用另一套独立维护SparkSQL与传统“DBMS查询优化器+执行器”的Hive源码分支。为了解决这个问题,AMPLab的架构较为类似,只不过其执行器是在分布式环104CloudComputing云计算境中实现的,并采用Spark作为执行引擎。SparkSQL的查询引擎是Catalyst,其基于Scala语言开发,能灵活利用Scala原生的语言特性方便地进行功能扩展,奠定了SparkSQL
6、的发展空间。Catalyst~SQL语言翻译成最终的执行计划,并在这个过程中进行查询优化。与传统方法的区别在于,SQL经过查询优化器最终转换为可执行的查函1SparksoL查询擎cata
7、yst的架掏询计划是一个查询树,传统DB可以执行这个查询计划,而SparkSQL会在Spark内将这棵执行计SqlParserSQL语句进行语法解析划树转换为有向无环图(DAG)再进行执行。Catalyst架构及执行流程分析Analyzer进行属性和关系的关联和检验图1中是Catalyst的整体架构,可以看~rJCatalyst是SparkSQL的调度核心,它遵循
8、传统数据库的查询optimizer进行启发式逻辑蠢询优化解析步骤对SQL进行解析,转换为逻辑查询计划和物理查询计划,最终转换为荭行执行(图2)。QueryPlanner逻辑查询计划转换为物理SparkSQL优化策略查询计划除了查询优化,SparkSOL在存储上也是进行了优妙化,下面看看SparkSQL的优化策略。prepareForExecution调整数据分布内存列式存储与内存缓存表SparkSQL可以通过cacheTable将数据存储转换进2X.Spark执行空间转换为DAG执行为列式存储,同时将数据加载到内存进行缓存。置2Catalyst豹执
9、{7流程cacheTable相当于分布式集群的内存物化视图,内存空间占用、网络传输开销和I/O开销。将数据进行缓存,这样迭
此文档下载收益归作者所有