spark-windows(含eclipse配置)下本地开发环境搭建
spark-windows(含eclipse配置)下本地开发环境搭建
>>>>>>注意:这里忽略jdk的安装,jdk要求是1.8及以上版本,请通过 java –version查看。
一、spark命令行环境搭建
step1:安装spark
到官网选择相应版本,下载安装包。我这里下的是2.1.3版本,后面安装的hadoop版本需要跟spark版本对应。下载后找个合适的文件夹解压即可。这里新建了一个home文件夹,底下放了spark, hadoop解压后的目录:
other_jars 是用来存放一些自己开发中用到的jar包
解压之后配置环境变量,将spark底下的bin文件所在的目录添加到环境变量的path变量中,后面hadoop也一样。
配置spark_home
配置path d:\home\spark-2.1.3-bin-hadoop2.7\bin;
也可以使用spark_home
到这里spark算是安装成功。
step2:安装hadoop
到下载相应版本的hadoop安装包,我下的是2.7.7。具体的spark和hadoop版本对应可以到网上查,spark和hadoop版本不一致可能会导致出问题。
将下载好的安装包进行解压,然后将hadoop下的bin目录配置到path变量中。
为了防止运行程序的时候出现nullpoint异常,到github下载 winutils.exe 下载地址:
找到对应的hadoop版本,然后进入bin目录下,下载winutils.exe, 然后复制到hadoop的bin目录下。
系统环境变量配置:
hadoop_home:
path: $haddop_home$\bin
step3:安装scala
到官网下载镜像,然后安装即可。一般默认会自动配置好环境变量。安装好之后打开cmd测试,输入scala,如果出现以下内容则安装成功。(这里安装的是2.12.6版本)
如果没有成功,检查一下path环境变量,如果安装之后没有自动配置,则手动配置,参照spark的环境配置。
如下图则表示命令行环境配置成功:
二、eclipse配置
2.1、使用spark-assembly-*.jar包配置eclipse
新建一个java项目导入spark-assembly-*.jar包作为工程的第三方依赖包即可
2.2、使用已配置好的spark环境配置eclipse
spark2.0以后版本不在提供spark-assembly-*.jar 包;
则将spark环境目录下jars目录的jar包导入即可。
我本地的路径:d:\home\spark-2.1.3-bin-hadoop2.7\jars
注意:该方法,在我本地没有成功一直缺少各种jar包,我本地使用2.1的方法;jar包的路径为spark-assembly-1.6.1-hadoop2.6.0.jar 下载地址:
https://download.csdn.net/download/miss_peng/10472450
2.3、可能遇到的一些问题
2.3.1、system memory 259522560 must be at least 4.718592e8. please use a larger heap size.
a、问题:
在eclipse里开发spark项目,尝试直接在spark里运行程序的时候,遇到下面这个报错:
error sparkcontext: error initializing sparkcontext.
java.lang.illegalargumentexception: system memory 468189184 must be at least 4.718592e8. please use a larger heap size.
b、解决办法:
有2个地方可以设置
1. 自己的源代码处,可以在conf之后加上:
val conf = new sparkconf().setappname("word count")
conf.set("spark.testing.memory", "2147480000")//后面的值大于512m即可
2. 可以在eclipse的run configuration处,有一栏是arguments,下面有vmarguments,在下面添加下面一行(值也是只要大于512m即可)
-dspark.testing.memory=1073741824
其他的参数,也可以动态地在这里设置,比如-dspark.master=spark://hostname:7077
再运行就不会报这个错误了。
解决:
1)、window——preference——java——installed jres——选中一个jre 后
2)、edit在default vm arguments 里加入:-xmx512m
2.4 测试成功jar包截图
这里的截图是在另外一台机子上配置的环境,用的jar目录会有所区别,但是不影响。
这里ojdbc6.jar 是为了链接数据库使用的jar包,需要根据不同环境自行修改
2.5 完整测试代码
package spark.jdbc.oracle;
import java.math.bigdecimal;
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.sqlexception;
import java.util.hashmap;
import java.util.iterator;
import java.util.map;
import org.apache.spark.sparkconf;
import org.apache.spark.api.java.javapairrdd;
import org.apache.spark.api.java.javasparkcontext;
import org.apache.spark.api.java.function.pairfunction;
import org.apache.spark.rdd.jdbcrdd.connectionfactory;
import org.apache.spark.sql.dataframe;
import org.apache.spark.sql.dataframereader;
import org.apache.spark.sql.row;
import org.apache.spark.sql.sqlcontext;
import scala.tuple2;
public class testconn {
private static final string username = "scott";
private static final string password = "tiger";
private static final string driver = "oracle.jdbc.oracledriver";
private static final string url = "jdbc:oracle:thin:@localhost:1521/orcl2";
private static final string dbtable = "scott.emp"; //emp
connection conn = null;
connectionfactory connf = null;
// java.lang.classnotfoundexception: org.apache.commons.configuration.configuration
public connection getconn(){
try {
class.forname(driver);
conn = drivermanager.getconnection(url,username,password);
//connf = new connectionfactory(conn);
system.out.println("orcl2 链接成功");
} catch (classnotfoundexception e) {
// todo auto-generated catch block
e.printstacktrace();
}catch (sqlexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
return conn;
}
public void releaseresouce(){
if(conn != null){
try {
conn.close();
system.out.println(conn+" 连接关闭");
} catch (sqlexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}else{
system.out.println("连接已经关闭");
}
}
public static void main(string[] args) {
// todo auto-generated method stub
testconn testconn = new testconn();
system.out.println(testconn.getconn());
//初始化
sparkconf conf = new sparkconf().setappname("conn_orcl").setmaster("local");
conf.set("spark.testing.memory","2147480000");
javasparkcontext jsc = new javasparkcontext(conf);
sqlcontext sqlcontext = new sqlcontext(jsc);
//设置数据库连接参数
map<string,string> connargs = new hashmap<string,string>();
connargs.put("url", testconn.url);
connargs.put("user", testconn.username);
connargs.put("password", testconn.password);
connargs.put("driver", testconn.driver);
connargs.put("dbtable", testconn.dbtable);
dataframereader dfreader = sqlcontext.read().format("jdbc").options(connargs);
dataframe df = dfreader.load();
df.show();
system.out.println("df schema : ");
df.printschema();
df.select("hiredate").show();
system.out.println();
system.out.println("---------------------to table--------------------");
df.registertemptable("emp");
dataframe dfsql = sqlcontext.sql("select job,sal from emp");
system.out.println("dfsql : ");
dfsql.show();
javapairrdd<string,bigdecimal> jprdd = dfsql.tojavardd().maptopair(new pairfunction<row,string,bigdecimal>(){
/**
*
*/
private static final long serialversionuid = 1l;
@override
public tuple2<string, bigdecimal> call(row r) throws exception {
// todo auto-generated method stub
/*system.out.println("row : ");
system.out.println(r);*/
tuple2<string, bigdecimal> t2 = new tuple2<string, bigdecimal>((string) r.get(0),(bigdecimal)r.get(1));
return t2;
}
});
system.out.println("jprdd : ");
system.out.println(jprdd.collect());
javapairrdd<string, iterable<bigdecimal>> jprdd2 = jprdd.groupbykey();
system.out.println("jprdd2 : ");
system.out.println(jprdd2.collect());
javapairrdd<string, double> jprdd3 = jprdd2.maptopair(new pairfunction<tuple2<string, iterable<bigdecimal>>,string,double>(){
/**
*
*/
private static final long serialversionuid = 1l;
@override
public tuple2<string, double> call(
tuple2<string, iterable<bigdecimal>> t) throws exception {
// todo auto-generated method stub
double sum = 0;
iterator<bigdecimal> it = t._2.iterator();
while(it.hasnext()){
sum += double.valueof(it.next().tostring());
}
tuple2<string, double> t2 = new tuple2<string, double>(t._1,sum);
system.out.println(t._1+" : "+sum);
return t2;
}
});
system.out.println("jprdd3 : ");
system.out.println(jprdd3.collect());
}
}
代码执行情况:
三、参考文档
下一篇: mui几种页面跳转方式对比总结概括
推荐阅读
-
spark-windows(含eclipse配置)下本地开发环境搭建
-
Google Earth Engine——windowns下搭建GEE本地python开发环境
-
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
-
ubuntu下Android开发环境的搭建:eclipse+SDK详细安装教程+常见问题及其解决方案
-
MAC下Android的Eclipse开发环境的搭建
-
MAC下Android的Eclipse开发环境的搭建
-
win7下配置GO语言环境 + eclipse配置GO开发
-
win7 下搭建sublime的python开发环境的配置方法
-
PHP Eclipse PDT ZEND FrameWork Windos下开发环境搭建
-
LInux环境下Eclipse + Tomcat + MySQL 配置J2EE开发环境的方法_MySQL