.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


项目代码下载:博客园下载

.Net for Spark 实现 WordCount 应用及调试入坑详解的更多相关文章

  1. 对于maven创建spark项目的pom.xml配置文件(图文详解)

    不多说,直接上干货! http://mvnrepository.com/ 这里,怎么创建,见 Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)(包含Java和Scala版 ...

  2. 58、Spark Streaming: DStream的output操作以及foreachRDD详解

    一.output操作 1.output操作 DStream中的所有计算,都是由output操作触发的,比如print().如果没有任何output操作,那么,压根儿就不会执行定义的计算逻辑. 此外,即 ...

  3. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  4. [spark]-Spark2.x集群搭建与参数详解

    在前面的Spark发展历程和基本概念中介绍了Spark的一些基本概念,熟悉了这些基本概念对于集群的搭建是很有必要的.我们可以了解到每个参数配置的作用是什么.这里将详细介绍Spark集群搭建以及xml参 ...

  5. 解决在windows的eclipse上面运行WordCount程序出现的一系列问题详解

    一.简介 要在Windows下的 Eclipse上调试Hadoop2代码,所以我们在windows下的Eclipse配置hadoop-eclipse-plugin- 2.6.0.jar插件,并在运行H ...

  6. Spark Sort-Based Shuffle具体实现内幕和源码详解

    为什么讲解Sorted-Based shuffle?2方面的原因:一,可能有些朋友看到Sorted-Based Shuffle的时候,会有一个误解,认为Spark基于Sorted-Based Shuf ...

  7. Spark源码系列(二)RDD详解

    1.什么是RDD? 上一章讲了Spark提交作业的过程,这一章我们要讲RDD.简单的讲,RDD就是Spark的input,知道input是啥吧,就是输入的数据. RDD的全名是Resilient Di ...

  8. ios 利用Reveal来调试界面2--真机调试(步骤详解)

    使用真机调试我们的App界面,如果你的真机是没有越狱的设备,那么使用Reveal来调试UI的步骤是最麻烦的.

  9. Lua调试:getinfo详解

    getinfo是调试Lua程序时一个很重要很常见的函数,主要用于获取函数调用的基本信息.这个函数的难点在于各个参数的含义.下面一一介绍. 一.函数简介: 1.原型:getinfo(level, arg ...

随机推荐

  1. zoj 3820 Building Fire Stations(二分法+bfs)

    题目链接:zoj 3820 Building Fire Stations 题目大意:给定一棵树.选取两个建立加油站,问说全部点距离加油站距离的最大值的最小值是多少,而且随意输出一种建立加油站的方式. ...

  2. 在efcore 中创建类 通过实现IEntityTypeConfiguration<T>接口 实现实体类的伙伴类 实现FluentApi

    1 创建实体类: public partial class NewsCategory : IAggregationRoot { public NewsCategory() { } public Gui ...

  3. WPF文字描边的解决方法

    原文:WPF文字描边的解决方法  由于项目原因,今天研究了一下午WPF的文字描边,网上这方面的资料奇少,搞了半天才发现强大的WPF原来不直接支持文字描边啊.最后求助于MSDN,找到了方案,和大家分 ...

  4. Excel 2013永久取消超链接

    原文:Excel 2013永久取消超链接 在使用Excel的过程中,Excel会自动将网址转换为超链接,操作不当,容易误点,引起不必要的错误, 那么本篇博客就总结下如何在Excel 2013里永久取消 ...

  5. (记录)mysql分页查询,参数化过程的坑

    在最近的工作中,由于历史遗留,一个分页查询没有参数化,被查出来有sql注入危险,所以对这个查询进行了参数化修改. 一看不知道,看了吓一跳,可能由于种种原因,分页查询sql是在存储过程中拼接出来的,wh ...

  6. JScript读取XML文件

    作者:朱金灿 来源:http://blog.csdn.net/clever101 JScript读取XML文件需要考虑msxml组件的多个版本,稳妥的做法是将所有版本都列出来. xml文件的内容如下: ...

  7. Git学习笔记(两)

    删除文件 假设需要从Git删除文件,我们必须从删除列表中的跟踪文件(从临时区域中删除).然后提交.可以使用git rm工作订单完成.联合司令部从工作区删除指定的文件.以后就不会出如今未跟踪文件清单中. ...

  8. js仿黑客帝国文字数字雨效果

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. win7(64bit)使用mingw64配置gtkmm

    因为linux命令不熟悉,加上时间不充裕,仍然决定在win7_64bit下开发GUI程序,选择gtkmm是因为: 1. 在图形界面程序中,windows系统当之无愧GUI之王,用户友好性其他OS无法替 ...

  10. MS SQL SERVER搜索某个表的主键所在的列名

    原文:MS SQL SERVER搜索某个表的主键所在的列名 SELECT SYSCOLUMNS.name  FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEX ...