Spark读取HDFS上的SQL语句,然后导入MySQL

      现在Hive执行结果会存储到HDFS上,这些文件是一些SQL语句,我们可以通过Spark读取这些文本文件,然后导入到MySQL中,下面是实现了如何通过Spark来读取HDFS,通过在Parition中获取数据库的连接,并把操作MySQL数据库,从而实现Spark读取HDFS,来操作MySQL。



本项目的环境:
JDK:1.7
Hadoop:2.7.1
Spark:1.6.0
Scala:2.10.5

采用SBT方式创建的项目,可以详见:http://blog.csdn.net/shenfuli/article/details/51534734


/**
  * <Function> 读取HDFS上文本的SQL,然后导入MySQL </Function>
   * </Deploy>
  *
  * Author: Created by fuli.shen on 2016/5/30.
  */
object RDDtoMySQL {

  var inputPath = ""
  var ip = ""
  var dataBaseName = ""
  var userName = ""
  var password = ""

  def main(args: Array[String]) {
    if (args.length != 5) {
      println("Usage:<inputPath><dataBaseName><userName><password>")
      sys.exit(1)
    }
    inputPath = args(0)
    ip = args(1)
    dataBaseName = args(2)
    userName = args(3)
    password = args(4)
    //初始化Spark环境
    val conf: SparkConf = new SparkConf()
      .setAppName("RDDtoMySQL")
    val sc: SparkContext = new SparkContext(conf)

    //读取HDFS转为RDD
    val textFile: RDD[String] = sc.textFile(inputPath)
    //RDD导入Mysql,使用foreachPartition减少MySQL创建连接数
    textFile.foreachPartition(importMySQL)
    sc.stop()
  }

  /**
    * 批量插入Mysql,提升插入MySQL的效率
    *
    * @param iterator
    */
  def importMySQL(iterator: Iterator[String]): Unit = {

    //初始化变量
    var conn: Connection = null
    var ps: PreparedStatement = null
    try {
      val url = "jdbc:mysql://" + ip + "/" + dataBaseName + ""
      conn = DriverManager.getConnection(url, userName, password);
      val s1 = System.currentTimeMillis();
      iterator.foreach(sql => {
        ps = conn.prepareStatement(sql)
         ps.executeUpdate()
      })
      val s2 = System.currentTimeMillis();
      println("update data  consume time:" + (s2 - s1) + "ms")
    } catch {
      case e: Exception => println("RDDtoMySQL.importMySQL  MySQL Exception ")
    } finally {
      if (null != ps) {
        ps.close()
      }
      if (null != conn) {
        conn.close()
      }
    }
  }
}

注意: 再次强调,获取MySQL的连接,这里是在Parition中获取的。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾文教编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值