云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

华为云_项城网站建设_新注册优惠

小七 141 0

使用Mobius在.NET中开发apachespark应用程序

为了弥补Spark和.NET之间的差距,微软在Databricks的指导下创建了一个开源项目Mobius。通过向Spark添加C语言API,它扩展并支持.NET framework开发人员构建ApacheSpark应用程序。此来宾博客提供了对这个C#API的概述。在过去的几年里,apachespark改变了大数据处理和分析领域。它提供了Scala、Java、Python和R的高级api,大大降低了构建各种大数据工作负载的成本和复杂性。Spark Survey 2015的结果表明,编程的简易性是Spark最重要的方面之一。因此,很明显,拥有多种语言的api吸引了不同的开发人员角色,并促成了Spark的迅速采用。然而,Spark对于.NET开发人员社区来说是遥不可及的。Spark Survey 2015的结果还表明,在Windows中Spark的使用量出现了巨大的增长,而且在Windows中使用Spark的开发人员中很可能有一部分是.NET专业人士。为了解决Spark和.NET之间的差距,Microsoft创建了Mobius作为一个开源项目,其目标是添加一个C语言API,以使Spark能够在构建ApacheSpark应用程序时使用任何.NET框架语言。有了Mobius,对.NET有深入投资的组织可以在Spark应用程序中重用现有的.NET库。.NET中的Spark应用程序Spark的C语言绑定类似于Python和R绑定。事实上,Mobius遵循相同的设计模式,并利用Spark中现有的语言绑定组件实现,以实现一致性和重用。下图显示了.NET应用程序与Mobius中的C#API之间的依赖关系,后者内部依赖于Spark在Scala和Java中的公共API,并从PySpark扩展PythonRDD来实现CSharpRDD。如上所示,驱动程序完全用.NET编程语言编写,如C或F,使用Mobius中的C API。Mobius应用程序可以与部署在本地或云中的Spark一起使用。Mobius在Windows和Linux上受支持。在Linux中,Mobius使用Mono,它是.NET框架的开源实现。开发和提交Mobius应用程序Mobius驱动程序应用程序可以在支持.NET开发的IDE(如visualstudio)中开发。mobiusapi和worker实现(用于在Spark worker节点中执行C代码中的用户定义功能)被发布到NuGet。一旦这些Mobius二进制文件和任何其他.NET库依赖项被添加到IDE中的Mobius驱动程序项目中,就可以像IDE中的任何其他.NET程序一样开发、调试和测试驱动程序应用程序代码。NET中的Mobius驱动程序应用程序被编译为可执行(.exe文件),该文件连同其依赖项一起复制到需要提交Spark作业的客户端计算机。在Mobius作业提交脚本(sparkclr)所在的客户机上,还需要Mobius release的受支持版本-提交.cmd或sparkclr-提交.sh)用于向Spark群集提交基于Mobius的应用程序。Mobius作业提交脚本接受与spark submit脚本相同的参数,但是它还需要一个额外的参数来指定Mobius驱动程序的可执行名称及其路径。如上所示,驱动程序完全用.NET编程语言编写,如C或F,使用Mobius中的C API。有关运行Mobius应用程序的更多信息,请访问GitHub。mobiusapi与scalaapi for Spark具有相同的方法名和签名,数据类型类似。因此,使用Mobius实现的驱动程序看起来与Scala或Java中实现的类似。下面是一个使用Mobius API在C中实现Spark的"字数"示例的代码示例。变量文本文件=sparkContext.text文件(@"hdfs://。。。");变量计数=文本文件.FlatMap(x=>x.Split('').Map(word=>newkeyvaluepair(word,1)).ReduceByKey((x,y)=>x+y).Map(字数=>$"{字数计数键},{字数计数。值}");counts.SaveAsTextFile(@"hdfs://。。。");下面的代码片段在F中,展示了如何以JSON格式查询数据,如何使用DataFrame API查找State为"California"的行,并将这些行注册为临时表,并使用Spark SQL查询名称为"Bill"的所有行。数据人员帧=sqlContext.Read().Json("hdfs://。。。")让filteredDf=peopleDataFrame。选择("名称"地址.州").Where("state='California')过滤器显示()filteredDf.registerEmptable"FilteredFastEmptable"过滤器让countAsDf=sqlContext.Sql"SELECT*FROM filteredFastEmptable where"让countOfRows=countAsDf.Count()printf"name='Bill'and State='California'=%d"countOfRows的行数这里提供了更多RDD、DataFrame和DStream API的示例。这些示例还包括Mobius应用程序中的HDFS、Cassandra、Event Hubs、Kafka、Hive和JDBC源。更多资源您可以阅读我们的GitHub存储库,我们欢迎您的贡献。有关Mobius的更多信息,请参阅2016年Spark峰会上的Mobius演讲幻灯片和视频。最后,Mobius为微软的几个基于.NET的Spark工作负载提供了支持。例如,Spark Summit 2016演讲(幻灯片、视频)涵盖了在Bing规模的工作负载中使用Spark所学到的经验教训。关于作者Kaarthik Sivashanmugam是微软共享数据平台团队的首席软件工程师。Kaarthik是Mobius项目的技术负责人。在加入共享数据团队之前,他曾在必应广告团队(Bing Ads)中使用Kafka、Storm和Elasticsearch构建了一个近乎实时的分析平台,并将其用于实现数据处理管道。此前,在微软,他参与了Azure中数据质量服务的开发,并为多个版本的sqlserver集成服务做出了贡献。推特:@kaarthikss免费试用Databricks。今天就开始吧