Spark詳解(09) - Spark調優
前言
隨著專案團隊規模日益壯大,專案程式碼量也越來越多。且不說團隊成員編碼水平層次不齊,即便是老手,也難免因為程式碼量的增加和任務的繁重而忽略程式碼的質量,最終的問題便是bug的增多和程式碼債務的堆積。
因此,程式碼review便日益提上了日程。當然人工review的效率還是相當低下的,於是我們採用了自動化程式碼review的工具,便是今天的主角:SonarQube。
SonarQube簡介
官方網站:https://www.sonarqube.org/
SonarQube 是一個用於管理原始碼質量開放平臺,它可以從多個維度檢測程式碼質量,可以快速的定位程式碼中潛在的或者明顯的 Bug、錯誤。
它支援包括 Java、Python、Php、C/C++、C#、HTML、JavaScript、PL/SQL、Objective C 等二十多種程式語言的程式碼質量管理與檢測。可作為我們日常開發中檢測程式碼質量的重要工具。
SonarQube® 可以與您現有的工作流程整合,以便在專案分支和拉取請求之間進行連續的程式碼檢查。比如:
- SonarQube整合gitlab,在分支推送的時候自動進行程式碼檢查分析,生成程式碼報告。
- SonarQube整合jenkins,在程式碼構建的時候自動進行程式碼分析,生成程式碼報告。
總之,SonarQube是可以配合一切好用的CI/CD工具進行自動化分析程式碼並生成程式碼報告,通過報告我們可以看到程式碼中可能存在的bug和程式碼債務。
環境、軟體準備
以下是安裝的軟體及版本:
- 伺服器:CentOS7
- SonarQube:version 7.7
- Jdk:version 1.8.0_91
- Maven:version 3.5.3
- Mysql: version 5.7.15
注意:下邊我們要演示 Maven 專案如何使用 SonarQube 分析,所以需要先安裝 Maven、Jdk,SonarQube 安裝我們使用 Mysql 作為資料儲存,所以需要先安裝 Mysql,這裡 Maven、Jdk、Mysql 的安裝忽略。
SonarQube安裝
本文下載的版本是Sonarqube-7.7
下載地址:https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
SonarQube 的安裝包是不分平臺的,預設把所有平臺的執行命令都下載下來,使用者根據不同環境執行不同的執行指令碼。
[root@Zabbix ~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
2、解壓SonarQube安裝包
[root@Zabbix ~]# unzip sonarqube-7.7.zip [root@Zabbix ~]# mv sonarqube-7.7 /usr/local/sonarqube
- bin:目錄存放了各個環境的啟動指令碼
- conf:目錄存放著sonarqube的配置檔案
- logs:目錄存放著啟動和執行時的日誌檔案
- data:用來存放資料,SonarQube預設使用 h2 資料庫儲存,同時支援其他如Mysql、Orace、Mssql、Postgresql資料庫儲存
3、配置SonarQube
# 我們首先需要通過配置檔案修改sonarqube的Mysql連線字串等資訊,開啟conf目錄的sonar.properties
[root@Zabbix ~]# vim /usr/local/sonarqube/conf/sonar.properties
埠的配置按照預設配置:
sonar.web.port=9000 sonar.search.port=9001
配置資料庫資訊:
sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:mysql://MYSQLSERVER_IP:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
注:Mysql版本需大於或等於5.6且小於8.0
4、建立資料庫及授權
mysql> create database sonarqube; mysql> grant all on sonarqube.* to sonarqube@'%' identified by '123456'; mysql> flush privileges;
5、啟動SonarQube
啟動需要授權給一個非root的使用者,sonarqube及其es等軟體禁止root賬戶啟動,因此需要切換一個非root賬戶,授權的使用者需要有bin目錄及其子目錄的讀取和可執行的許可權。
然後我們找到對應平臺的指令碼,我的系統是64位的linux,進入linux-x86-64目錄
# 授權
[root@Zabbix ~]# chown -R admin.admin /usr/local/sonarqube
# 啟動
[root@Zabbix ~]# su - admin [admin@Zabbix ~]$ /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
# 查詢埠
[admin@Zabbix ~]$ netstat -lntup
# 啟動之後,我們瀏覽器訪問對應伺服器IP地址的9000埠(防火牆要提前放行9000埠)
如果沒有成功,那麼就在logs目錄檢視啟動日誌。一般有幾種:
- 1)es.log # ES或Mysql等資料庫連線報錯,一般是Mysql的連線字串賬號密碼錯誤或者sonar賬號許可權不夠;
- 2)es.log # 資料庫初始化失敗MySQL sonar賬戶許可權不足
- 3)sonar.log # sonar服務的啟動日誌
- 4)web.log # sonarqube web的啟動日誌
6、訪問SonarQube
# 預設賬號密碼admin
# 登入後介面
7、Plugins 外掛安裝
SonarQube 外掛安裝非常簡單,同時 官網外掛庫 提供了很多實用的外掛供大家下載使用。SonarQube已經預設給我們安裝了一些很常用的外掛,我們可以通過admin登入,點選 配置 -> 系統 -> 更新中心 -> Installed 檢視。
SonarQube 支援分析的語言有很多,像Java、Python、Php、C/C++、C#、HTML、JavaScript、PL/SQL、Objective C等20+語言,當我們需要支援分析什麼語言時,只需要去外掛中心安裝對應語言的外掛即可,非常方便,可擴充套件性強。
這裡我們演示安裝兩個很實用的外掛,一個是 Chinese Pack(SonarQube的漢化包),一個是 Checkstyle(檢測程式碼風格)。
# Chinese Pack 外掛安裝
登陸之後點選administration:
安裝完之後看頁面上邊:
之後再次登陸就更新了:
# Checkstyle 外掛安裝
在 SonarQube 網頁上直接點選安裝。admin 登入,點選 配置 -> 系統 -> 更新中心 -> Available -> Search,輸入 CheckStyle,
在搜素結果中找到 CheckStyle 外掛點選 Install,等待下載完成後,按照頁面提示點選 Restart 自動重啟服務即可完成安裝。
SonarQube分析Maven專案
1、在maven的中找到setting配置檔案。在setting.xml中增加sonarqube配置。如下:
<settings> <pluginGroups> <pluginGroup>org.sonarsource.scanner.maven</pluginGroup> </pluginGroups> <profiles> <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <!-- 配置 Sonar Host地址,預設:http://localhost:9000 --> <sonar.host.url>http://myserver:9000/sonar/</sonar.host.url>
<sonar.login>7895sdf8594sdfs65ewfds9854seese65</sonar.login> </properties> </profile> </profiles> </settings>
2、然後就可以在我們 Maven 工程目錄執行:
mvn clean verify sonar:sonar 或 mvn clean install sonar:sonar
注:如果是使用jenkins和maven編譯,還可在jenkins上具體專案中的構建中配置:
clean verify sonar:sonar -Dsonar.projectVersion=$appVersion -Dsonar.projectKey=ups_sas
3、執行完畢之後,可以去 web頁面檢視分析結果:
http://myserver:9000/sonar/
SonarQube與Jenkins整合
1. 安裝Jenkins
這裡不介紹。
2. 安裝SonarQube Scanner外掛
2.1. 安裝外掛
https://plugins.jenkins.io/sonar
安裝完後重啟jenkins。
2.2. 配置SonarQube
首先,在SonarQube中生成一個Token(PS:用token代替輸入使用者名稱和密碼):
然後,在Jenkins中配置連線sonarqube伺服器的地址,這裡用到的token就是剛才在sonarqube中建立的那個token:
最後,配置全域性工具配置:
3. 建立任務
最最重要的是,配置SonarQube analysis properties
sonar.projectKey=ks-cms-unicorn sonar.projectName=ks-cms-unicorn sonar.projectVersion=1.0 sonar.language=java sonar.sourceEncoding=UTF-8 sonar.sources=$WORKSPACE sonar.java.binaries=$WORKSPACE
本例中,建立了兩個任務,方法同上。
可以看到,每次構建任務都會生成一次報告。這種方式比Maven那種方式要好很多,在實際的專案中多用此方式。
引用:
- https://www.yangxingzhen.com/7262.html
- https://www.cnblogs.com/cjsblog/p/10740840.html