欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > > 编程问答 >内容正文

编程问答

spark笔记 -凯发k8官方网

发布时间:2025/1/21 编程问答 28 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 spark笔记 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

传递第三方jars

当用spark-submit提交任务时,可以通过--jars选项传递第三方jars包,如果有多个jars,用逗号分开。

本地调试

用sbt打包好后,最好先在本地调试一下。可以把--master指定为local,然后把输入输出改为本地路径即可。

使用scala执行class

这个跟spark关系不大,但是有时可能也用得着。如果你依赖多个jar包,需要通过-cp指定:

scala -cp "lib1.jar:lib2.jar:your_program.jar" -j-xmx2g com.your.helloworld arg arg1 arg2

com.your.helloworld就在 your_program.jar里面。注意这里jar是用冒号分开的。不是逗号
-j 可以输入jvm参数,比如指定heap大小为2g,-xmx2g。

使用jdbc连接oracle等sql数据库

在spark2中,在调用spark-shell或者spark-submit的时候,先通过--jars指定依赖的jdbc jar包,比如oracle就是$oracle_home/lib/ojdbc6.jar, 然后在代码中,使用函数

val df = spark.read.format("jdbc") .options(map("url" -> url,"driver" -> "oracle.jdbc.driver.oracledriver","dbtable" -> "dw_mp_api_new_device")).load()

读取表。

其中url的格式为:
jdbc:oracle:thin:username/passwd@ip_address:port:dbsid
thin之后的内容都是需要你来填写的
driver则指定了驱动类型

map、flatmap、mapvalues,mappartitions的区别

  • map:把rdd的每个元素进行转换,输入、输出数量不变,即一个输入对应一个输出,可能会改变key

  • flatmap:也是对rdd的每个元素进行转换,但是输出必须是traversableonce类型,即可遍历的列表,可以输出多个或者0个结果(即none)。这些结果会自动flatten,即拆分成很多单条记录。也会改变key

  • mapvalues: 和map类似,但它只是pairrdd的函数,仅仅对value进行变换,不会改变key。和flatmap类似,pairrdd也有flatmapvalues函数,也是不会改变key的。

  • mappartitions: 它是对rdd的一部分元素,即一个partition进行批量转换,可以产生0或者多个结果,map在计算每个元素时都会启动一个任务(setup work),而mappartitions是给一批元素启动一个任务,显然mappartitions更加高效一些。
    最终这些结果会添加到新rdd中。它接受的输入输出都必须是iterator类型。iterator如果使用过,必须重置到开始位置,否则后面再使用,如map、foreach函数,就会丢失数据!这是我之前踩到的一个坑。

join、leftouterjoin的区别

跟sql类似,他们都是pairrdd的函数,假设有a、b两个rdd,有同样类型的key,a.join(b)的结果是a和b的交集,value是pair(valueofa,valueofb),即把a、b相同key的结果汇总到一个pair中。a.leftouterjoin(b)的结果是(valueofa,option(valueofb)),即a中存在的记录都会输出,对于a中存在,b中不存在的记录,pair的第二个元素就是none。a中不存在的记录则不会输出。

spark出现oom(outofmemery)该怎么办

oom错误或者exit 143都是内存溢出的结果。一般遇到这种情况,通过repartition增加part数,就可以解决。
或者增加spark.executor.memory的大小。注意的是,如果使用了动态内存分配,这个参数可能会无效。

spark出现time out,或者多次失败退出该怎么办

通过调节time out时长和增加重试次数解决,具体如下:

--conf spark.task.maxfailures=8 \--conf spark.akka.timeout=3600 \--conf spark.network.timeout=3600 \--conf spark.executor.heartbeatinterval=300 \--conf spark.yarn.max.executor.failures=50 \--conf spark.rpc.retry.wait=60

在提交spark任务时,调整如上几个参数,timeout单位是秒。
增加重试次数,也能提高一定的稳定性。

与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是凯发k8官方网为你收集整理的spark笔记的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图