看了几个spark入门,大都是linux环境下scala和python版本的。自己在windows下折腾了一番才跑通,还是觉得有必要写一个windows/java版本的,希望对有相同需求的人有所帮助。
由于开发在windows下进行,提交任务时在线上linux集群。需要配置linux线上环境和window的开发环境。各种版本如下:
spark版本:spark-2.1.0
hadoop版本:hadoop-2.7.3
jdk版本:1.8.0_65
linux下配置 下载 spark官网 、hadoop官网 找到下载链接,下载1
2
3
4
5
wget http://d3kbcqa49mib13.cloudfront.net/spark-2.1.0-bin-hadoop2.7.tgz
tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz
wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
tar -zxvf hadoop-2.7.3.tar.gz
环境变量 环境变量设置,修改~/.bash_profile1
2
3
4
5
6
7
8
# spark
export SPARK_HOME=/disk2/fangyq/test/spark-2.1.0-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH
# hadoop
export HADOOP_HOME=/disk2/fangyq/test/hadoop-2.7.3
export HADOOP_CONF_DIR=/home/fangyeqing/hadoop-conf
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar
日志配置 配置日志输出:编辑log4j文件,将log4j.rootCategory由INFO改为WARN,不然日志非常多1
2
3
4
5
cd spark-2.1.0-bin-hadoop2.7.tgz
cp conf/log4j.properties.template conf/log4j.properties
vi log4j.properties
log4j.rootCategory=WARN, console
错误说明 如果需要以yarn模式运行,没配置HADOOP_CONF_DIR会出现如下错误
Exception in thread “main” java.lang.Exception: When running with master ‘yarn-client’ either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment.
windows下开发设置 下载 spark下载:官网地址 ,其中spark-2.1.0-bin-hadoop2.7.tgz下载地址 hadoop下载:官网地址 ,其中hadoop-2.7.3.tar.gz下载地址 winutils下载:github地址 ,找到对应hadoop版本的,hadoop2.7.3用2.7.1的也可以。将winutils放在hadoop的bin目录下。 hadoop.dll下载:github地址 ,同样放在hadoop的bin目录下。(跑hadoop任务需要,只跑spark不需要,看需下载)
环境变量 设置环境变量,将代码中的spark_dir,hadoop_dir换成自己的安装路径。将以下内容保存为ANSI编码的spark-evn.bat文件,运行即可1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
color 02
::设置spark安装路径,路径不能有空格
set spark_dir=D:\spark\spark-2.1.0-bin-hadoop2.7
set hadoop_dir=D:\spark\hadoop-2.7.3
::环境变量如果有的话,先删除
wmic ENVIRONMENT where "name='SPARK_HOME'" delete
wmic ENVIRONMENT where "name='HADOOP_HOME'" delete
::创建JAVA_HOME、HADOOP_HOME、PYTHONPATH
wmic ENVIRONMENT create name="SPARK_HOME",username="<system>",VariableValue="%spark_dir%"
wmic ENVIRONMENT create name="HADOOP_HOME",username="<system>",VariableValue="%hadoop_dir%"
::设置Path环境变量
call set xx=%spark_dir%\bin;%hadoop_dir%\bin;%Path%
wmic ENVIRONMENT where "name='Path' and username='<system>'" set VariableValue="%xx%"
pause
hello spark 在idea中,可以通过将之前修改完的log4j.properties拷贝到resources目录下过滤掉多余的日志。
本地运行时需要指定Master(“local”)。本例子是统计所有包含a或b的行。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SimpleApp {
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName("Simple Application").setMaster("local").set("spark.some.config","forRunInYarn");
JavaSparkContext sc = new JavaSparkContext(conf);
String path = "file:///"+System.getenv("SPARK_HOME")+"/README.md";
JavaRDD<String> logData = sc.textFile(path).cache();
long numAs = logData.filter(s -> s.contains("a")).count();
long numBs = logData.filter(s -> s.contains("b")).count();
System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
sc.stop();
}
}
也可以打包之后运行1
2
mvn package
spark-submit --class "com.fqy.spark.example.SimpleApp" --master local target/xxxx-SNAPSHOT.jar
执行方式配置
程序内通过setMaster()指定,一般只有在idea中直接运行才这样设置。
spark-submit提交任务时,通过–master指定。如果不指定,程序里也没有setMaster()默认local模式。1
2
spark-submit --master local
spark-submit --master yarn --deploy-mode client
Master URL
Meaning
local
local:1个线程,local[K]:K个线程,local[*]:与核心数相同的线程
yarn
通过–deploy-mode client/cluster指定工作模式
spark
Connect to the given Spark standalone cluster master
mesos
Connect to the given Mesos cluster
spark on yarn说明:
driver: 负责向YARN申请资源,并监督作业的运行情况
yarn-cluster: 适用于生产环境。driver运行在AM中。client可以离开。
yarn-client: 适用于交互和调试。driver运行在client中。client不能离开。
其他配置 根据实际情况配置
配置名
默认值
spark.driver.cores
1
spark.driver.memory
1G
spark.executor.memory
1G
文件读取 包括
程序提交时额外的jar包通过–jar
程序内部使用的文件、数据来源等
读取方式
解释
file:
file:///表示本地的路径
hdfs:,http:,https:,ftp:
表示从hdfs等读取
local:
表示从集群中的一台读取
说明:支持*通配符
maven依赖 没用到spark-sql的话可以不添加spark-sql1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<dependency> <!-- Spark dependency, _2.1x表示scala版本 -->
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.11 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.8</version>
</dependency>
参考 spark官网 spark在windows下开发 yarn-client和yarn-cluster区别