Spark2.1.0怎么用


本篇内容介绍了“Spark2.1.0怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 在《Spark2.1.0之运行环境准备》一文曾经简单运行了spark-shell,并用下图进行了展示(此处再次展示此图)。
图1执行spark-shell进入Scala命令行图1中显示了很多信息,这里进行一些说明:在安装完Spark 2.1.0后,如果没有明确指定log4j的配置,那么Spark会使用core模块的org/apache/spark/目录下的log4j-defaults.properties作为log4j的默认配置。log4j-defaults.properties指定的Spark日志级别为WARN。用户可以到Spark安装目录的conf文件夹下从log4j.properties.template复制一份log4j.properties文件,并在其中增加自己想要的配置。除了指定log4j.properties文件外,还可以在spark-shell命令行中通过sc.setLogLevel(newLevel)语句指定日志级别。SparkContext的Web UI的地址是:http://192.168.0.106:4040。192.168.0.106是笔者安装Spark的机器的ip地址,4040是SparkContext的Web UI的默认监听端口。指定的部署模式(即master)为local[*]。当前应用(Application)的ID为local-1497084620457。可以在spark-shell命令行通过sc使用SparkContext,通过spark使用SparkSession。sc和spark实际分别是SparkContext和SparkSession在Spark REPL中的变量名,具体细节已在《Spark2.1.0之剖析spark-shell》一文有过分析。 由于Spark core的默认日志级别是WARN,所以看到的信息不是很多。现在我们将Spark安装目录的conf文件夹下的log4j.properties.template以如下命令复制出一份:cplog4j.properties.templatelog4j.properties并将log4j.properties中的log4j.logger.org.apache.spark.repl.Main=WARN修改为log4j.logger.org.apache.spark.repl.Main=INFO,然后我们再次运行spark-shell,将打印出更丰富的信息,如图2所示。
图2 Spark启动过程打印的部分信息从图2展示的启动日志中我们可以看到SecurityManager、SparkEnv、BlockManagerMasterEndpoint、DiskBlockManager、MemoryStore、SparkUI、Executor、NettyBlockTransferService、BlockManager、BlockManagerMaster等信息。它们是做什么的?刚刚接触Spark的读者只需要知道这些信息即可,具体内容将在后边的博文给出。这一节,我们通过word count这个耳熟能详的例子来感受下Spark任务的执行过程。启动spark-shell后,会打开Scala命令行,然后按照以下步骤输入脚本:输入val lines =sc.textFile(“../README.md”, 2),以Spark安装目录下的README.md文件的内容作为word count例子的数据源,执行结果如图3所示。图3 步骤1执行结果图3告诉我们lin开发云主机域名es的实际类型是MapPartitionsRDD。 textFile方法对文本文件是逐行读取的,我们需要输入val words =lines.flatMap(line => line.split(” “)),将每行文本按照空格分隔以得到每个单词,执行结果如图4所示。

图4 步骤2执行结果图4告诉我们lines在经过flatMap方法的转换后得到的words的实际类型也是MapPartitionsRDD。 对于得到的每个单词,通过输入val ones = words.map(w => (w,1)),将每个单词的计数初始化为1,执行结果如图5所示。图5 步骤3执行结果图5告诉我们words在经过map方法的转换后得到的ones的实际类型也是MapPartitionsRDD。输入val counts = ones.reduceByKey(_ + _),对单词进行计数值的聚合,执行结果如图6所示。
图6 步骤4执行结果图6告诉我们ones在经过reduceByKey方法的转换后得到的counts的实际类型是ShuffledRDD。输入counts.foreach(println),将每个单词的计数值打印出来,作业的执行过程如图7和图8所示。作业的输出结果如图9所示。
图7 步骤5执行过程第一部分

图8 步骤5执行过程第二部分图7和图8展示了很多作业提交、执行的信息,这里挑选关键的内容进行介绍:SparkContext为提交的Job生成的ID是0。一共有四个RDD,被划分为ResultStage和ShuffleMapStage。ShuffleMapStage的ID为0,尝试号为0。ResultStage的ID为1,尝试号也为0。在Spark中,如果Stage没有执行完成,就会进行多次重试。Stage无论是首次执行还是重试都被视为是一次Stage尝试(Stage Attempt),每次Attempt都有一个唯一的尝试号(AttemptNumber)。由于Job有两个分区,所以ShuffleMapStage和ResultStage都有两个Task被提交。每个Task也会有多次尝试,因而也有属于Task的尝试号。从图中看出ShuffleMapStage中的两个Task和ResultStage中的两个Task的尝试号也都是0。HadoopRDD则用于读取文件内容。图9 步骤5输出结果图9展示了单词计数的输出结果和最后打印的任务结束的日志信息。“Spark2.1.0怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注开发云网站,小编将为大家输出更多高质量的实用文章!

相关推荐: 虚拟主机能配置svn吗

今天就跟大家聊聊有关虚拟主机能配置svn吗,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。不可以,虚拟主机的环境不支持配置SVN,只能是vps、云服务器或者独立服务器产品可以配置SVN。SVN(Subve…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/16 10:28
下一篇 05/16 10:28

相关推荐