.Net for Spark 實現WordCount應用及除錯入坑詳解
1. 概述
iNeuOS雲端作業系統現在具備物聯網、檢視業務建模、機器學習的功能,但是缺少一個計算平臺產品。最近在調研使用什麼語言進行開發,並且研究實現的技術路線。iNeuOS全系使用C#/JS/CSS/PYTHON開發,所以優先選擇C#實現計算平臺的開發,當然也不排除使用scala和python等語言。最近微軟釋出.Net for Spark元件,與 .NET Standard 2.0 相容,可以在 Linux、macOS 和 Windows 系統上使用,就像 .NET 的其餘部分一樣。在網上進行了調研,下圖展示了 .NET Core 與 Python、Scala 在 TPC-H 查詢集上的效能對比。如下圖:
在github上看了原始碼,程式碼質量比較高。最近兩天進行了應用及測試,整體流程已經走通,感覺比較清爽。
2.系統環境
作業系統:Ubuntu 16.04
開發語言:.Net Core 2.2
計算框架:.Net for Spark
開發工具:VSCODE
測試工具:netcat
3.環境部署
3.1安裝 .Net Core 2.2
參見安裝過程:https://dotnet.microsoft.com/download/linux-package-manager/ubuntu16-04/sdk-current
3.2安裝 .Net for Spark及程式碼實現
參見安裝過程:https://github.com/dotnet/spark/blob/master/docs/getting-started/ubuntu-instructions.md
Program.cs實現的程式碼參見:https://github.com/dotnet/spark/blob/master/examples/Microsoft.Spark.CSharp.Examples/Sql/Streaming/StructuredNetworkWordCount.cs
3.3安裝 netcat
命令列:apt-get install netcat
4.開發除錯
4.1啟動netcat
主要用於實時傳送字串,實現字串統計。
命令列:nc -lk 9999
4.2啟動除錯模式
在程式集目錄:HelloSpark/bin/Debug/netcoreapp2.2下。
命令列:spark-submit --class org.apache.spark.deploy.DotnetRunner --master local microsoft-spark-2.4.x-0.3.0.jar debug
不執行這個命令,在vscode除錯的時候,會出現異常:[Exception] [JvmBridge] Connection refused 127.0.0.1:5567。
4.3啟動vscode除錯
在main函式的第一行增加一行測試程式碼:
args=new string[]{"localhost","9999"};
主要用於連線netcat服務,接收netcat傳送過來的字串,並進行字串統計。如下圖:
4.4除錯過程
開啟“4.1啟動netcat”和“4.2啟動除錯模式”視窗,netcat用於傳送資料,除錯模式視窗可以接收到資料並進行統計。如下圖:
5.應用釋出
把main函式內的測試程式碼刪除掉,在工程目錄下執行命令:dotnet build,生成新的程式集。
在程式集目錄:HelloSpark/bin/Debug/netcoreapp2.2下執行命令:
命令列:spark-submit --class org.apache.spark.deploy.DotnetRunner --master local microsoft-spark-2.4.x-0.3.0.jar dotnet HelloSpark.dll localhost 9999
同樣在netcat視窗傳送資料,結果如下圖:
6.專案合作
承接工業物聯網、大資料、工業網際網路專案。官方網站(iNeuOS):http://www.ineuos.net。
專案程式碼下載:部落格園下載