数仓之spark数据采集

概要

由于spark可以接入非常多的数据源,且能够完美连接hive库,那么离线数仓以spark作为数据采集工具,将是一个方便可行的方案。

配置文件json

参考alibaba开发的datax数据同步工具,及目前的flinkx数据同步工具,以json文件作为配置文件,主要分为reader模块,writer模块。这里列出hive->mysql的json demo

{
  "cluster":"10.40.3.26",
  "reader":{
    "name":"hivereader",
    "sql":"select * from  dphj.dim_base_afc_device"
  },
  "writer":{
    "name":"mysqlwriter",
    "url":"jdbc:mysql://localhost:3306/test1?characterEncoding=utf8&serverTimezone=UTC&useSSL=false",
    "username":"root",
    "password":"root",
    "table":"hive_test",
    "writeMode":"append",
    "preSql":"truncate table hive_test",
    "afterSql":""
  }
}

连接hive

spark连接hive主要读取三个文件, 分别读取hive下的,core-site.xml、hdfs-site.xml、hive-site.xml

      sparkSession.sparkContext.hadoopConfiguration.addResource(coreSiteFileName)
      sparkSession.sparkContext.hadoopConfiguration.addResource(hdfsSiteFileName)
      sparkSession.sparkContext.hadoopConfiguration.addResource(hiveSiteFileName)

这样spark就连接上了hive

连接其他数据源

  • jdbc数据源
    通过sparkSession内置的方法,读取数据转化为dataframe
    sparkSession.read.format("jdbc").options(
      Map(
        "url" -> url,
        "dbtable" -> s"(${sqlText}) t",
        "user" -> userName ,
        "password"->password
      )
    ).load
  • 文件数据源
    利用sparkContext.textFile 读取文件,数据类型为RDD[String],转化为RDD[Row],再将RDDrow转化为dataframe,就可以注册为临时表了
  • 其他数据源
    思路就是如果spark实现了的数据源,先获取得到rdd,想办法把rdd转化为dataframe,然后注册成表就ok了

数据同步

基于spark.sql 的insert 语句,就能实现数据的同步了。

缺陷

目前数据的读取默认只有一个分区,有些数据源是只支持一个分区,但是jdbc的话,可以通过直接的sql语句切分,开启多个分区,从而提升数据同步速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值