本文介绍Windows下如何配置IDEA开发Spark,spark和hive整合,IDEA中standalone、yarn的方式运行代码的配置。
环境信息
Windows 10 X64
JDK1.8.0_191
Scala 2.11.12
Maven 3.6.1
Hadoop 2.6.0
IntelliJ IDEA 2020.1.1 x64
Jdk下载
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
下载后直接默认安装,配置环境变量
右键计算机“属性”->“高级系统设置”->“高级”->“环境变量” -> “新建” JAVA_HOME
新建 CLASSPATH
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
增加path
“win+r”键输入cmd,输入java -version,查看jdk是否配置成功
下载scala
https://www.scala-lang.org/download/2.11.12.html
下载完,解压到自己的安装目录,配置环境变量SCALA_HOME
增加path
%SCALA_HOME%\bin
Maven下载
https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/
下载后解压到自己的安装目录,配置环境变量 MAVEN_HOME
增加path
%MAVEN_HOME%\bin
验证maven是否配置成功
下载hadoop
https://archive.apache.org/dist/hadoop/common/hadoop-2.6.0/
下载完解压到自己的安装目录,配置环境变量 HADOOP_HOME
下载 hadoop-common-2.6.0-bin
https://github.com/amihalik/hadoop-common-2.6.0-bin
下载后解压,把bin下的文件拷贝到hadoop的安装目录的bin下
下载
https://www.jetbrains.com/idea/download/other.html
可以安装免费社区版本,默认安装即可
打开IDEA,右下角
搜索scala,安装即可
如果下载比较慢,可以单独下载scala插件,手动安装
https://plugins.jetbrains.com/plugin/1347-scala/versions
下载和IDEA对应的版本
下载完,点IDEA这里安装
点击“setting”
搜索“maven”,选择已安装的maven,设置setting.xml和repository路径
修改maven的settings.xml文件
添加自己本地资源库路径
<localRepository>C:\Apache\apache-maven-3.6.1\repositorylocalRepository>
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
通过maven创建scala项目
点击“Create New Project”
选择maven,点Next
输入项目名称和路径
右击项目,添加scala
在src -> main下可以创建scala目录,单独放scala开发的程序
右键,设置scala路径为“Sources Root”
右键,新建scala类
输入类名HelloWorld,选Object
HelloWorld代码
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello World")
}
}
添加 spark开发依赖
修改pom.xml,添加以下
<properties>
<hadoop.version>2.6.0hadoop.version>
<spark.version>2.2.0spark.version>
<scala.version>2.11scala.version>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<dependencies>
<dependency>
<groupId>org.apache.hadoopgroupId>
<artifactId>hadoop-commonartifactId>
<version>${hadoop.version}version>
dependency>
<dependency>
<groupId>org.apache.hadoopgroupId>
<artifactId>hadoop-hdfsartifactId>
<version>${hadoop.version}version>
dependency>
<dependency>
<groupId>org.apache.sparkgroupId>
<artifactId>spark-core_${scala.version}artifactId>
<version>${spark.version}version>
dependency>
<dependency>
<groupId>org.apache.sparkgroupId>
<artifactId>spark-sql_${scala.version}artifactId>
<version>${spark.version}version>
dependency>
<dependency>
<groupId>org.apache.sparkgroupId>
<artifactId>spark-hive_${scala.version}artifactId>
<version>${spark.version}version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.26version>
dependency>
dependencies>
刷新maven
或这里刷新maven
新建WordCount类,代码如下
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
//本地模式运行
.setMaster("local[4]")
.setAppName("wordcount")
val sc = new SparkContext(conf)
//读取hdfs文件
val fileRDD=sc.textFile("hdfs://cdh513:8020/testdatas/input/words.txt")
//读取本地文件
//val fileRDD=sc.textFile("file:\\C:\\WorkSpaces\\testdatas\\input\\words.txt")
val wordRDD=fileRDD.flatMap(_.split(" "))
val groupRDD = wordRDD.map((_,1)).reduceByKey(_+_)
val wordCountArray = groupRDD.collect()
println(wordCountArray.mkString(","))
}
}
hdfs://cdh513:8020/testdatas/input/words.txt是本人hdfs路径的下测试文件,需要Windows配置hosts,直接访问hdfs域名,或直接用IP替换。或用本地文件 file:\C:\WorkSpaces\testdatas\input\words.txt。
words.txt内容
hello word
hello hadoop
hello spark
hello hive
File 下点击
点击
删除多余的jar,保留项目名“SparkDemo”jar即可。还可以在这设置jar名称和路径
删除后如下
点 Build- Build Artifacts…
点 Build
在项目下会生成out文件夹,下面有生成的jar
可以把生成的jar发到spark集群运行
代码中设置standalone主机和本地jar路径,即可直接运行
.setMaster(“spark://cdh513:7077”).setJars(List(“C:\WorkSpaces\SparkDemo\out\artifacts\SparkDemo_jar\SparkDemo.jar”))
代码如下
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
// 设置master为standalone模式,设置本地编译的jar路径。此时spark集群应该是开启状态 .setMaster("spark://cdh513:7077").setJars(List("C:\\WorkSpaces\\SparkDemo\\out\\artifacts\\SparkDemo_jar\\SparkDemo.jar"))
.setAppName("wordcount")
val sc = new SparkContext(conf)
//此处要使用hdfs上的文件,本地文件可能找不到
val fileRDD=sc.textFile("hdfs://cdh513:8020/testdatas/input/words.txt")
val wordRDD=fileRDD.flatMap(_.split(" "))
val groupRDD = wordRDD.map((_,1)).reduceByKey(_+_)
val wordCountArray = groupRDD.collect()
println(wordCountArray.mkString(","))
}
}
SparkSession下直接设置standalone的主机即可,不用指定本地jar路径
代码如下
import org.apache.spark.sql.SparkSession
object SparkSQL {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder
//设置master为standalone模式
.master("spark://cdh513:7077")
.appName("SparkSQL")
.getOrCreate()
//此处最好是hdfs文件,本地文件可能读取不到
val jsonDF = spark.read.json("hdfs://cdh513:8020/testdatas/input/user.json")
jsonDF.createOrReplaceTempView("user")
spark.sql("select * from user").show
spark.stop()
}
}
把hive-site.xml放到resources下,就可以通过spark-sql操作hive了
新建 SparkHive类
代码如下
import org.apache.spark.sql.SparkSession
object SparkHive {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder
.master("local[*]")
.appName("SparkSQL")
//使hive生效
.enableHiveSupport()
.getOrCreate()
// 读取hive中的表
spark.sql("select * from lxs.student").show
spark.stop()
}
}
在IDEA里直接运行在yarn集群,
把core-site.xml,hdfs-site.xml,yarn-site.xml放到resources下
添加spark-yarn包
从spark安装目录下找
新建 SparkOnYarn类
代码如下
import org.apache.spark.sql.SparkSession
object SparkOnYarn {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder
// 设置mater为spark on yarn模式
.master("yarn")
.appName("SparkSQL")
.enableHiveSupport()
.getOrCreate()
// 读取hive中的表
spark.sql("select * from lxs.student").show
spark.stop()
}
}