场景:使用Spark Streaming接收HDFS上的文件数据与关系型数据库中的表进行相关的查询操作;

使用技术:Spark Streaming + Spark JDBC External DataSources

 
HDFS上文件的数据格式为:id、name、cityId,分隔符为tab 
1       zhangsan        1
2 lisi 1
3 wangwu 2
4 zhaoliu 3
MySQL的表city结构为:id int, name varchar
1    bj
2 sz
3 sh
本案例的结果为:select s.id, s.name, s.cityId, c.name from student s join city c on s.cityId=c.id;

示例代码:

package com.asiainfo.ocdc

case class Student(id: Int, name: String, cityId: Int)
package com.asiainfo.ocdc

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.SparkContext
import org.apache.spark.sql.hive.HiveContext /**
* Spark Streaming处理HDFS上的数据并结合Spark JDBC外部数据源处理
*
* @author luogankun
*/
object HDFSStreaming {
def main(args: Array[String]) { if (args.length < 1) {
System.err.println("Usage: HDFSStreaming <path>")
System.exit(1)
} val location = args(0) val sparkConf = new SparkConf()
val sc = new SparkContext(sparkConf)
val ssc = new StreamingContext(sc, Seconds(5)) val sqlContext = new HiveContext(sc)
import sqlContext._ import com.luogankun.spark.jdbc._
//使用External Data Sources处理MySQL中的数据
val cities = sqlContext.jdbcTable("jdbc:mysql://hadoop000:3306/test", "root", "root", "select id, name from city")
//将cities RDD注册成city临时表
cities.registerTempTable("city") val inputs = ssc.textFileStream(location)
inputs.foreachRDD(rdd => {
if (rdd.partitions.length > 0) {
//将Streaming中接收到的数据注册成student临时表
rdd.map(_.split("\t")).map(x => Student(x(0).toInt, x(1), x(2).toInt)).registerTempTable("student"); //关联Streaming和MySQL表进行查询操作
sqlContext.sql("select s.id, s.name, s.cityId, c.name from student s join city c on s.cityId=c.id").collect().foreach(println)
}
}) ssc.start()
ssc.awaitTermination()
}
}

提交到集群执行脚本:sparkstreaming_hdfs_jdbc.sh

#!/bin/sh
. /etc/profile
set -x cd $SPARK_HOME/bin spark-submit \
--name HDFSStreaming \
--class com.asiainfo.ocdc.HDFSStreaming \
--master spark://hadoop000:7077 \
--executor-memory 1G \
--total-executor-cores \
/home/spark/software/source/streaming-app/target/streaming-app-V00B01C00-SNAPSHOT-jar-with-dependencies.jar \
hdfs://hadoop000:8020/data/hdfs

Spark Streaming、HDFS结合Spark JDBC External DataSouces处理案例的更多相关文章

  1. Spark Streaming、Kafka结合Spark JDBC External DataSouces处理案例

    场景:使用Spark Streaming接收Kafka发送过来的数据与关系型数据库中的表进行相关的查询操作: Kafka发送过来的数据格式为:id.name.cityId,分隔符为tab zhangs ...

  2. Spark Streaming揭秘 Day35 Spark core思考

    Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来 ...

  3. Spark Streaming之四:Spark Streaming 与 Kafka 集成分析

    前言 Spark Streaming 诞生于2013年,成为Spark平台上流式处理的解决方案,同时也给大家提供除Storm 以外的另一个选择.这篇内容主要介绍Spark Streaming 数据接收 ...

  4. Offset Management For Apache Kafka With Apache Spark Streaming

    An ingest pattern that we commonly see being adopted at Cloudera customers is Apache Spark Streaming ...

  5. <Spark><Spark Streaming>

    Overview Spark Streaming为用户提供了一套与batch jobs十分相似的API,以编写streaming应用 与Spark的基本概念RDDs类似,Spark Streaming ...

  6. 大数据开发实战:Spark Streaming流计算开发

    1.背景介绍 Storm以及离线数据平台的MapReduce和Hive构成了Hadoop生态对实时和离线数据处理的一套完整处理解决方案.除了此套解决方案之外,还有一种非常流行的而且完整的离线和 实时数 ...

  7. 小记---------spark组件与其他组件的比较 spark/mapreduce ;spark sql/hive ; spark streaming/storm

    Spark与Hadoop的对比   Scala是Spark的主要编程语言,但Spark还支持Java.Python.R作为编程语言 Hadoop的编程语言是Java    

  8. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南

    Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...

  9. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

随机推荐

  1. 黑马程序员——OC语言 三大特性之多态

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之一的多态 (一)多态的基本概念 OC对象具有多态性体现在 Per ...

  2. OMG点菜系统

    算是一个项目吧,自己一个人也写了很久,有很多东西是自己写的,当然也有在网上借鉴人家大神的,不一而足,代码太多,不贴了,直接上图.(一直出现的天蓝色是使用windows自带主题壁纸上截取的一段) [原本 ...

  3. ubuntu fix the grub boot(need Internet)

    sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt-get update sudo apt-get install -y boot- ...

  4. 学习node-formidable

    使用第三方包node-formidable,需要通过Node.js的包管理NPM来安装外部包,我们已安装好的Node.js环境一般都已经默认把NPM安装到机器上,我们可以在cmd下通过命令行在NPM中 ...

  5. NSIS 的简介

    NSIS (Nullsoft Scriptable Install System)是一个Open Source的Windows系统下安装程序制作程序.它提供了安装.卸载.系统设置.文件解压缩等功能.这 ...

  6. 转 TextBox的EnableViewState属性问题

    问题如下: ---------------------------------------------------------------------------------------------- ...

  7. BNUOJ 13105 nim博弈

    ncredible Chess Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on LightOJ. Ori ...

  8. NSString字符串

    要把 “2011-11-29” 改写成 “2011/11/29”一开始想用ios的时间格式,后来用NSString的方法搞定. [string stringByReplacingOccurrences ...

  9. 我用工具怎么连接不上mysql数据库的? MySql access denied for user错误

    MySql access denied for user错误 方法/步骤   MySql远程连接时的"access denied for user **@**"错误,搞的我很头大, ...

  10. systemtap

    http://www.ibm.com/developerworks/library/l-systemtap/index.html http://wiki.eclipse.org/Linux_Tools ...