spark-windows(含eclipse配置)下本地开发环境搭建
spark-windows(含eclipse配置)下本地开发环境搭建
>>>>>>注意:这里忽略JDK的安装,JDK要求是1.8及以上版本,请通过 java –version查看。
一、spark命令行环境搭建
Step1:安装Spark
到官网http://spark.apache.org/downloads.html选择相应版本,下载安装包。我这里下的是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
到http://mirrors.hust.edu.cn/apache/hadoop/common/下载相应版本的Hadoop安装包,我下的是2.7.7。具体的Spark和Hadoop版本对应可以到网上查,Spark和Hadoop版本不一致可能会导致出问题。
将下载好的安装包进行解压,然后将Hadoop下的bin目录配置到Path变量中。
为了防止运行程序的时候出现nullpoint异常,到github下载 winutils.exe 下载地址:https://github.com/steveloughran/winutils
找到对应的hadoop版本,然后进入bin目录下,下载winutils.exe, 然后复制到hadoop的bin目录下。
系统环境变量配置:
HADOOP_HOME:
Path: $HADDOP_HOME$\bin
step3:安装scala
到官网https://www.scala-lang.org/download/下载镜像,然后安装即可。一般默认会自动配置好环境变量。安装好之后打开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());
}
}
代码执行情况:
三、参考文档
https://blog.csdn.net/qq_32653877/article/details/81913648
https://blog.csdn.net/u011513853/article/details/52865076
https://blog.csdn.net/wypersist/article/details/80140334
spark-windows(含eclipse配置)下本地开发环境搭建的更多相关文章
- Windows 7 下 PHP 开发环境搭建(手动)
Windows 7 下 PHP 开发环境搭建 1.说明 做开发的都知道一句话,就是“站在巨人的肩膀上”.确实现在打开浏览器随便一搜很多一键安装PHP环境的软件,比如wamp.xampp.AppServ ...
- NDK在windows下的开发环境搭建及开发过程
在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库,关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释..so本是linux下的文件类 ...
- Android下NDK开发环境搭建
Android下NDK开发环境搭建 1. AndroidNDK安装与配置 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...
- win7下android开发环境搭建(win7 64位)
win7下android开发环境搭建(win7 64位) 一.安装 JDK 下载JDK最新版本,下载地址如下: http://www.oracle.com/technetwork/java/jav ...
- 手把手教你 Apache DolphinScheduler 本地开发环境搭建 | 中英文视频教程
点击上方 蓝字关注我们 最近,一些小伙伴反馈对小海豚的本地开发环境搭建过程不太了解,这不就有活跃的贡献者送来新鲜的视频教程!在此感谢@Tianqi-Dotes 的细致讲解 贡献者还贴心地录制了中英文两 ...
- ubuntu下Nodic开发环境搭建
ubuntu下Nodic开发环境搭建 1.编译环境 ubuntu可直接装gcc编译环境 sudo apt install gcc-arm-none-eabi 也可以下载可执行文件download 2. ...
- Windows系统下Android开发环境搭建
“工具善其事,必先利其器”.要想学好Android,搭建好Android开发环境是一个良好的开端. Windows系统下Android开发环境主要有4个大的步骤.分别是: 1.JDK的安装 2.ecl ...
- Windows VS Code 配置 C/C++ 开发环境
准备 Windows [这个相信大家都有 笑: )] VS Code MinGW-w64 C/C++ 安装 MinGw-w64 具体说明细节和安装体验可以在<⑨也懂系列:MinGW-w64安装教 ...
- Windows系统下JAVA开发环境搭建
首先我们需要下载JDK(JAVA Development Kit),JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库. 下载地址:http://www.or ...
随机推荐
- 前端开发笔记(2)css基础(上)
CSS介绍 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS ...
- 配置ArcGIS Server使用LDAP身份认证
1.登陆ArcGIS Server Manager,修改站点的安全设置.选择用户和角色来自现有企业系统(LDAP或Windows域). 2.选择LDAP存储类型. 3.填写LDAP用户存储连接信息.主 ...
- Python+Selenium笔记(十二):数据驱动测试
(一) 前言 通过使用数据驱动测试,实现对输入值和预期结果的参数化.(例如:输入数据和预期结果可以直接读取Excel文档的数据) (二) ddt 使用ddt执行数据驱动测试,ddt库可以将测试 ...
- [钉钉通知系列]SVN提交后自动推送消息到钉钉群
钉钉设置机器人配置 1.进入配置机器人入口 2.添加机器人 3.测试WebHook请求 本人使用Postman进行测试 4.配置SVN 4.1 配置 Pre-commit hook 设置提交内容必须包 ...
- API接口安全设计(转)
接口的安全性主要围绕Token.Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看: Token授权机制:用户使用用户名密码登录后服务器给客户端返回一个To ...
- .net core 在linux系统运行
.net都已经跨平台了,所以想把一些东西部署到linux服务器上去 ,首先介绍一款叫做MobaXterm的软件,功能相当强大,感觉比xshell和putty好用,可以相对方便的操作linux系统,官网 ...
- 检索 COM 类工厂中 CLSID 为 {00021A20-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80080005
创建Excel对象失败: Excel.Application xApp = new Excel.Application(); 错误提示:{"检索 COM 类工厂中 CLSID 为 {0002 ...
- java读取txt文件的2中方法---并将内容(每一行以固定的字符分割切成2段)存到map中去
#java读取txt文件的第一种方法 /** * 方法:readTxt * 功能:读取txt文件并把txt文件的内容---每一行作为一个字符串加入到List中去 * 参数:txt文件的地址 * 返回: ...
- 乘风破浪:LeetCode真题_025_Reverse Nodes in k-Group
乘风破浪:LeetCode真题_025_Reverse Nodes in k-Group 一.前言 将一个链表按照一定的长度切成几部分,然后每部分进行翻转以后再拼接成一个链表是比较困难的,但是这也能锻 ...
- python3: 文件与IO
1.读写文本数据 # Write chunks of text data with open('somefile.txt', 'wt') as f: f.write(text1) # Redirect ...