首先在Linux环境安装spark:

可以从如下地址下载最新版本的spark:

https://spark.apache.org/downloads.html  

这个下载下来后是个tgz的压缩包,解压后spark环境就安装好了

或者从github上下载:

#git clone git://github.com/apache/spark.git  

安装好后,进入到spark的根目录,就可以通过spark提供的一些脚本命令行来用spark进行计算了,一个例子

./bin/spark-submit examples/src/main/python/pi.py 10  

这个例子是,可以给脚本命令传入python脚本参数来计算,当然也可以传入Java的jar包参数来计算,即如何计算是通过传入python脚本或者Java类来定义的,

python脚本用spark提供的python api编写,入口是main函数

java类用spark提供的java api来编写,入口也是main函数,要将java类及其依赖的jar包打成jar

下面主要说下在IntelliJ idea中用Java在本地进行spark计算(单线程)

首先需要在pom文件中引入如下两个依赖:

<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency> <dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>

Java测试类如下:

功能:分别计算testfile.txt文件中包含字符a和b的行数

package com.sogou.baike;  

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.SparkSession; /**
* Hello world!
*
*/
public class SimpleApp {
public static void main( String[] args ) {
System.setProperty("hadoop.home.dir", "D:\\software\\hadoop-home\\");
String logFile = "D:\\testfile.txt";
SparkSession spark = SparkSession.builder().master("local").appName("Simple Application").getOrCreate();
Dataset<String> logData = spark.read().textFile(logFile).cache();
long numAs = logData.filter(s->s.contains("a")).count();
long numBs = logData.filter(s->s.contains("b")).count();
System.out.println("a: " + numAs + ", b: " + numBs);
spark.stop();
}
}

上面是我已经完全配置好的代码,我最开始运行的过程中遇到了四个错误

第一个错误:

idea不支持java8的新特性lambda表达式

解决办法:参考我的另外一篇博客:

http://blog.csdn.net/u011734144/article/details/77867697  

第二个错误:

Could not locate executable null\bin\winutils.exe in the Hadoop binaries  

解决办法:

到如下地址下载winutils.exe文件, http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe

并保存到如下路径(自行保存路径):

D:\\software\\hadoop-home\\  

然后在代码中加上这行:

System.setProperty("hadoop.home.dir", "D:\\software\\hadoop-home\\"); 

这是配置winutils.exe文件的路径,但是要把winutils.exe文件放到上述目录下的bin/目录中

第三个错误:(这个错误是没有配置spark的集群地址)

org.apache.spark.SparkException: A master URL must be set in your configuration

解决办法:

可以通过修改idea的配置来解决,实际就是添加jvm的参数配置:

点击idea的Edit Configuration, 在VM options中输入

-Dspark.master=local  

也可以通过修改这行代码:

SparkSession spark = SparkSession.builder().master("local").appName("Simple Application").getOrCreate();  

上面是修改后的,即加上master("local") 就不会报这个错误了,这个表示spark计算访问的是本地spark,而不是远程spark集群

第四个错误:

Exception in thread "main" java.lang.IllegalArgumentException: System memory 259522560 must be at least 471859200. Please increase heap size using the --driver-memory option or spark.driver.memory in Spark configuration.
at org.apache.spark.memory.UnifiedMemoryManager$.getMaxMemory(UnifiedMemoryManager.scala:217)
at org.apache.spark.memory.UnifiedMemoryManager$.apply(UnifiedMemoryManager.scala:199)
at org.apache.spark.SparkEnv$.create(SparkEnv.scala:332)
at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:175)
at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:257)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:432)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2509)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:909)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:901)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:901)
at com.sogou.baike.SimpleApp.main(SimpleApp.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

这个说的是项目需要的堆空间太小,所以需要配置java 虚拟机的参数

解决办法:如上,在VM options中添加配置初始堆和最大堆的大小:

-Xms1024m -Xmx1024m  

所以最终的java虚拟机的参数内容为:

-Dspark.master=local  -Xms1024m -Xmx1024m  

上面这种方式的spark计算是在本地执行的,是单线程的

我们其实可以将上述java代码打包成jar包,然后用上面安装好的spark的命令./bin/spark-shell 来执行spark计算,并且可以用该命令将计算提交到集群上计算,加快速度

注意spark命令要运行必须配置JAVA_HOME为java8

Java进行spark计算的更多相关文章

  1. 在IntelliJ IDEA中创建和运行java/scala/spark程序

    本文将分两部分来介绍如何在IntelliJ IDEA中运行Java/Scala/Spark程序: 基本概念介绍 在IntelliJ IDEA中创建和运行java/scala/spark程序 基本概念介 ...

  2. 【Java】Float计算不准确

    大家可能都遇到过,float在计算某些值时,会有不准确的情况. 比如如下情况: > 计算不准确 package com.nicchagil.study.java.demo.No10float计算 ...

  3. java+hadoop+spark+hbase+scala+kafka+zookeeper配置环境变量记录备忘

    java+hadoop+spark+hbase+scala 在/etc/profile 下面加上如下环境变量 export JAVA_HOME=/usr/java/jdk1.8.0_102 expor ...

  4. Spark计算模型

    [TOC] Spark计算模型 Spark程序模型 一个经典的示例模型 SparkContext中的textFile函数从HDFS读取日志文件,输出变量file var file = sc.textF ...

  5. spark计算两个DataFrame的差集、交集、合集

    spark 计算两个dataframe 的差集.交集.合集,只选择某一列来对比比较好.新建两个 dataframe : import org.apache.spark.{SparkConf, Spar ...

  6. 【原创 Hadoop&Spark 动手实践 7】Spark 计算引擎剖析与动手实践

    [原创 Hadoop&Spark 动手实践 7]Spark计算引擎剖析与动手实践 目标: 1. 理解Spark计算引擎的理论知识 2. 动手实践更深入的理解Spark计算引擎的细节 3. 通过 ...

  7. 【Spark深入学习 -13】Spark计算引擎剖析

    ----本节内容------- 1.遗留问题解答 2.Spark核心概念 2.1 RDD及RDD操作 2.2 Transformation和Action 2.3 Spark程序架构 2.4 Spark ...

  8. Java闰年的计算,Calendar的用法

    Java闰年的计算,Calendar的用法 代码如下: package com.aaa.zuoye; import java.text.ParseException; import java.util ...

  9. Java基础-时间复杂度计算方式

    Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

随机推荐

  1. hdu 6299 Balanced Sequence(贪心)题解

    题意:题意一开始不是很明白...就是他给你n个串,让你重新排列组合这n个串(每个串内部顺序不变),使得匹配的括号长度最大.注意,题目要求not necessary continuous,括号匹配不需要 ...

  2. 往前端打smarty数据

    $data['hot_issue']=$hotIssue; var_dump($data);

  3. java 23种设计模式,一般情况下,常用的有哪些? 转载

    原址:http://wangle.iteye.com/blog/196972 工厂模式, 工厂方法模式,单例模式, 外观(Facade)模式, 观察者(Observer)模式,桥接(Bridge)模式 ...

  4. adb: failed to install xxx.apk: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package com.xxx.deliveryrobot signatures do not match the previously installed version; ignoring!]

    解决方法:我是在安装软件时出现的这个错误,先卸载再安装即可 卸载: adb uninstall "com.yourapp.yourapp" 安装: adb install your ...

  5. Linux常用命令--网终设置

    1.把自己(sa)添加到sudoers配置文件中,以便于获取权限 vim /etc/sudoers 编辑文件(部分centOS版本没有vim命令,则用vi即可) 找到[root ALL=(ALL) A ...

  6. MySQL —— 基本查询方法

    MySQL —— 简单查询与按条件查询 在MySQL中从数据表中查询数据的基本语句时select语句.  select语句基本语法格式:      select 查询内容       from 表名  ...

  7. Andrew and Taxi CodeForces - 1100E (思维,拓扑)

    大意: 给定有向图, 每条边有一个权值, 假设你有$x$个控制器, 那么可以将所有权值不超过$x$的边翻转, 求最少的控制器数, 使得翻转后图无环 先二分转为判定问题. 每次check删除能动的边, ...

  8. 用ansible剧本搭建lnmp

    首先在主服务器上搭建ansible直接用云yum装就可以, yum -y install ansible 如果copy报错一下的语句 "msg": "Aborting, ...

  9. win7下解压安装mysql的方法

    在win7下通过解压安装mysql 5.7一直出现启动不成功,网上找了好久终于找到一个解决方法,记录一下: 1.解压下载的压缩包 2.在解压目录下,将my-default.ini改名为my.ini, ...

  10. tornado框架的get方法传递参数

    tornado框架的get方法传递参数,代码: # encoding: utf-8 """ @version: ?? @author: andu99 @contact: ...