该算法是利用蒙特•卡罗算法求PI
bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://hadoop-senior01.buba.com:7077 examples/jars/spark-examples_2.11-2.1.1.jar 100
bin/spark-submit 为提交一个任务命令
--class org.apache.spark.examples.SparkPi 调用jar包里的这个类
--master spark://hadoop-senior01.buba.com:7077 spark的主机地址
examples/jars/spark-examples_2.11-2.1.1.jar jar包的位置
100 这个是类里main方法传的参数
还可以加入下面两个参数
--executor-memory 1G 指定每个executor可用内存为1G
--total-executor-cores 2 指定每个executor使用的cup核数为2个
输出结果如下
bin/spark-submit可以查看所有的参数
在执行过程中可以看到打印了很多的日志,很不方便,按照如下修改可以解决
先复制一份log配置文件
然后编辑它,把INFO修改为WARN,就可以了,然后执行一遍就日志少了.
使用Spark Shell 执行world count 案例
启动Spark Shell
spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下用scala编写spark程序。
启动Spark shell
bin/spark-shell --master spark://master01:7077 --executor-memory 2g --total-executor-cores 2
注意:
如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的cluster模式,如果spark是单节点,并且没有指定slave文件,这个时候如果打开spark-shell 默认是local模式
Local模式是master和worker在同同一进程内
Cluster模式是master和worker在不同进程内
先自己创建个文件写一些单词,上传到hdfs上去.
Spark Shell中已经默认将SparkContext类初始化为对象sc。用户代码如果需要用到,则直接应用sc即可,它是整个spark集群的入口.
下面这是使用的scala语言
sc.textFile("hdfs://hadoop-senior01.buba.com:8020/test.txt")读取test.txt文件
.flatMap(_.split(" ")) 把没行按空格分开的单词都放到map里面
.map((_,1)) 把没个值都计数为1
.reduceByKey(_+_) 把相同key的值加起来
).saveAsTextFile("hdfs://hadoop-senior01.buba.com:8020/out") 结果输出到这个地址
sc.textFile("hdfs://hadoop-senior01.buba.com:8020/test.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://hadoop-senior01.buba.com:8020/out")