pyspark实战指南,pyspark命令

  pyspark实战指南,pyspark命令

  问题在本地模式下使用Pycharm开发调试pyspark时,发现驱动端的代码可以调试,但是执行端的代码无法调试。

  准备spark作为大数据分析计算的引擎:面对海量数据,自然一台机器无法满足时间和空间的需求,所以spark可以在多台机器上实现分布式计算;

  既然涉及到多机分布式计算,就必然涉及到任务的生成和分配、计算资源的应用等问题。

  Spark在遇到这类问题时采用了标准的主从模式;

  如下图所示:

  驱动程序代表主机管理集群中作业任务的生成和调度;

  执行程序代替从机执行各种任务,并将结果返回给驱动程序;并且可以缓存RDD相关数据;

  python和spark的Pyspark交互架构中的白色表示python相关的进程;橙色代表java虚拟机中实现的spark部分;

  用py4j包从驱动端python上的socket调用JVM中的java方法;

  在执行器端,一些用户定义的python函数不再能在jvm上运行,py4j也不再能从java回调python方法。所以pyspark.daemon进程生成的pyspark.worker子进程实现了python相关函数的执行;

  点评以上pyspark架构中的问题,执行端的pyspark.daemon进程是在整个pyspark程序运行时生成的,所以pycharm为用户定制函数的方法是通过调试,因为我是在驱动端运行进程。

  解决思路:获取对应的执行器进程,用py charm(企业版)调试对应的进程。

  步骤:py charm(企业版)顶部工具栏中的run==实现附加到流程函数执行器的代码调试;

  示例代码:

  # -编码:utf-8- (c)rgcallrightsreservedcreatetime 2021/5/17:19 用法:Spark Executor本机模式调试方法本机模式:注意pyPark中ID 的大值。confimportsparkconfrompark Executor是一个方便的debugconf.setmaster(local[1])。set appname)rgc))sc=spark context(conf=conf)设置为par _ rdd:paramx 33603:return(x:" " printing ")1)# First execute语句())用于生成pyspark.daemon进程。因为Forram #之后要调试的部分是pyspark.daemon进程par _ rdd.foreach (prorram #) rdd转换操作(比如spark映射)不会立即执行,而是run==attach to process。-m pyspark.daemem基于最后一次运行的#pycharm(enterpriseedition)(因为较大的值为真

  注意事项:

  Spark是懒求值:也就是说,只有在绝对必要的时候才进行计算;例如,当执行与操作相关的代码(如count、collect或sum)时,与RDD相关的转换操作(如map、union等。)实际上会被执行。

  因此,上面的示例代码允许您在map_RDD的倒数第二行中第一次实际执行rdd相关的操作。Foreach(print)进入F功能。

  其他:

  发现执行器实际运行任务的子进程名称是pyspark.daemon,而不是pyspark.worker;父流程pyspark.daemon通过生成相同命令的子流程用户执行python函数任务。

  相关链接:

  美国blog.csdn.net/define 3359号/文章/详情/84029037

  3359堆栈overflow.com/questions/31245083/how-can-py火花在调试模式中被调用

  3359 hyuk Jin-spark . readthedocs . io/en/stable/development/debugging . html

  3359 blog.csdn.net/FJ GUI/文章/详情/110203560

pyspark实战指南,pyspark命令