一、IDEA安裝
下載Community版的IDEA,Ultimate是免費試用版(相當於用到后面要給錢的)
ideaIC-2019.2.3.tar.gz
解壓IDEA:
tar -zxvf ideaIC-2019.2.3.tar.gz
查看目錄:
[hadoop@hadoop01 idea-IC-192.6817.14]$ ls -ll
total 52
drwxrwxr-x. 2 hadoop hadoop 4096 Oct 2 22:08 bin
-rw-r--r--. 1 hadoop hadoop 14 Sep 24 12:43 build.txt
-rw-r--r--. 1 hadoop hadoop 1914 Sep 24 12:43 Install-Linux-tar.txt
drwxrwxr-x. 7 hadoop hadoop 83 Oct 2 22:08 jbr
drwxrwxr-x. 4 hadoop hadoop 8192 Oct 2 22:08 lib
drwxrwxr-x. 2 hadoop hadoop 4096 Oct 2 22:08 license
-rw-r--r--. 1 hadoop hadoop 11352 Sep 24 12:43 LICENSE.txt
-rw-r--r--. 1 hadoop hadoop 128 Sep 24 12:43 NOTICE.txt
drwxrwxr-x. 43 hadoop hadoop 4096 Oct 2 22:08 plugins
-rw-r--r--. 1 hadoop hadoop 370 Sep 24 12:46 product-info.json
drwxrwxr-x. 2 hadoop hadoop 35 Oct 2 22:08 redist
啟動iedea:
[hadoop@hadoop01 bin]$ ./idea.sh
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Startup Error: Unable to detect graphics environment
報錯:Unable to detect graphics environment
解決辦法:不要在外面通過遠程的方式執行此啟動命令,要在linux圖形界面中打開終端來執行此命令
在linux終端中執行命令啟動idia:
[hadoop@hadoop01 ~]$ cd idea-IC-192.6817.14
[hadoop@hadoop01 idea-IC-192.6817.14]$ bin/idea.sh
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
下載安裝scala插件
將 scala-intellij-bin-2019.2.3.zip 放在 scala主目錄plugins文件夾里
注:scala插件一定要與idea版本對應,如我的就是:scala-intellij-bin-2019.2.3.zip對應ideaIC-2019.2.3.tar.gz
再在啟動的idea中找到setting里面的plugins中選擇install plugin from disk…
選中插件包
最后重啟idea,即可。
二、IDEA 使用
創建scala新工程
注:選擇IDEA 便是創建普通的Scala 項目(注:IJ IDEA版本的不同,這里IDEA可能顯示成Scala,不過這個並沒有什么影響)
工程的基本頁面設置:
其中:
project name :工程名稱
project location :工程文件地址
jdk :使用的java version 版本,未找到時,自己選擇jdk的安裝目錄
scala SDK :使用scala版本,未找到時,自己選擇scala的安裝目錄
點擊finish后,進入設計主頁面
這個時候,第一次系統會對設置進行索引。
這里需要指出,IDEA對新工程的索引需要時間,長短視虛擬機的配置而定
在src處右鍵new—package,准備創建一個scala包
Package name :com.hadoop
配置工程結構(project structure),為了導入spark依賴包
依次選擇主界面的file-- project structure,在彈出的對話框中選擇librarie --+--java,選擇虛擬機中已安裝spark目錄下的jars下所有的jar包
點擊OK后,系統會再次進行索引
創建scala類
在com.hadoop包上右鍵new – scala class,彈出如下界面
輸入sparkPi,並選擇object
運行之前,需要修改運行參數
在主界面選擇run菜單中的edit configurations ,在彈出的對話框中左上角點擊“+”,在彈出的列表中,選擇application,填寫運行參數:
修改的參數有三個:
Name :sparkPi
Main class:com.hadoop.sparkPi
VM options :-Dspark.master=local -Dspark.app.name=sparkPi
注:VM options 也可以不填寫,但是要在代碼中加入
.setMaster("local").setAppName("sparkPi")
填寫完成后,直接點擊OK
三、測試
1、測試程序:
package com.hadoop
import scala.math.random
import org.apache.spark._
object sparkPi {
def main(args: Array[String]) {
println("Hello, World!")
}
}
Run程序后,結果如下:
2、編寫工程:
package com.hadoop import scala.math.random import org.apache.spark._ object sparkPi { def main(args: Array[String]) { val conf = new SparkConf().setMaster("local").setAppName("sparkPi") val spark = new SparkContext(conf) val slices = if (args.length > 0) args(0).toInt else 2 val n = 10000 * slices val count = spark.parallelize(1 to n, slices).map { i => val x = random * 2 - 1 val y = random * 2 - 1 if (x * x + y * y < 1) 1 else 0 }.reduce(_ + _) println("Pi is roughly " + 4.0 * count / n) spark.stop() } }
第一次運行結果:
報錯:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream at org.apache.spark.SparkConf.loadFromSystemProperties(SparkConf.scala:76) at org.apache.spark.SparkConf.<init>(SparkConf.scala:71) at org.apache.spark.SparkConf.<init>(SparkConf.scala:58) at com.hadoop.sparkPi$.main(sparkPi.scala:9) at com.hadoop.sparkPi.main(sparkPi.scala) Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStream at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 5 more
原因:缺少對應的依賴包
解決辦法:下載spark-2.4.4-bin-hadoop2.6,將里面jars包拷貝進去,或者直接重新配置spark-2.4.4-bin-hadoop2.6
第二次運行結果:
報錯:
Exception in thread "main" java.lang.IllegalArgumentException: System memory 425197568 must be at least 471859200.
Please increase heap size using the --driver-memory option or spark.driver.memory in Spark configuration.
原因:Spark是非常依賴內存的計算框架,在虛擬環境下使用local模式時,實際上是使用多線程的形式模擬集群進行計算,因而對於計算機的內存有一定要求,這是典型的因為計算機內存不足而拋出的異常。
解決辦法:
在下面這出代碼后面添加:“.set("spark.testing.memory","2147480000")”,其實上面的錯誤提醒了的,如“Please increase heap size using the --driver-memory option or spark.driver.memory in Spark configuration.”
val conf = new SparkConf().setMaster("local").setAppName("sparkPi") //添加后
第三次運行(成功):
結果:Pi is roughly 3.1304
附_完整測試代碼:
package com.hadoop import scala.math.random import org.apache.spark._ object sparkPi { def main(args: Array[String]) { val conf = new SparkConf().setMaster("local").setAppName("sparkPi").set("spark.testing.memory","2147480000") val spark = new SparkContext(conf) val slices = if (args.length > 0) args(0).toInt else 2 val n = 10000 * slices val count = spark.parallelize(1 to n, slices).map { i => val x = random * 2 - 1 val y = random * 2 - 1 if (x * x + y * y < 1) 1 else 0 }.reduce(_ + _) println("Pi is roughly " + 4.0 * count / n) spark.stop() } }