Spark上提交运行简单WordCount程序---Spark学习笔记(1)

    xiaoxiao2021-11-29  26

    其实这个时候应该继续学习hadoop的,但是猛然发现目前的需求是spark,不过spark可以基于hadoop运行。 目前使用的spark版本是:spark-1.6.2-bin-hadoop2.6 运行Spark简单程序的思路是现在IDE上导入spark API包并写好scala程序,然后像写Hadoop MapReduce程序一样,导出做成jar包,接下来用spark-submit提交jar包,就可以运行了。

    WordCount程序 结合官网上的示例,我们先分析一下WordCount程序: object SparkWordCount { //设置输入文件位置,spark读取文件是在SPARK_HOME 下读取的 val filePath="test.text" //设置spark配置信息 val conf=new SparkConf().setAppName("WordCount") val sparkContext=new SparkContext(conf) //sparkContext返回一个RDD[String],cache()过程是将这个返回的RDD缓存下来 val text=sparkContext.textFile(filePath,2).cache() //filter用来过滤RDD数据集合,实质上是返回了一个新的RDD,count()就是直接返回这个新的RDD的元素数量 val numberOfA=text.filter(line=>line.contains('a')).count() val numberOfB=text.filter(line=>line.contains('b')).count() println("包含a的语句个数:"+numberOfA+"\n" +"包含b的语句个数:"+numberOfB+"\n") } }

    由于是Spark最简单的程序,所以很短吧。但是弄懂了每一条语句的意思之后,就对Spark开始稍微有一点了解了。 解释过程中我参考了 RDD原理与详解 和 Spark RDD官方文档 其中第一篇对我帮助很大,不仅让我稍微理解了RDD而且让我有了了解的一个方向,从而继续去查询,在此表示感谢感谢。

    2.Spark-submit 首先进入spark-1.6.2-bin-hadoop2.6,然后在该目录下执行如下命令:

    $ ./bin/spark-submit --class SparkWordCount --master local[8] ~/IdeaProjects/SparkWordCount/out/artifacts/SparkWordCount_jar/SparkWordCount.jar

    我们可以用

    $ ./bin/spark-submit --help

    来查看需要提交的参数信息

    在我们的提交命令中,需要设置各类蚕食,这里我们查看一下官方的教程文档:

    --class: The entry point for your application (e.g. org.apache.spark.examples.SparkPi) --master: The master URL for the cluster (e.g. spark://23.195.26.187:7077) --deploy-mode: Whether to deploy your driver on the worker nodes (cluster) or locally as an external client (client) (default: client) † --conf: Arbitrary Spark configuration property in key=value format. For values that contain spaces wrap “key=value” in quotes (as shown). application-jar: Path to a bundled jar including your application and all dependencies. The URL must be globally visible inside of your cluster, for instance, an hdfs:// path or a file:// path that is present on all nodes. application-arguments: Arguments passed to the main method of your main class, if any

    Submitting Applications

    我们看到,

    –class设定的是程序的入口点,也就是我们的驱动类,这点和Hadoop MapReduce 程序很相似。–master是我们设置的master URL,这里官方有详细的参数列表: local:在本地的单线程运行local[k]:在本地多线程运行,运行线程数为Klocal[*]:在本地多线程运行,尽可能多的线程数量spark://HOST:PORT :连接上spark单点模式运行,端口PORT是提前配置好的,默认端口7077mesos://HOST:PORT :连接上mesos(好像是一种集群支持工具,没有深入研究)yarn :基于Hadoop的yarn运行,集群的位置在 HADOOP_CONF_DIR ,YARN_CONF_DIR这两个变量指定的位置application-arguments: 传递给主类的参数 我参考了知乎spark在那里指定master URL呢?这个问题的第一个回答,同样也是收获了基础的知识和一个学习的方向,这是最重要的,非常非常感谢。

    这是Spark的第一步,其实在上个月就已经要涉及到这个了,不过之后绕到全心弄Hadoop去了,往事不堪回忆啊。。。。现在我感觉刚带上氧气面罩,开始真正地潜入Spark这个大坑里去了。

    转载请注明原文地址: https://ju.6miu.com/read-678631.html

    最新回复(0)