about云开发-活到老 学到老

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 486|回复: 6

大神们有没有好的建议啊。。

[复制链接]

32

主题

165

帖子

661

积分

中级会员

Rank: 3Rank: 3

积分
661
发表于 2018-4-10 09:23:50 | 显示全部楼层 |阅读模式
关于实时……不知道怎么弄了。大致情况:客户有很多sqlserver业务表,希望新增,修改,删除的数据都能同步到hbase,如果直接访问业务表,会给服务器增加很大压力,所以DBA那边弄了一张操作日志表,只要对应的业务表有insert,update,delete,这张操作日志表就会有显示业务表的变化的主键,以及对应的操作,这样的话要做到实时,我需要每个一段时间去先去读操作日志表,然后对这个表里的这个时间段记录逐条进行分析主键是什么,操作是删除,新增,还是修改,然后再根据这个信息去业务表里读取数据更新到hbase  

时间间隔可以是15分钟或者半小时,请问大家有好的方案不???  

sqlserver+kafka可行不?


76

主题

1055

帖子

2849

积分

高级会员

Rank: 4

积分
2849
发表于 2018-4-10 11:01:41 | 显示全部楼层

flume和kafka都可以。
flume可以省去一些编程,传递到hdfs,然后直接取读取日志操作分析,但是有一个风险就是一旦agent挂掉,可能会丢失数据。
kafka比较安全,但是需要一些编程。不过权衡来讲,可以使用kafka。

32

主题

165

帖子

661

积分

中级会员

Rank: 3Rank: 3

积分
661
 楼主| 发表于 2018-4-10 11:19:01 | 显示全部楼层
nextuser 发表于 2018-4-10 11:01
flume和kafka都可以。
flume可以省去一些编程,传递到hdfs,然后直接取读取日志操作分析,但是有一个风 ...

flume好像是要采集日志啊。我们现在不能去访问sqlserver服务器的日志。只能访问业务表或者日志表   kafka跟sqlserver该如何对接? 网上看到一个confluent  但是好像是个闭源的东西 收费。

76

主题

1055

帖子

2849

积分

高级会员

Rank: 4

积分
2849
发表于 2018-4-10 12:05:27 | 显示全部楼层
remarkzhao 发表于 2018-4-10 11:19
flume好像是要采集日志啊。我们现在不能去访问sqlserver服务器的日志。只能访问业务表或者日志表   kafka ...

这个很简单的,如果你会spark编程,可以使用spark streaming去读取kafka数据,然后通过spark streaming写入到sqlserver。
也就是说你需要会通过spark读取kafka,然后在通过spark streaming写入到sqlserver。

推荐文章:
spark读取kafka文章推荐
Spark 2.2中的结构化流处理API处理Kafka数据
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21667


Spark读取Kafka
http://www.aboutyun.com/forum.php?mod=viewthread&tid=14982


Spark(1.2.0) Streaming 集成 Kafka 总结
http://www.aboutyun.com/forum.php?mod=viewthread&tid=11536


Spark Streaming从Kafka中获取数据,并进行实时单词统计,统计URL出现的次数
http://www.aboutyun.com/forum.php?mod=viewthread&tid=22224



spark操作sqlserver:
sparkStreaming读取sqlserver,然后把读出来的数据插入到hbase
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23224






76

主题

1055

帖子

2849

积分

高级会员

Rank: 4

积分
2849
发表于 2018-4-10 12:07:23 | 显示全部楼层

Spark SQL通过JDBC操作Sql Server



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)
代码如下:

[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

}
}


来自:
https://my.oschina.net/bindyy/blog/680195



32

主题

165

帖子

661

积分

中级会员

Rank: 3Rank: 3

积分
661
 楼主| 发表于 2018-4-12 17:29:32 | 显示全部楼层
nextuser 发表于 2018-4-10 12:07
1 Spark SQL操作关系数据库的意义

2 Spark SQL操作关系数据库实战

JDBC这段我会,我从sqlserver的表里读取数据,然后通过kafka+sparkstreaming写到hbase里。

32

主题

165

帖子

661

积分

中级会员

Rank: 3Rank: 3

积分
661
 楼主| 发表于 2018-4-12 17:30:36 | 显示全部楼层
nextuser 发表于 2018-4-10 12:07
1 Spark SQL操作关系数据库的意义

2 Spark SQL操作关系数据库实战

现在问题是不会让jdbc读出来的数据跟KAFKA对接。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

QQ|小黑屋|about云开发-学问论坛|社区-大数据云技术学习分享平台 ( 京ICP备12023829号

GMT+8, 2018-4-26 15:27 , Processed in 0.458705 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表