相关软件版本:
Spark1.4.1 ,Hadoop2.6,Scala2.10.5 , MyEclipse2014,intelliJ IDEA14,JDK1.8,Tomcat7
机器:
windows7 (包含JDK1.8,MyEclipse2014,IntelliJ IDEA14,TOmcat7);
centos6.6虚拟机(Hadoop伪分布式集群,Spark standAlone集群,JDK1.8);
centos7虚拟机(Tomcat,JDK1.8);
1. 场景:
1. windows简单java程序调用Spark,执行Scala开发的Spark程序,这里包含两种模式:
1> 提交任务到Spark集群,使用standAlone模式执行;
2> 提交任务到Yarn集群,使用yarn-client的模式;
2. windows 开发java web程序调用Spark,执行Scala开发的Spark程序,同样包含两种模式,参考1.
3. linux运行java web程序调用Spark,执行Scala开发的Spark程序,包含两种模式,参考1.
2. 实现:
1. 简单Scala程序,该程序的功能是读取HDFS中的log日志文件,过滤log文件中的WARN和ERROR的记录,最后把过滤后的记录写入到HDFS中,代码如下:
import org.apache.spark.{SparkConf, SparkContext}
/**
* Created by Administrator on 2015/8/23.
*/
object Scala_Test {
def main(args:Array[String]): Unit ={
if(args.length!=2){
System.err.println("Usage:Scala_Test <input> <output>")
}
// 初始化SparkConf
val conf = new SparkConf().setAppName("Scala filter")
val sc = new SparkContext(conf)
// 读入数据
val lines = sc.textFile(args(0))
// 转换
val errorsRDD = lines.filter(line => line.contains("ERROR"))
val warningsRDD = lines.filter(line => line.contains("WARN"))
val badLinesRDD = errorsRDD.union(warningsRDD)
// 写入数据
badLinesRDD.saveAsTextFile(args(1))
// 关闭SparkConf
sc.stop()
}
}
使用IntelliJ IDEA 并打成jar包备用(lz这里命名为spark_filter.jar);
2. java调用spark_filter.jar中的Scala_Test 文件,并采用Spark standAlone模式,java代码如下:
package test;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.spark.deploy.SparkSubmit;
/**
* @author fansy
*
*/
public class SubmitScalaJobToSpark {
public static void main(String[] args) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
String filename = dateFormat.format(new Date());
String tmp=Thread.currentThread().getContextClassLoader().getResource("").getPath();
tmp =tmp.substring(0, tmp.length()-8);
String[] arg0=new String[]{
"--master","spark://node101:7077",
"--deploy-mode","client",
"--name","test java submit job to spark",
"--class","Scala_Test",
"--executor-memory","1G",
// "sp