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

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

  1. 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]:在本地多线程运行,运行线程数为K
    • local[*]:在本地多线程运行,尽可能多的线程数量
    • spark://HOST:PORT :连接上spark单点模式运行,端口PORT是提前配置好的,默认端口7077
    • mesos://HOST:PORT :连接上mesos(好像是一种集群支持工具,没有深入研究)
    • yarn :基于Hadoop的yarn运行,集群的位置在 HADOOP_CONF_DIR ,YARN_CONF_DIR这两个变量指定的位置
  • application-arguments: 传递给主类的参数
    我参考了知乎spark在那里指定master URL呢?这个问题的第一个回答,同样也是收获了基础的知识和一个学习的方向,这是最重要的,非常非常感谢。

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

你可能感兴趣的:(Spark)