Spark SQL 大数据处理.docx

上传人:A*** 文档编号:141375665 上传时间:2020-08-07 格式:DOCX 页数:5 大小:14.40KB
返回 下载 相关 举报
Spark SQL 大数据处理.docx_第1页
第1页 / 共5页
Spark SQL 大数据处理.docx_第2页
第2页 / 共5页
Spark SQL 大数据处理.docx_第3页
第3页 / 共5页
Spark SQL 大数据处理.docx_第4页
第4页 / 共5页
Spark SQL 大数据处理.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《Spark SQL 大数据处理.docx》由会员分享,可在线阅读,更多相关《Spark SQL 大数据处理.docx(5页珍藏版)》请在金锄头文库上搜索。

1、Spark SQL 大数据处理InfoQ 上有学者对 Spark 的大数据处理,做了一些归纳演讲我尝试着对这些演讲做翻译,加入了一些自己的理解和实验理解是我自己的,有可能是错误的,实验是为了证明自己的理解是正确的Big Data Processing with Apache Spark - Part 2 : Spark SQLhttps:/ Spark 大数据处理的第二讲。上一篇为什么要使用 Spark是引言介绍 Spark, 这一篇讲实际应用。Spark 是一套计算框架脚手架就那么几种,是想要摩天大楼,还是想要濠苑别墅,都基于 Spark 的基础建设。Spark SQL 就是一种对 Spar

2、k 基建的改造应用, Spark 的底子, SQL 的上层建筑。你照样写你的 SQL , Spark SQL 帮你翻译成 Spark 底层应用的计算步骤,完成分布式计算后,把结果汇总好了,给到你, Spark 是如何处理的,完全不用你操心关于底层,唯一要注意的是,数据“底料”的格式,盖楼大概都是钢筋水泥,或者木料或者跟南京城墙一样,用米糊垒砖,屹立几百年不倒如何体现出 Spark SQL 的优越性?假设我们有 3 台 Spark 计算机组成了 Spark SQL 集群还有一台和 spark 节点一样配置的 SQL Server/ Oracle计算同样的 3 亿条数据的汇总,分别看看时间长短。S

3、elect AVG(SalesAmount) From FctSales ;假设 FctSales 有 30亿条数据,每台计算机的内存都是 1 G, CPU 1.3.看看计算返回的时间,便可以知晓那种架构快了数据底料,Spark SQL 连接的数据格式,除了 Hive, 还有 Json , Batch File等可能最新的版本还会支持更多的格式,比如 2018.02.28 发表的 Spark 2.3 就支持 Vectorized ORC Reader.从 Spark 1.3 开始,之前的 SchemaRDD 等概念就有新的更新了:*DataFrame: The new release prov

4、ides a programming abstraction called DataFrames which can act as distributed SQL query engine.Data Sources: With the addition of the data sources API, Spark SQL now makes it easier to compute over structured data stored in a wide variety of formats, including Parquet, JSON, and Apache Avro library.

5、JDBC Server: The built-in JDBC server makes it easy to connect to the structured data stored in relational database tables and perform big data analytics using the traditional BI tools.*DataFrame 取代了 SchemaRDD, 成了新一代的分布式查询引擎但对于用户来说这是透明的,我们还是用 SQL 来写,DataFrame 自动帮我们完成解析 SQL 语句,网络通信,抓取数据,汇总数据等操作Data S

6、ource, 也就是数据底料,开始支持 Parquet, Avro , Json.Json, 大家都很容易理解,平时用的也不少,就是JavaScript Object.那么 Parquet, Avro 是什么,为什么要有这两种格式的数据?分别有什么先进的地方,这些都留给我们去发现。Apache Parquet , 是一种列式存储格式的数据,以下是wikipedia 的说明:Apache Parquet is a free and open-source column-oriented data store of the Apache Hadoop ecosystem. It is simila

7、r to the other columnar storage file formats available in Hadoop namely RCFile and Optimized RCFile.所以 Apache Parquet 也是基于分布式的列式存储Apache Avro 就没那么简单了:https:/en.wikipedia.org/wiki/Apache_Avro*Avro is a remote procedure call and data serialization framework developed within Apaches Hadoop project. It

8、uses JSON for defining data types and protocols, and serializes data in a compact binary format. Its primary use is in Apache Hadoop, where it can provide both a serialization format for persistent data, and a wire format for communication between Hadoop nodes, and from client programs to the Hadoop

9、 services.It is similar to Thrift and Protocol Buffers, but does not require running a code-generation program when a schema changes (unless desired for statically-typed languages).*它可以将 Json 序列化成压缩的二进制格式,使得数据体积更小,更容易传播和存储。最大化利用我们的 Spark SQL - Spark SQL JDBC Server并不是每个用户都会有 Spark SQL 的编程技巧数据分析手段的使用

10、,正在慢慢推进。从一开始的 C/S 系统的报表工具, 到分析人员大量的 Excel 制作, 到 BI 报表的大量使用每一个阶段,都代表着数据分析这一生产力的提升。而当大数据盛行的时候,我们同样也需要升级我们的的分析工具使其可以跟得上时代的进步,跨入大数据分析领域的分析那么有没有办法让分析人员在 Excel, BI 报表上的技术积累,得以扩展到大数据分析呢?设想我们只要在excel, BI 报表上增加一条 JDBC 的连接就能连到 Spark SQL 上,执行常用的 SQL 来抓取数据,分析大数据了这就是 Spark SQL JDBC Server!Thrift JDBC Server 就是一个

11、服务器进程,属于 Spark SQL 的一部分当我们把 Thrift JDBC Server 启动起来的时候,默认是开启了本地的10000端口start-thriftserver.sh此时就允许多个客户端来访问我们的 Spark SQL 了通过向本地的10000端口发送 SQL 请求,Spark SQL 会将这些 SQL 请求转译成 Spark SchemaRDD, DataFrame 的执行命令,通过集群管理器(YARN) 发送到各个执行节点上运行。直到最终结果的返回!下面是个简单的 Java 连接 Spark SQL JDBC Server 的例子。在这个例子里,我们没有使用任何 Spar

12、k 的库完全是和 Spark 环境独立开来的应用,却还能访问 Spark SQL 利用它的并行计算所以即使我们的应用程序是一个网站,只要能连接上Spark SQL JDBC Server就能使用Spark SQLpackage SparkSQL;import java.sql.DriverManager;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;publi

13、c class Employeepublic static void main(String args) try Class.forName(org.apache.hive.jdbc.HiveDriver); catch (ClassNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace(); Connection conn = null ; try conn = DriverManager.getConnection(jdbc:hive2:/localhost:10000/default,); catch

14、 (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(); System.out.println(Connected!); Statement stmt = null;try stmt = conn.createStatement(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(); String sql; sql = SELECT count(*) as employeesCnt FROM employe

15、es; ResultSet rs = null;try rs = stmt.executeQuery(sql); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(); /STEP 5: Extract data from result set try while(rs.next() /Retrieve by column name int cnt = rs.getInt(employeesCnt); System.out.print(employeeCnt: + cnt); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号