其实这个时候应该继续学习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 anySubmitting 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这个大坑里去了。