8.1.1 使用Spark SQL的原因

由于Shark底层依赖于Hive,这个架构的优势是对传统Hive用户可以将Shark无缝集成进现有系统运行查询负载。但是我们也看到一些问题:随着版本的升级,查询优化器依赖于Hive,不方便添加新的优化策略,需要学习另一套系统和进行二次开发,学习成本很高。另一方面,MapReduce是进程级并行。例如,Hive在不同的进程空间会使用一些静态变量,当在同一进程空间并行执行多线程时,多线程同时写同名称的静态变量会产生一致性问题,因此Shark需要使用另外一套独立维护的Hive源码分支。为了解决这个问题,AMPLab和Databricks利用Catalyst开发了Spark SQL。在Spark 1.0版本中已经发布Spark SQL。

Spark的Full Stack解决方案为用户提供了多样的数据分析框架,机器学习、图计算、流计算如火如荼地发展和流行吸引了大批的学习者,那么为什么我们今天还是要重视在大数据环境下使用SQL呢?笔者认为主要有以下几点原因。

1)易用性与用户惯性。在过去的很多年中,有大批程序员的工作是围绕DB+应用的架构来做的,因为SQL的易用性提升了应用的开发效率。程序员已经习惯了采用业务逻辑代码调用SQL的模式去写程序,惯性的力量是强大的,如果还能用原有的方式解决现有的大数据问题,何乐而不为呢?提供SQL和JDBC的支持会让传统用户像以前一样书写程序,大大减少迁移成本。

2)生态系统的力量。很多系统软件性能好,但是未取得成功便没落了,很大程度上是由于生态系统问题。传统SQL在JDBC、ODBC、SQL的各种标准下形成了一整套成熟的生态系统,很多应用组件和工具可以迁移使用,像一些可视化的工具、数据分析工具等,原有企业的IT工具可以无缝过渡。

3)数据解耦。Spark SQL正在扩展支持多种持久化层,用户可以使用原有的持久化层存储数据,但是也可以体验和迁移到Spark SQL提供的数据分析环境下分析Big Data。