sparksql 和 sparkstreaming 哪个更好?

2021-04-23 20:54发布

4条回答
等等同学
2楼 · 2021-04-25 10:09

若将Spark作业以yarncluster模式提交到Yarn,由Yarn启动Spark作业,在某个子节点的Executor会监听该端口,接收数据。

722
3楼 · 2021-04-25 10:10

1. Spark SQL

用于处理结构化数据,提供SQL语句查询的API接口 


SparkSQL数据类型DataFrames

这种数据类型支持结构化的数据文件,Hive中的表,外部数据库和已存在的RDD

该接口在Python, R, Java, Scala中都是可用的

SparkSQL数据类型DataSets

Spark 1.6中添加的新接口

不支持Python

SparkSQL特点

兼容好 

兼容Hive,支持RDD,JSON文件等数据源,支持nosql数据库数据

性能高 

含有多种性能优化技术

扩展强 

SQL的语法解析,分析和优化都可自定义

SparkSQL性能优化技术

内存列存储In-Memory Columnar Storage 

优化空间占用量和读取吞吐率

字节码生成bytecode generation 

优化所有的SQL表达式,通过scala运行时放射机制实现

SparkSQL运行架构

SQL语句解析(parse),找出查询项和数据源等

SQL语句与数据库的数据字典绑定(bind),判断是否可执行

对提供的多种执行计划进行优化(optimize)

实际执行(execute) 


包含sqlContext和hiveContext两个分支

sqlContext不支持hive查询语句

hiveContext是SQLContext子类,支持hql查询

SparkSQL代码实现

spark-shell


val rdd1=sc.textFile("/demo.txt")# 读取hdfs文件

val rdd2=rdd1.map(_.split(","))# 按,拆分字符串

# case class生成封装类,仅包含属性和类型,getset方法scala自带

case class stu(sno:Int,dname:String,loc:String)

# 调用封装类stu,将拆分后的字符串转为相应类型装入

 val res=rdd2.map(line=>stu(line(0).toInt,line(1),line(2)))

val df=res.toDF# 转换为DataFrames类型

# (1)DSL模式查询,即DataFrames Style

df.select("dname").show # 查询列

df.printSchema # 查看表结构

# (2)SQL模式查询

# 实例化SQLContext装入sparkContext

val sqlctx=new org.apache.spark.sql.SQLContext(sc) 

df.registerTempTable("tok")# 临时生成一张表

sqlctx.sql("select * from tok").show# SQL语句查询该表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

idea中scala编程


import org.apache.spark.{SparkConf, SparkContext}

import org.apache.spark.sql.SQLContext


case class stu(sno:Int,dname:String,loc:String)

object demo {

  def main(args: Array[String]): Unit = {

    var sconf=new SparkConf()

    sconf.setMaster("local")

    sconf.setAppName("demo")

    var sc=new SparkContext(sconf)

    val rdd1=sc.textFile("file:///d:/demo.txt").map(_.split(" "))

    var res=rdd1.map(line=>stu(line(0).toInt,line(1),line(2)))

    val sqlctx=new SQLContext(sc)

    //通过sql提供的上下文对象,导入.implicits._

    import sqlctx.implicits._

    val df=res.toDF()

    df.registerTempTable("tok")

    sqlctx.sql("select * from tok").show()

    sc.stop()

  }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

2. Spark Streaming

构建在Spark上的实时计算框架,基于内存的高速执行引擎,结合流式,批处理和交互式查询

Spark Streaming数据的输入和输出

支持实时数据的可扩展,高吞吐,高容错的流处理

数据源如kafka,flume等

数据输出如hdfs,redis,hbase等 


Spark Streaming特点

高效,高容错,准实时性(秒级别)

精简复杂算法的实现

集成Spark批处理和交互式查询功能

Spark Streaming运行架构

Spark Streaming把实时输入数据流以时间片为单位切分成块

然后把每块数据作为一个RDD,并使用RDD操作处理每一小块数据

每个块都会生成一个Spark Job处理,最终结果也返回多块

DStream(离散流)(可以当做RDD处理)

Spark Streaming支持一个高层的抽象,叫做离散流(discretized stream)或者DStream

连续的数据流

Kafka, Flume和Kinesis等源获取的输入数据流

在其他DStream的基础上通过高阶函数获得

在内部,DStream是由一系列RDDs组成

支持scala、java或者Python编写Spark Streaming程序

Spark Streaming代码实现

在远程虚拟机上通过ncat发送数据包,sparkstreaming监听其字符串

ncat -lk 10.25.34.65 9999进入待发送状态,输入字符串

import org.apache.spark.SparkConf

import org.apache.spark.streaming.{Seconds, StreamingContext}


object streaming {

  def main(args: Array[String]): Unit = {

    //1 创建SparkConf对象

    val conf=new SparkConf()

    conf.setAppName("Spark Streaming")

    //设置开启本地cpu资源

    conf.setMaster("local[2]")

    //2 创建streamingcontext对象,10秒扫描一次,每次经过10秒就会生成一次输出文件

    val ctx=new StreamingContext(conf,Seconds(10))

    //3 设置监听IP和端口

    val ds=ctx.socketTextStream("10.25.34.65",9999)

    //4 获取RDD,便于处理wordcount

    val res=ds.flatMap(_.split("\\s+")).map((_,1)).reduceByKey(_+_)    

    res.saveAsTextFiles("file:///d:/streamingout/")//写入本地目录,这是一个根目录的路径

    //5 启动streaming

    ctx.start()

    //6 等待接收数据

    ctx.awaitTermination()

    //7 关闭sparkstreaming和sparkcontext

    ctx.stop(true)

  


三岁奶猫
4楼 · 2021-04-25 13:25

Spark SQL

SparkSQL数据类型DataFrames

  1. 这种数据类型支持结构化的数据文件,Hive中的表,外部数据库和已存在的RDD

  2. 该接口在Python, R, Java, Scala中都是可用的

SparkSQL特点

  1. 兼容好
    兼容Hive,支持RDD,JSON文件等数据源,支持nosql数据库数据

  2. 性能高
    含有多种性能优化技术

  3. 扩展强
    SQL的语法解析,分析和优化都可自定义


熊晓燕
5楼 · 2021-04-25 22:01

若将Spark作业以yarncluster模式提交到Yarn,由Yarn启动Spark作业,在某个子节点的Executor会监听该端口,接收数据。

相关问题推荐

  • 什么是大数据时代?2021-01-13 21:23
    回答 100

    大数据(big data)一词越来越多地被提及,人们用它来描述和定义信息爆炸时代产生的海量数据,而这个海量数据的时代则被称为大数据时代。随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。大数据(Big data)通常用来形容一个公司创造的大量非结...

  • 回答 84

    Java和大数据的关系:Java是计算机的一门编程语言;可以用来做很多工作,大数据开发属于其中一种;大数据属于互联网方向,就像现在建立在大数据基础上的AI方向一样,他两不是一个同类,但是属于包含和被包含的关系;Java可以用来做大数据工作,大数据开发或者...

  • 回答 52
    已采纳

    学完大数据可以从事很多工作,比如说:hadoop 研发工程师、大数据研发工程师、大数据分析工程师、数据库工程师、hadoop运维工程师、大数据运维工程师、java大数据工程师、spark工程师等等都是我们可以从事的工作岗位!不同的岗位,所具备的技术知识也是不一样...

  • 回答 29

    简言之,大数据是指大数据集,这些数据集经过计算分析可以用于揭示某个方面相关的模式和趋势。大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。大数据的特点:数据量大、数据种类多、 要求实时性强、数据所蕴藏的...

  • 回答 14

    tail -f的时候,发现一个奇怪的现象,首先 我在一个窗口中 tail -f test.txt 然后在另一个窗口中用vim编辑这个文件,增加了几行字符,并保存,这个时候发现第一个窗口中并没有变化,没有将最新的内容显示出来。tail -F,重复上面的实验过程, 发现这次有变化了...

  • 回答 18

    您好针对您的问题,做出以下回答,希望有所帮助!1、大数据行业还是有非常大的人才需求的,对于就业也有不同的岗位可选,比如大数据工程师,大数据运维,大数据架构师,大数据分析师等等,就业难就难在能否找到适合的工作,能否与你的能力和就业预期匹配。2、...

  • 回答 17

    最小的基本单位是Byte应该没多少人不知道吧,下面先按顺序给出所有单位:Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB,按照进率1024(2的十次方)计算:1Byte = 8 Bit1 KB = 1,024 Bytes 1 MB = 1,024 KB = 1,048,576 Bytes 1 GB = 1,024 MB = 1,048,576...

  • 回答 33

    大数据的定义。大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。大数据是对大量、动态、能持续的数据,通过运用新系统、新工具、新...

  • 回答 5

    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的版本:针对不同的用户,MySQL分为两种不同的版本:MySQL Community Server社区版本,免费,但是Mysql不提供...

  • mysql安装步骤mysql 2022-05-07 18:01
    回答 2

    mysql安装需要先使用yum安装mysql数据库的软件包 ;然后启动数据库服务并运行mysql_secure_installation去除安全隐患,最后登录数据库,便可完成安装

  • 回答 5

    1.查看所有数据库showdatabases;2.查看当前使用的数据库selectdatabase();3.查看数据库使用端口showvariableslike'port';4.查看数据库编码showvariableslike‘%char%’;character_set_client 为客户端编码方式; character_set_connection 为建立连接...

  • 回答 5

    CREATE TABLE IF NOT EXISTS `runoob_tbl`(    `runoob_id` INT UNSIGNED AUTO_INCREMENT,    `runoob_title` VARCHAR(100) NOT NULL,    `runoob_author` VARCHAR(40) NOT NULL,    `submission_date` DATE,    PRI...

  • 回答 9

    学习多久,我觉得看你基础情况。1、如果原来什么语言也没有学过,也没有基础,那我觉得最基础的要先选择一种语言来学习,是VB,C..,pascal,看个人的喜好,一般情况下,选择C语言来学习。2、如果是有过语言的学习,我看应该一个星期差不多,因为语言的理念互通...

  • 回答 7

    添加语句 INSERT插入语句:INSERT INTO 表名 VALUES (‘xx’,‘xx’)不指定插入的列INSERT INTO table_name VALUES (值1, 值2,…)指定插入的列INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,…)查询插入语句: INSERT INTO 插入表 SELECT * FROM 查...

  • 回答 5

    看你什么岗位吧。如果是后端,只会CRUD。应该是可以找到实习的,不过公司应该不会太好。如果是数据库开发岗位,那这应该是不会找到的。

  • 回答 7

    查找数据列 SELECT column1, column2, … FROM table_name; SELECT column_name(s) FROM table_name 

没有解决我的问题,去提问