spark---hello spark java版


看了几个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_profile

1
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-sql

1
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区别

文章目录
  1. 1. linux下配置
    1. 1.1. 下载
    2. 1.2. 环境变量
    3. 1.3. 日志配置
      1. 1.3.1. 错误说明
  2. 2. windows下开发设置
    1. 2.1. 下载
    2. 2.2. 环境变量
  3. 3. hello spark
    1. 3.1. 执行方式配置
    2. 3.2. 其他配置
    3. 3.3. 文件读取
    4. 3.4. maven依赖
  4. 4. 参考
|