第68课:Spark SQL通过JDBC操作Sql Server
2016-05-23 00:00
405 查看
摘要: Spark学习
本期内容:
1 Spark SQL操作关系数据库的意义
2 Spark SQL操作关系数据库实战
2,通过format(“jdbc“)的方式说明SparkSQL操作的数据来源是通过JDBC获得,JDBC后端一般都是数据库,例如MySQL、Oracle等;
3,通过DataFrameReader的optition方法把要访问数据库的信息传递进去:
url:代表数据库的jdbc链接地址;
dbtable:具体要链接那个数据库;
driver:Driver部分是Spark SQL访问数据库的具体的驱动的完整包名和类名
4,关于JDBC的驱动的Jar,可以放在Spark的library目录,也可以在使用Spark Submit的使用指定具体的Jar(编码和打包的时候都不需要这个JDBC的Jar);
5,在实际的企业级开发环境中,如果数据中数据规模热别大,例如10亿条数据,此时采用传统的DB去处理的话一般需要对10亿条数据分成很多批次处理,例如分成100批(受限于单台Server的处理能力),且实际的处理过程可能会非常复杂,通过传统的Java EE等技术可能很难或者不方便实现处理算法,此时采用Spark SQL活得数据库中的数据并进行分布式处理就可以非常好的解决该问题,但是由于Spark SQL加载DB中的数据需要实践2,所以一般会在Spark SQL和具体要操作的DB之间加上一个缓冲层次,例如中间使用Redis,可以把Spark处理速度提高到甚至45倍;
6,关于写入数据库的操作,下图中的方法不可取;
a)当DataFrame要把通过Spark SQL、Core、ML等复杂操作后的数据写入数据库的时候首先是权限的问题,确保数据库授权了当前操作Spark SQL的用户;
b)DataFrame要写数据到DB的时候一般都不可以直接写进去,而是要转成RDD,通过RDD写数据到DB中,可以用foreachPartition(避免partiton每一条记录连一次数据库)
本期内容:
1 Spark SQL操作关系数据库的意义
2 Spark SQL操作关系数据库实战
一:使用Spark通过JDBC操作数据库
1, Spark SQL可以通过JDBC从传统的关系型数据库中读写数据,读取数据后直接生成的是DataFrame。然后再加上借助于Spark内核的丰富的API来进行各种操作。从计算数据规模的角度去讲,集群并行访问数据库数据;2,通过format(“jdbc“)的方式说明SparkSQL操作的数据来源是通过JDBC获得,JDBC后端一般都是数据库,例如MySQL、Oracle等;
3,通过DataFrameReader的optition方法把要访问数据库的信息传递进去:
url:代表数据库的jdbc链接地址;
dbtable:具体要链接那个数据库;
driver:Driver部分是Spark SQL访问数据库的具体的驱动的完整包名和类名
4,关于JDBC的驱动的Jar,可以放在Spark的library目录,也可以在使用Spark Submit的使用指定具体的Jar(编码和打包的时候都不需要这个JDBC的Jar);
5,在实际的企业级开发环境中,如果数据中数据规模热别大,例如10亿条数据,此时采用传统的DB去处理的话一般需要对10亿条数据分成很多批次处理,例如分成100批(受限于单台Server的处理能力),且实际的处理过程可能会非常复杂,通过传统的Java EE等技术可能很难或者不方便实现处理算法,此时采用Spark SQL活得数据库中的数据并进行分布式处理就可以非常好的解决该问题,但是由于Spark SQL加载DB中的数据需要实践2,所以一般会在Spark SQL和具体要操作的DB之间加上一个缓冲层次,例如中间使用Redis,可以把Spark处理速度提高到甚至45倍;
6,关于写入数据库的操作,下图中的方法不可取;
a)当DataFrame要把通过Spark SQL、Core、ML等复杂操作后的数据写入数据库的时候首先是权限的问题,确保数据库授权了当前操作Spark SQL的用户;
b)DataFrame要写数据到DB的时候一般都不可以直接写进去,而是要转成RDD,通过RDD写数据到DB中,可以用foreachPartition(避免partiton每一条记录连一次数据库)
二、Spark SQL操作关系数据库实战(连的是SQL Server)
代码如下:[code=language-scala]package IMF.sql import org.apache.spark.sql.SQLContext import org.apache.spark.{SparkConf, SparkContext} /** * Created by hduser on 16-5-13. * JDBC连接到SQL Server */ object s68_SparkSQLJDBC2SQLServer { def main(args: Array[String]) { val conf = new SparkConf() .setAppName("SparkSQLJDBC2SQLServer") .setMaster("local") val sc = new SparkContext(conf) sc.setLogLevel("WARN") val sqlContext = new SQLContext(sc) //需要先导入jar包,需要sqljdbc_4以上版本 val df_sqlServer = sqlContext.read.format("jdbc") .option("url", "jdbc:sqlserver://***.***.***.***:1433") .option("databaseName", "xxx") .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") .option("dbtable", "xxx") .option("user", "sa") .option("password", "xxx").load() df_sqlServer.show(100) //df_sqlServer.rdd.for } } 0 © OSChina.NET 使用条款 隐
相关文章推荐
- jdbc中的Statement和PreparedStatement接口对象
- 详解HDFS Short Circuit Local Reads
- Spark RDD API详解(一) Map和Reduce
- 使用spark和spark mllib进行股票预测
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- Windows下Scala环境搭建
- Spark随谈——开发指南(译)
- 单机版搭建Hadoop环境图文教程详解
- Spark,一种快速数据分析替代方案
- JDBC 数据库常用连接 链接字符串
- hadoop常见错误以及处理方法详解
- JDBC连接Access数据库的几种方式介绍
- Windows7下安装Scala 2.9.2教程
- JDBC程序更新数据库中记录的方法
- JDBC 程序的常见错误及调试方法
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- 在Java的JDBC使用中设置事务回滚的保存点的方法