試用最強Spark IDE--IDEA

来源:https://www.cnblogs.com/wenBlog/archive/2018/01/23/8337134.html
-Advertisement-
Play Games

1、安裝IntelliJ IDEA IDEA 全稱 IntelliJ IDEA,是java語言開發的集成環境,IntelliJ在業界被公認為最好的java開發工具之一,尤其在智能代碼助手、代碼自動提示、重構、J2EE支持、Ant、JUnit、CVS整合、代碼審查、創新的GUI設計等方面的功能可以說是 ...


1安裝IntelliJ IDEA

IDEA 全稱 IntelliJ IDEA,是java語言開發的集成環境,IntelliJ在業界被公認為最好的java開發工具之一,尤其在智能代碼助手、代碼自動提示、重構、J2EE支持、Ant、JUnit、CVS整合、代碼審查、創新的GUI設計等方面的功能可以說是超常的。IDEA是JetBrains公司的產品,這家公司總部位於捷克共和國的首都布拉格,開發人員以嚴謹著稱的東歐程式員為主。

IDEA每個版本提供Community和Ultimate兩個版本,如下圖所示,其中Community是完全免費的,而Ultimate版本可以使用30天,過這段時間後需要收費。從安裝後使用對比來看,下載一個Community版本足夠了。

 

 

1.1  安裝軟體

1.1.1 下載IDEA安裝文件

可以到Jetbrains官網http://www.jetbrains.com/idea/download/,選擇最新的安裝文件。由於以後的練習需要在Linux開發Scala應用程式,選擇Linux系統IntelliJ IDEA14,如下圖所示:

 

】在該系列配套資源的install目錄下分別提供了ideaIC-14.0.2.tar.gz(社區版)和ideaIU-14.0.2.tar.gz(正式版)安裝文件,對於Scala開發來說兩個版本區別不大

1.1.2 解壓縮並移動目錄

把下載的安裝文件上傳到目標機器,用如下命令解壓縮IntelliJ IDEA安裝文件,並遷移到/app目錄下:

cd /home/hadoop/upload

tar -zxf ideaIU-14.0.2.tar.gz

sudo mv idea-IU-139.659.2 /app/idea-IU

 

 

1.1.3配置/etc/profile環境變數

使用如下命令打開/etc/profile文件:

sudo vi /etc/profile

確認JDK配置變數正確配置(參見第2節《Spark編譯與部署》中關於基礎環境搭建介紹):

export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

export PATH=$PATH:$JAVA_HOME

 

 

1.2 配置Scala環境

1.2.1 啟動IntelliJ IDEA

可以通過兩種方式啟動IntelliJ IDEA:

  • 到IntelliJ IDEA安裝所在目錄下,進入bin目錄雙擊idea.sh啟動IntelliJ IDEA;
  • 在命令行終端中,進入$IDEA_HOME/bin目錄,輸入./idea.sh進行啟動

IDEA初始啟動目錄如下,IDEA預設情況下並沒有安裝Scala插件,需要手動進行安裝,安裝過程並不複雜,下麵將演示如何進行安裝。

 

 

1.2.2 下載Scala插件

參見上圖,在啟動界面上選擇“Configure-->Plugins"選項,然後彈出插件管理界面,在該界面上列出了所有安裝好的插件,由於Scala插件沒有安裝,需要點擊”Install JetBrains plugins"進行安裝,如下圖所示:

 

 

待安裝的插件很多,可以通過查詢或者字母順序找到Scala插件,選擇插件後在界面的右側出現該插件的詳細信息,點擊綠色按鈕"Install plugin”安裝插件,如下圖所示:

 

 

安裝過程將出現安裝進度界面,通過該界面瞭解插件安裝進度,如下圖所示:

 

 

安裝插件後,在啟動界面中選擇創建新項目,彈出的界面中將會出現"Scala"類型項目,選擇後將出現提示創建的項目是僅Scala代碼項目還是SBT代碼項目,如下圖所示:

 

 

1.2.3 設置界面主題

從IntelliJ IDEA12開始起推出了Darcula 主題的全新用戶界面,該界面以黑色為主題風格得到很多開發人員的喜愛,下麵我們將介紹如何進行配置。在主界面中選擇File菜單,然後選擇Setting子菜單,如下圖所示:

 

在彈出的界面中選擇Appearance &Behavior中Appearance,其中Theme中選擇Darcula主題,如下圖所示:

 

 

保存該主題重新進入,可以看到如下圖樣式的開發工具,是不是很酷!

 

 

2    使用IDEA編寫例子

2.1 創建項目

2.1.1 設置項目基本信息

在IDEA菜單欄選擇File->New Project,出現如下界面,選擇創建Scala項目:

 

 

在項目的基本信息填寫項目名稱、項目所在位置、Project SDK和Scala SDK,在這裡設置項目名稱為class3,關於Scala SDK的安裝參見第2節《Spark編譯與部署》下Spark編譯安裝介紹:

 

 

2.1.2 設置Modules

創建該項目後,可以看到現在還沒有源文件,只有一個存放源文件的目錄src以及存放工程其他信息的雜項。通過雙擊src目錄或者點擊菜單上的項目結構圖標打開項目配置界面,如下圖所示:

 

 

在Modules設置界面中,src點擊右鍵選擇“新加文件夾”添加src->main->scala目錄:

 

 

在Modules設置界面中,分別設置main->scala目錄為Sources類型:

 

 

2.1.3 配置Library

選擇Library目錄,添加Scala SDK Library,這裡選擇scala-2.10.4版本

 

 

添加Java Library,這裡選擇的是在$SPARK_HOME/lib/spark-assembly-1.1.0-hadoop2.2.0.jar文件,添加完成的界面如下:

 

 

2.2 例子1:直接運行

《Spark編程模型(上)--概念及Shell試驗》中使用Spark-Shell進行了搜狗日誌的查詢,在這裡我們使用IDEA對Session查詢次數排行榜進行重新練習,可以發現藉助專業的開發工具可以方便快捷許多。

2.2.1 編寫代碼

在src->main->scala下創建class3包,在該包中添加SogouResult對象文件,具體代碼如下:

 

 1 package class3

 2

 3 import org.apache.spark.SparkContext._

 4 import org.apache.spark.{SparkConf, SparkContext}

 5

 6 object SogouResult{

 7   def main(args: Array[String]) {

 8     if (args.length == 0) {

 9       System.err.println("Usage: SogouResult <file1> <file2>")

10       System.exit(1)

11     }

12

13     val conf = new SparkConf().setAppName("SogouResult").setMaster("local")

14     val sc = new SparkContext(conf)

15

16     //session查詢次數排行榜

17     val rdd1 = sc.textFile(args(0)).map(_.split("\t")).filter(_.length==6)

18 val rdd2=rdd1.map(x=>(x(1),1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))

19     rdd2.saveAsTextFile(args(1))

20     sc.stop()

21   }

22 }

 

 

2.2.2 編譯代碼

代碼在運行之前需要進行編譯,可以點擊菜單Build->Make Project或者Ctrl+F9對代碼進行編譯,編譯結果會在Event Log進行提示,如果出現異常可以根據提示進行修改

 

 

2.2.3 運行環境配置

SogouResult首次運行或點擊菜單Run->Edit Configurations打開"運行/調試 配置界面"

 

 

運行SogouResult時需要輸入搜狗日誌文件路徑和輸出結果路徑兩個參數,需要註意的是HDFS的路徑參數路徑需要全路徑,否則運行會報錯:

  • 搜狗日誌文件路徑:使用上節上傳的搜狗查詢日誌文件hdfs://hadoop1:9000/sogou/SogouQ1.txt
  • 輸出結果路徑:hdfs://hadoop1:9000/class3/output2

 

 

2.2.4 運行結果查看

啟動Spark集群,點擊菜單Run->Run或者Shift+F10運行SogouResult,在運行結果視窗可以運行情況。當然瞭如果需要觀察程式運行的詳細過程,可以加入斷點,使用調試模式根據程式運行過程。

 

 

使用如下命令查看運行結果,該結果和上節運行的結果一致

hadoop fs -ls /class3/output2 

hadoop fs -cat /class3/output2/part-00000 | less

 

2.3  例子2:打包運行

上個例子使用了IDEA直接運行結果,在該例子中將使用IDEA打包程式進行執行

2.3.1 編寫代碼

在class3包中添加Join對象文件,具體代碼如下:

 

 1 package class3

 2 

 3 import org.apache.spark.SparkContext._

 4 import org.apache.spark.{SparkConf, SparkContext}

 5 

 6 object Join{

 7   def main(args: Array[String]) {

 8     if (args.length == 0) {

 9       System.err.println("Usage: Join <file1> <file2>")

10       System.exit(1)

11     }

12 

13     val conf = new SparkConf().setAppName("Join").setMaster("local")

14     val sc = new SparkContext(conf)

15 

16     val format = new java.text.SimpleDateFormat("yyyy-MM-dd")

17     case class Register (d: java.util.Date, uuid: String, cust_id: String, lat: Float,lng: Float)

18     case class Click (d: java.util.Date, uuid: String, landing_page: Int)

19     val reg = sc.textFile(args(0)).map(_.split("\t")).map(r => (r(1), Register(format.parse(r(0)), r(1), r(2), r(3).toFloat, r(4).toFloat)))

20 val clk = sc.textFile(args(1)).map(_.split("\t")).map(c => (c(1), Click(format.parse(c(0)), c(1), c(2).trim.toInt)))

21     reg.join(clk).take(2).foreach(println)

22 

23     sc.stop()

24   }

25 }

 

 

2.3.2 生成打包文件

第一步   配置打包信息

在項目結構界面中選擇"Artifacts",在右邊操作界面選擇綠色"+"號,選擇添加JAR包的"From modules with dependencies"方式,出現如下界面,在該界面中選擇主函數入口為Join:

 

 

第二步   填寫該JAR包名稱和調整輸出內容

【註意】的是預設情況下"Output Layout"會附帶Scala相關的類包,由於運行環境已經有Scala相關類包,所以在這裡去除這些包只保留項目的輸出內容

 

 

第三步   輸出打包文件

點擊菜單Build->Build Artifacts,彈出選擇動作,選擇Build或者Rebuild動作

 

 

第四步   複製打包文件到Spark根目錄下

cd /home/hadoop/IdeaProjects/out/artifacts/class3

cp LearnSpark.jar  /app/hadoop/spark-1.1.0/

ls /app/hadoop/spark-1.1.0/

 

 

2.3.3 運行查看結果

通過如下命令調用打包中的Join方法,運行結果如下:

cd /app/hadoop/spark-1.1.0

bin/spark-submit --master spark://hadoop1:7077 --class class3.Join --executor-memory 1g LearnSpark.jar hdfs://hadoop1:9000/class3/join/reg.tsv hdfs://hadoop1:9000/class3/join/clk.tsv

 

 

 

3問題解決

3.1 出現"*** is already defined as object ***"錯誤

編寫好SogouResult後進行編譯,出現"Sogou is already as object SogouResult"的錯誤,

 

 

出現這個錯誤很可能不是程式代碼的問題,很可能是使用Scala JDK版本問題,作者在使用scala-2.11.4遇到該問題,換成scala-2.10.4後重新編譯該問題得到解決,需要檢查兩個地方配置:Libraries和Global Libraries分別修改為scala-2.10.4

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 昨天筆者介紹了Mysql的解壓縮版本的安裝,今天筆者就來介紹一下msi版本的安裝。 一、下載地址 https://dev.mysql.com/downloads/ 但是可能你會發現,在官網下載的速度像龜速一樣,這時候有一個小技巧可以用哦,那就是將下載的鏈接複製一下,到迅雷上面去下載,原本七個小 ...
  • 項目因為歷史原因使用了 GBK編碼,遇到非GBK編碼字元時出現亂碼問題,情況比較嚴重,暫時先打算修改 列的字元編碼為 utf8mb4. 查看 mysql 手冊: 用 GBK 編碼轉 utf8 進行說明: 他的大概意思是,如果 是 char varchar text 等類型的,並且這些列的內容也是採用 ...
  • 日常應用運維工作中,Dev或者db本身都需要統計表的行數,以此作為應用或者維護的一個信息參考。也許很多人會忽略select count(*) from table_name類似的sql對資料庫性能的影響,可當你在慢日誌平臺看到執行了數千次,每次執行4秒左右的查詢,你還會無動於衷嗎?作為一個有擔當敢於 ...
  • FROM `task_detatils` WHERE FIND_IN_SET( '1', responsible_user) 將含有1的responsible_user列數據全部搜索出來 ...
  • 一、 概述 MySQL從3.23.15版本以後提供資料庫複製(replication)功能,利用該功能可以實現兩個資料庫同步、主從模式、互相備份模式的功能。本文檔主要闡述瞭如何在linux系統中利用mysql的replication進行雙機熱備的配置。 二、 環境 操作系統:ubuntu 14.04 ...
  • pt-align的功能很簡單,將其它工具的輸出按列對其。 用法: pt-align [FILES] 如果沒有指定文件,則預設讀取標準輸入的內容。 如,常用的vmstat的輸出,閱讀體驗就不夠人性化。 在這種情況下,就可以使用pt-align進行處理 ...
  • 背景 在 SQL Server 2012 和 2014 中,初始化 SQL Server Always On 可用性組中的次要副本的唯一方法是使用備份、複製和還原。 在一個高可用組裡面添加一個資料庫需要很多手動任務和一些必要條件。需要完成的這些工作中,有一些是有些困難的,比如: 我們需要從主副本中備 ...
  • 環境:elasticsearch6.1.2 kibana6.1.2 基礎概念: 1、_index元數據 (1)代表一個document存放在哪個index中(2)類似的數據放在一個索引,非類似的數據放不同索引:product index(包含了所有的商品),sales index(包含了所有的商品銷 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...