spark学习日记

6.7尝试了使用学校里Python读取数据库,读取一条数据耗时八分钟。返回多条数据程序卡死。使用了vscode,pycharm专业版和anaconda。pycharm专业版由于公司内网设置无法运行。

开始spark的学习。

选择尚硅谷视频教程学习并入上手wordcount小例子

建立spark框架链接需要加入依赖。在pom.xml中添加

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.12</artifactId>
        <version>3.0.0</version>
    </dependency>
</dependencies>

出现内存不足的错误,经过检索后在设置SparkConf后加入指定分配给spark的内存。

.set("spark.testing.memory","2147480000")

scala表达式后续需要补充学习。如果是用java也看看怎么进行转换。

从师父给的代码来看,以后在集群运行不需加入此条。

将运行日志省略只留下error信息

Set everything to be logged to the console
log4j.rootCategory=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
# Settings to quiet third party logs that are too verbose
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=WARN
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=WARN

Yarn模式在集群运行

home/spark-2.3.0-bin-hadoop2.7/bin/spark-submit --class test.SparksqlTest --master spark://(host地址):7077 --num-executors 3 --executor-memory 8G --driver-memory 2g  --conf spark.driver.maxResultSize=2g

--num-executors 配置Executor数量

--executor-memory配置每个Executor内存大小

 

并行度(可以修改,同时执行)

资源申请,计算准备

数据结构:RDD、累加器、广播变量

(socket通信先不看,视频看看,因为好像实际用不到mark一下,为了引入RDD。)

RDD将task进行拆分分给executor。RDD为最小计算单元。多个RDD关联完成需求。(装饰者设计模式:核心不变,进行扩展例如java的io操作)

 

IO的字节流&字符流可以帮助理解RDD

file---------ShuffledRDD-reducebykey{------------colllect------console

               MapPartitionsRDD-map{

               MapPartitionsRDD-flatmap{

               HadoopRDD-textFile

               }

             }

}

RDD不保存数据,只有collect方法才开始读取数据。RDD是一个抽象类,需要子类实现。一般使用子类

弹性:存储(内存磁盘相互转换)容错 计算 分片

分布式:存储在大数据集群不同节点上

RDD封装计算逻辑,不可改变,只能产生新的RDD装饰者设计模式。可分区、并行计算。

RDD五大属性1.分区列表2 计算逻辑3依赖关系(maven)4分区器option可有可无5option首选位置nodemanager 有excutor和data优先,减少网络数据传输。判断计算发到哪个节点效率最优。

移动数据不如移动计算

RDD:内存中创建,文件中创建

sc.parallelize(seq)
val rdd: RDD[Int] = sc.makeRDD(seq)

makeRDD是简化版本,底层实现时调用RDDparallelize方法。

文件路径可有通配符*,还可以是HDFS,Hbase。

textFile:以行为单位读取数据,读取数据都是字符串

wholeTextFiles:以文件为单位读取数据,表示为元组,第一个元素表示文件路径,第二个元素表示文件内容(保留换行符)

makeRDD可有传递第二个参数,表示分区数量。可以不传递,会使用默认并行度.sparkconf的totalcores:当前运行环境的最大可用核数。通过更改sparkConf.set("spark.default.parallelism",5)改变default分区数量。

源码可看数据如何存放,from until 前闭后开

文件:

(数据源为单个文件)

minPartitions有个math.min(defaultParallelism,2)

如果分区与预计不符,实际分区比最小分区数多。依照特定的计算方式,遵循hadoop的1.1.底层使用hadoop的读取方式。

totalsize=7

goalsize=7/2=3(byte)  每个分区

7/3=2....1(1.1)如果大于百分之十产生新的分区,小于不会产生新分区。

spark读取按行读取和字节数没有关系,以偏移量为单位。数据分区的偏移量范围计算。偏移量不会被重复读取,整行读取。

(数据源为多个文件,计算分区时以文件为单位进行分区)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值