首页 理论教育 Spark RDD实践常见问题及解答

Spark RDD实践常见问题及解答

时间:2023-06-25 理论教育 版权反馈
【摘要】:在Spark RDD的实践中,初学者经常会碰到一些问题,比如如何设置加载文件后构建的RDD的分区数,如何加载各种文件系统中的文件等。这里列出了出现频率比较高的问题,在前面章节的实践案例与解析基础上,给出问题的解答。可以参考章节2.4.3Spark提交应用的调试实例部分。如果选择MEMORY_ONLY级别,内存装载不下时RDD的分区数据是不会持久化到磁盘的,所以要根据所选择的存储级别去分析实际的存储情况。

Spark RDD实践常见问题及解答

在Spark RDD的实践中,初学者经常会碰到一些问题,比如如何设置加载文件后构建的RDD的分区数,如何加载各种文件系统中的文件等。这里列出了出现频率比较高的问题,在前面章节的实践案例与解析基础上,给出问题的解答。

1.如何控制加载的文件系统,即如何设置文件加载时的scheme

Spark集群构建在本地文件系统时:默认使用的是本地文件系统,对应于scheme为file∶//,即/home/path实际对应file∶///home/path。

Spark集群构建在HDFS文件系统上时:默认使用的是Hadoop配置的defaultFS文件系统,一般为HDFS,因此,scheme默认为hdfs∶//,即/user/path实际对应hdfs∶//defaultFS/user/path。如果是构建在本地文件系统的话,默认使用的就是本地文件系统了,也就是对应file∶//。

其中defaultFS为HDFS中配置的文件系统信息,一般设置为master∶8020。

2.应用程序中的println信息没有输出到界面上

分布式计算时,对应在Executor上执行的Task的输出也同样位于Executor所在Worker机器节点上,这也是为什么不能在Driver的控制台上看到println等对应的输出信息的原因。可以通过页面上对应的Executor上的stdout/stderr两个输出文件进行查询。可以参考章节2.4.3Spark提交应用的调试实例部分。在后面的实例中,会给出不同集群模式和部署模式下,日志信息如何查找的案例,包括Standalone和Yarn两种集群下的Executor的日志查询和Driver的日志查询。(www.xing528.com)

3.cache为什么没有起作用,或没有存储到磁盘上

参见章节2.2.7RDD的持久化案例与解析部分,cache对应的存储级别及其含义如下:

MEMORY_ONLY缓存级别的缓存,只有在内存能装载下时,RDD的分区数据才存储在内存中,否则会被丢弃,在需要时重新计算。如果选择MEMORY_ONLY级别,内存装载不下时RDD的分区数据是不会持久化到磁盘的,所以要根据所选择的存储级别去分析实际的存储情况。

另外,只有在触发的情况下,才会计算出RDD,然后进行缓存,如果只计算了RDD中的部分分区(比如用take等进行触发的话),也就只有计算后的这部分分区会缓存,而不是缓存整个RDD。

4.如何判断一个RDD的算子操作有Shuffle过程

判断一个RDD的算子是否有Shuffle过程,并不是依据该RDD是否为ShuffledRDD,而是根据算子操作得到的结果RDD,查询其父依赖关系中是否包含了ShuffleDependency类型的依赖,如果包含,则操作过程需要进行Shuffle。比如CoGroupedRDD类,可以自己查看下它的getDependencies方法的源码,将会看到,CoGroupedRDD的父依赖有可能为ShuffleDe-pendency的,所以CoGroupedRDD有可能需要Shuffle过程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈