Spark系列—02 Spark程序牛刀小试
一、执行第一个Spark程序
1、执行程序
我们执行一下Spark自带的一个例子,利用蒙特·卡罗算法求PI:
启动Spark集群后,可以在集群的任何一台机器上执行一下命令:
/home/spark/spark-1.6.1-bin-hadoop2.6/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
/home/spark/spark-1.6.1-bin-hadoop2.6/lib/spark-examples-1.6.1-hadoop2.6.0.jar \
100
在执行过程中bash上的信息:

执行完成bash上的信息:

执行过程中WebUI上的信息:


执行完以后WebUI上的信息:

2、命令解析
/home/spark/spark-1.6.1-bin-hadoop2.6/bin/spark-submit \
①spark-submit:提交任务,它是一个Driver,至于它的实现细节后续会有介绍
--class org.apache.spark.examples.SparkPi \
②—class 指定任务的类名(使用反射调用该类的main方法)
--master spark://master:7077 \
③—master 指定集群Master的地址
--executor-memory 1G \
④—executor 指定为每个executor分配的内存大小
--total-executor-cores 2 \
⑤—total-executor 指定分配给所有executor总的处理器核数
(这里先说一下executor是Worker启动的子进程,executor负责执行任务,其细节以后会介绍的。)
/home/spark/spark-1.6.1-bin-hadoop2.6/lib/spark-examples-1.6.1-hadoop2.6.0.jar \
⑥指定任务的jar包地址
100
⑦任务的类的main方法的参数
二、使用 spark-shell
spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下用scala编写spark程序,spark-shell也是一个Driver。
1、启动 spark-shell
/home/spark/spark-1.6.1-bin-hadoop2.6/bin/spark-shell \
--master spark://master:7077 \
--executor-memory 1g \
--total-executor-cores 2
这个命令的解析其实和上面的spark-submit是一样的,我在这再啰嗦一遍:
参数说明:
--master spark://master:7077 指定Master的地址
--executor-memory 1g 指定每个executor可用内存为1G
--total-executor-cores 2 指定所有executor总的处理器核数为2
还有一点需要非常注意:
如果启动 spark shell 时没有指定master地址,但是也可以正常启动 spark shell 和执行 spark shell 中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。
还要说明一点:
spark shell 中已经默认将SparkContext类初始化为对象sc。用户代码如果需要用到,则直接应用 sc 即可。SparkContext是Spark集群的入口,Driver只有初始化了SparkContext才可以向Spark集群提交任务,所以这个SparkContext和重要,以后我们会详细介绍整个SparkContext的初始化流程的,现在可以先记住SparkContext是集群的入口,就像Spring中的ApplicationContext一样。
2、在spark shell中编写WordCount程序
(1)首先启动hdfs
(2)向hdfs上传文件words.txt 到 hdfs://hadoop01:9000/spark/words.txt
words.txt的内容:
hello tom
hello jim
hello tom and kitty
(3)在spark shell 中用scala语言编写spark程序:
sc.textFile("hdfs://hadoop01:9000/spark/words.txt").flatMap(_.split(" "))
.map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://hadoop01:9000/spark/out")
(4)使用hdfs命令查看结果:
hdfs dfs -cat hdfs://hadoop01:9000/spark/out/part*
(jim,1)
(tom,2)
(hello,3)
(and,1)
(kitty,1)
(5)程序简单说明:
sc.textFile("hdfs://hadoop01:9000/spark/words.txt") 从hdfs中读取数据
flatMap(_.split(" ")) 先map再压平
map((_,1)) 将单词和1构成元组
reduceByKey(_+_) 按照key进行reduce,并将value累加
saveAsTextFile("hdfs://hadoop01:9000/spark/out") 将结果写入到hdfs中
最后:
也可以使用 IDEA 编写完一个程序后打包,使用spark-submit方式提交到集群,在这里我就不写了。一定要注意spark-submit的配置命令不要出错,还要注意自己的程序需要的参数的正确,不要忘了起hdfs。
Spark系列—02 Spark程序牛刀小试的更多相关文章
- Spark系列—01 Spark集群的安装
一.概述 关于Spark是什么.为什么学习Spark等等,在这就不说了,直接看这个:http://spark.apache.org, 我就直接说一下Spark的一些优势: 1.快 与Hadoop的Ma ...
- Spark入门实战系列--1.Spark及其生态圈简介
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .简介 1.1 Spark简介 年6月进入Apache成为孵化项目,8个月后成为Apache ...
- Spark入门实战系列--3.Spark编程模型(上)--编程模型及SparkShell实战
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark编程模型 1.1 术语定义 l应用程序(Application): 基于Spar ...
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark Streaming简介 1.1 概述 Spark Streaming 是Spa ...
- Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学 ...
- Spark Standalone模式应用程序开发
作者:过往记忆 | 新浪微博:左手牵右手TEL | 能够转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明博客地址:http://www.iteblog.com/文章标题:<Spar ...
- Spark系列-核心概念
Spark系列-初体验(数据准备篇) Spark系列-核心概念 一. Spark核心概念 Master,也就是架构图中的Cluster Manager.Spark的Master和Workder节点分别 ...
- Spark SQL概念学习系列之Spark SQL概述
很多人一个误区,Spark SQL重点不是在SQL啊,而是在结构化数据处理! Spark SQL结构化数据处理 概要: 01 Spark SQL概述 02 Spark SQL基本原理 03 Spark ...
- Spark 系列(五)—— Spark 运行模式与作业提交
一.作业提交 1.1 spark-submit Spark 所有模式均使用 spark-submit 命令提交作业,其格式如下: ./bin/spark-submit \ --class <ma ...
随机推荐
- WPF拖动DataGrid中的数据到ListBox
1.效果图: 2.XAML <Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.m ...
- 设计模式-工厂方法模式(FactoryMethod)
简介: 简单工厂模式将类的示例化放在工厂对象中. 工厂方法模式是简单工厂模式的延伸,不同的是其将子类的实例化延迟到子类工厂中实现,本身仅定义一个创建对象的接口. 工厂方法模式主要由四部分组成: 1.抽 ...
- javascript中for/in循环及使用技巧
JavaScript 支持不同类型的循环: for - 循环代码块一定的次数 for/in - 循环遍历对象的属性 while - 当指定的条件为 true 时循环指定的代码块 do/while - ...
- Js/Ajax中发送HttpPost请求调用WebService
1) WebService中的方法 [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(Confo ...
- centos6.2下安装redis和phpredis扩展,亲测好用
安装redis: 下载:http://www.redis.io/download redis-2.6.2.tar.gz ]# tar -zxf redis-2.6.2.tar.gz ]# cd red ...
- Check Box Select/Deselect All on Grid
The below function is to be used on a grid with multiple check boxes. Place the code behind a FieldC ...
- Python pass 语句使用示例
Python pass 语句的使用方法示例.Python pass是空语句,pass语句什么也不做,一般作为占位符或者创建占位程序,是为了保持程序结构的完整性,pass语句不会执行任何操作,比如: P ...
- wampserver php多版本5.2--5.6和apche2.2/2.4
一.准备 wampserver2.5 php5各版本 php5.2到php5.6 apache2.2和apache2.4 二.安装 先成功安装wampserver2.5,如果安装不成功,多是vc11没 ...
- IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决办法
IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrl ...
- C#自定义导出数据到Excel中的类封装
using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; ...