分享

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

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

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

sqlserver+kafka可行不?


已有(7)人评论

跳转到指定楼层
nextuser 发表于 2018-4-10 11:01:41

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

回复

使用道具 举报

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

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

使用道具 举报

nextuser 发表于 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






回复

使用道具 举报

nextuser 发表于 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)
代码如下:

[mw_shl_code=scala,true]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

}
}[/mw_shl_code]

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



回复

使用道具 举报

remarkzhao 发表于 2018-4-12 17:29:32
nextuser 发表于 2018-4-10 12:07
1 Spark SQL操作关系数据库的意义

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

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

使用道具 举报

remarkzhao 发表于 2018-4-12 17:30:36
nextuser 发表于 2018-4-10 12:07
1 Spark SQL操作关系数据库的意义

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

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

回复

使用道具 举报

javaanddonet 发表于 2018-4-28 11:16:15
关注一下,感觉这个需求不错,期待大神给出解决思路。
你的数据流向是:sqlserver ---> kafka ----> hbase    对吧?
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条