分布式处理架构,hadoop是否支持.NET开发?自己写架构难度多大?

秋的红果实 2017-11-01 09:45:27
应用场合:主要是处理大数据(如概率分析,预测);使用多个普通实体PC搭建工作环境,而不是用互联网,不考虑类似A*zure等现成的收费产品

现有知识:对分布式只停留在理论了解阶段,只了解到如电商平台,接收客户端请求,付款,结算等都是由独立服务器去完成,各个服务器之间相互通讯,只停留在这个阶段。

最近探究:找到了hadoop这个框架(官网),了解了一点点,但很模糊,感觉很乱。

我的问题:
1、hadoop是不是支持.NET开发?
我的猜想是,Hadoop是用Java写的,运行在jre上,处理了分布式服务器间互相通讯、任务分配等问题,.NET开发的程序可以运行在其上面,不知道是不是这样?

2、不用Hadoop等框架,纯粹自己写分布式处理程序,难度多大,需要哪些知识。主要是考虑到自己的东西最灵活。

3、推荐下相关的权威书籍

4、无论是用hadoo还是自己写框架,环境中实体pc要用什么操作系统,win10这些行吗?

因为是开始探索,让弯路尽量少点,真诚求教,望不吝赐教。
...全文
1074 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2017-11-03
  • 打赏
  • 举报
回复
感谢大家的回复! 现在基本找到方向了。hadoop好像倒是有.NET 的api,见过不少国外资料,但我还是决定自己写。 暂时不结帖,希望收集更多的资料。
  • 打赏
  • 举报
回复
看你这描述就是数据仓库,数据挖掘就行了……
  • 打赏
  • 举报
回复
https://www.nuget.org/packages/Hadoop.Client/ https://www.nuget.org/packages/Hive.Sharp.Lib/ 一个最后更新日期2013年,一个最后更新日期2011年,这多尴尬……
peng2739956 2017-11-02
  • 打赏
  • 举报
回复
而且要实现高可用,并不一定非得用到hadoop. 而且 hadoop虽然强大,但是不能乱用,因为有些时候,你会发现hadoop 它并是你最完美的解决方案。经验之谈
john_QQ:2335298917 2017-11-02
  • 打赏
  • 举报
回复
hadoop主要用于非实时大数据处理,spark用于大数据快速处理,spark可以使用hdaoop的HDFS存储数据,大规模的数据可以分散在各台PC上,关于如何存储,可以参考相关的书籍。hadoop和spark生产环境主要部署在 linux平台,windows还是不要想了。.net和hadoop的互操作没见过。hadoop和spark主要运行在java虚拟机上。所以你想想让.net和hadoop互操作的难度。 如果要自己编写分布式运算也不是不可以,就是有点复杂,涉及到数据存储、工作分配、结果收集、容错等等方方面面,当然,如果肯投入,也不是不可行。
peng2739956 2017-11-02
  • 打赏
  • 举报
回复
说白了就是一个 大数据的持久化集群的策略, 那么你可以去了解下 quartz.net 这个玩意。 而且大数据一般现在除了用分布式的框架来编写之外,其他都是用硬件来解决了,比如服务器的负载啦,CDN啦,云存储服务啦,这些玩意,如果在不考虑程序是否有大并发的情况下。集群这个东西,我都觉得没必要加进去
秋的红果实 2017-11-02
  • 打赏
  • 举报
回复
每个Worker要装相同的处理程序吗?大数据(如10T文本)要放到一个单独的服务器吗?
秋的红果实 2017-11-02
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
[quote=引用 楼主 From_TaiWan 的回复:] 2、不用Hadoop等框架,纯粹自己写分布式处理程序,难度多大,需要哪些知识。主要是考虑到自己的东西最灵活。
这就是普通的网络集群通讯软件,有点经验就能当作简单的“abc”程序设计。[/quote]大侠说仔细点好吗?主要是解决问题的思路
  • 打赏
  • 举报
回复
简单来说一下基本功能吧,先不考虑“优化”问题,基于简单直接的策略来设计: 1. 首先要有一个 Master 服务器,用来作为所有其它主机(包括远程内网pc机)的服务器,管理所有 Worker 服务器的登入。 2. Worker 把一个任务(形式上可以使用 json 形式自定义信令内容格式)发给Master。Master 发给所有的 Worker,并且等待有哪一个 Worker 来“抢”任务。 3. 当某一个 Worker 首先来抢任务之后,Mater 最终确认由这个 Worker 处理这个任务。 4. 当 Worker 执行完毕任务之后,把结果发给 Master,Master 把结果转发给最初发起任务的 Worker。 这里,因为所有的 Worker 都连到 Mater 作为中转,不需要相互之间点对点连接,所以可以把不同局域网里的各种主机联系起来。例如你在上海有10台主机、北京有20台、乌鲁木齐5台,公网上有10台,它们都能集成进一个分布式业务计算平台。你可以扩展一下基本的协议,用多台 Master 来应付单点的风险。
  • 打赏
  • 举报
回复
引用 楼主 From_TaiWan 的回复:
2、不用Hadoop等框架,纯粹自己写分布式处理程序,难度多大,需要哪些知识。主要是考虑到自己的东西最灵活。
这就是普通的网络集群通讯软件,有点经验就能当作简单的“abc”程序设计。
  • 打赏
  • 举报
回复
又没有上万台服务器,自己写分布式调度程序(不超过200行c#代码)岂不是更好?
闭包客 2017-11-02
  • 打赏
  • 举报
回复
引用 8 楼 From_TaiWan 的回复:
[quote=引用 6 楼 closurer 的回复:] 自己写框架的难度,要看你用这个框架来做什么。技术选型也是。 Hadoop 被很多人用在大数据项目,但并不是大数据就一定要用 Hadoop 要看你的需求——概率分析、预测,有什么要解决的具体问题,再决定技术的选型。
还有运算,统计等多方面,我需要一个“根本”的平台。这个和具体业务有关吗?那么就概率分析这块,需要从哪里入手[/quote] 概率分析好像是需要一些 BI 的产品啊。
秋的红果实 2017-11-02
  • 打赏
  • 举报
回复
引用 6 楼 closurer 的回复:
自己写框架的难度,要看你用这个框架来做什么。技术选型也是。 Hadoop 被很多人用在大数据项目,但并不是大数据就一定要用 Hadoop 要看你的需求——概率分析、预测,有什么要解决的具体问题,再决定技术的选型。
还有运算,统计等多方面,我需要一个“根本”的平台。这个和具体业务有关吗?那么就概率分析这块,需要从哪里入手
4qw 2017-11-02
  • 打赏
  • 举报
回复
尽量在Linux环境使用吧,因为所有相关配套的组件都适合Linux,是否适合Windows就不清楚了,比如hive,是否支持Windows,说不准... 如果非要在Windows环境,可以试着安装双系统,一个windodws,一个Linux,同时运行;或者在windows上安装虚拟机,虚拟机运行了Linux系统... 总之,windows不建议...
4qw 2017-11-02
  • 打赏
  • 举报
回复
就是安装hive 时就会配置使用hadoop集群的数据,帮你在内部配置好了;安装完成后使用,只需要使用hive就可以了,就当没有hadoop,此时相当于一个黑盒...
4qw 2017-11-02
  • 打赏
  • 举报
回复
引用 22 楼 From_TaiWan 的回复:
[quote=引用 21 楼 sunsj236688 的回复:] 而hive语句的调用可以在linux环境使用命令进行调用,只要.net能够远程访问Linux服务器,远程调用服务器命令,应该就可以了吧
这句不太懂,是不是可以这样理解: hadoop是运行在Linux服务器上的(必须吗?),通过hadoop自己的命令将hive语句提交给hadoo执行。是不是这么理解? [/quote] hive命令是对Hadoop类似一种壳的包装,就是套了层外壳,使用hive自带命令就可以间接操作Hadoop的数据,不需要用hadoop的命令了,你查下相关内容就知道了; hadoop可以在Windows进行集群布置,不过都要安装cygwin;这是一个链接介绍:http://www.cnblogs.com/liudmblog/p/3922994.html; 不过尽量部署在Linux;windows环境部署生产环境毕竟不专业...
wanghui0380 2017-11-02
  • 打赏
  • 举报
回复
这个可以这么看,你台装在linux下的oracle数据库,你认为你net程序员有没有办法对接上去,我们说当然可以对接上去 Hadoop For .NET SDK, HDInsight 这个比较坑,又是Azure,微软这个围绕着Azure的策略,跟当初围绕着什么域服务器的策略一样,自捆手脚啊
秋的红果实 2017-11-02
  • 打赏
  • 举报
回复
引用 21 楼 sunsj236688 的回复:
而hive语句的调用可以在linux环境使用命令进行调用,只要.net能够远程访问Linux服务器,远程调用服务器命令,应该就可以了吧
这句不太懂,是不是可以这样理解: hadoop是运行在Linux服务器上的(必须吗?),通过hadoop自己的命令将hive语句提交给hadoo执行。是不是这么理解?
4qw 2017-11-02
  • 打赏
  • 举报
回复
至于.net调用hadoop,直接调用好像是不行的,不过可以绕着走; 如果你说的概率分析等涉及到算法一类的功能可以用sql的方式处理数据,就可以使用hive,hive是一种类sql的组件,使用起来就像操作数据库一样, 数据存储 在hadoop,依托于hadoop环境;即可以在hive平台上使用类SQL的语句来操作hadoo上的数据, 而hive语句的调用可以在linux环境使用命令进行调用,只要.net能够远程访问Linux服务器,远程调用服务器命令,应该就可以了吧
4qw 2017-11-02
  • 打赏
  • 举报
回复
看数据量的大小,如果确实很大的数据,就使用hadoop存储计算,如果只是数据的来源来自多台pc机,可以让这些pc机的数据存储到一起,比如kafka,然后客户端读取kafka的数据,在客户端进行计算..
加载更多回复(7)
RethinkDB 设计用来存储 JSON 文档的分布式数据库,可通过简单操作实现多机分布式存储。支持表的联合和分组查询。什么是RethinkDB?RethinkDB 是从头打造的第一个开源、可扩展的JSON数据库,用于搭建实时网页。全新的访问模型颠覆了传统的数据库结构:开发者只需告诉RethinkDB,实时连 续地将查询更新结果推送到应用就可以了,不用每次都去poll一遍。RethinkDB的实时推送结构为搭建可扩展实时应用节省了大量时间精力。除了为实时应用提供了全新的设计之外,RethinkDB 还提供了一种灵活的查询语言、直观的操作和监控API,安装学习起来也非常容易。你可以查看这篇 Advancing the realtime web 得到更多RethinkDB计划的技术细节。什么时候RethinkDB是一个好的选择?当你的应用很大程度上有赖于数据的实时反馈时,RethinkDB 就会成为一个很棒的选择。“查询-响应”式的数据库访问模型在web上的确很有用,它可以直接映射到HTTP的“请求-响应”。而现代应用则需要将数据直接实时地传送到客户端。能够最大化得益于RethinkDB实时推送架构的例子包括:协作网站和移动应用数据流分析应用多人在线游戏实时交易场所设备联机举个例子:在协作设计一个app的时候,其中一个用户改变了某个按钮的位置,服务器就必须在第一时间通知所有在完成同一项目的其他用户。网页浏览器 能够通过WebSockets和http持久连接来支持这一功能,但数据库系统要迎合实时需求仍然是一个大的工程难题。而RethinkDB作为第一个开 源、可扩展的数据库,就是特别为实时推送数据到应用而设计的。哪些人在用 RethinkDB?RethinkDB 的用户包括上百个科技创业公司、咨询工作室和世界五百强企业。这里是其中的一些:Jive Software 和 Mediafly 使用RethinkDB搭建强大的响应式网页和移动应用Pristine.io 和 Narrative Clip 使用RethinkDB搭建用于设备连接的云架构Platzi 和 Workshape.io 使用RethinkDB进行实时分析CMUNE 和 NodeCraft 使用RethinkDB构建大规模可扩展多人游戏RethinkDB 拥有超过十万开发者的活跃社区和上百个来自世界各地的代码贡献者。RethinkDB是基于现有技术的吗?高效实现实时推送架构需要重新设计绝大部分的数据库成分,包括查询执行引擎、分布式系统、超高速缓存子系统和存储引擎。因为架构影响到每一个数据库 组成部分,RethinkDB不得不从C 开始一步步起来。RethinkDB 是由数据库专家组成的团队花了五年时间做出来的,还得到了来自世界各地上百个代码贡献者的帮助。RethinkDB和realtime sync不同在哪里?和Firebase, PubNub 或者Pusher 这类实时同步API相比,RethinkDB主要不同在以下三个方面:首先,实时同步API是云服务,而RethinkDB 是开源项目。RethinkDB也有云端,可以通过我们的合作伙伴 Compose.io 和 Amazon AWS获得。它还可以部署在你自己的架构中,没有任何限制。其次,同步实时API只局限于同步文档,而RethinkDB是一个有着更普遍应用范围的数据库系统。 在RethinkDB中你可以运行任意query,包括table joins, subqueries, geospatial queries, aggregation, 还有map-reduce。实时同步服务有更多查询功能上的限制。最后,实时同步API的设计是直接从浏览器访问。这使得基本的app能够快速地跑起来,然而一旦app扩展了,灵活性就会受到限制。 RethinkDB的设计是从应用服务器进行访问,这一点上更像是传统的数据库。可能会要多花一点设置代码,但拥有足够的灵活性去适应应用的成熟。RethinkDB和MongoDB又不同在哪里?RethinkDB所基于的架构和MongoDB非常不同。开发者只需告诉RethinkDB,实时连续地将查询更新结果推送到应用就可以了,不用 每次都去poll一遍。你同样可以在RethinkDB上用传统的“查询-响应”范式来书应用。然后在你开始为app添加实时功能时再去订阅实时数据 流。举个例子,这是你让RethinkDB查询一个文件时的命令:r.table('users').get('coffeemug').run()然后这是你从RethinkDB订阅更新流时用到的语句,在任何时候文档发生了变化就会推送:r.table('users').get('coffeemug').changes().run()RethinkDB的实时架构可以和MongoDB的oplog相提并论,但前者提供了更高层次的抽象。RethinkDB的数据流与查询计算引擎无缝整合,并允许你订阅查询结果的变化,而不仅仅是把数据复制过来。这种架构大幅度地减少了搭建实时app所需的时间和精力。除了实时推送架构,RethinkDB 还有许多胜过 MongoDB的地方:一种高级的查询语言,能够支持table joins, subqueries 和大规模并行式分布计算。融合了查询语言的操作和监控API,大幅度降低了RethinkDB扩展的难度。简洁美观的UI 易于复制转发,拥有在线文档支持和查询语言建议。可以看看这篇 technical comparison of RethinkDB and MongoDB 里面的评论比较中立一些。想听听个人观点的,请看@coffeemug 的what makes RethinkDB different.什么时候RethinkDB是一个不好的选择?当你需要用到完整ACID支持或者更强大的架构实施,RethinkDB就不大好用了。在这种情况下你最好用一些传统的MySQL或者PostgreSQL数据库。如果你需要做深度、密集型计算分析的话,你最好用Hadoop或者类似于Verticaa的面向列的存储工具。在某些情况下RethinkDB会在一定程度上牺牲书可用性(write availability)来保证数据一致性(data consistency)。如果高要求的书可用性对你来讲很重要,那你也不要纠结了,像Riak这样的Dynamo式系统可能更适合你。想要更多地学习RethinkDB?阅读 ten-minute guide 开始学习RethinkDB。对于熟悉分布式系统的程序员可以直接阅读 architecture overview 。走捷径用 cookbook,你可以看到许多常用的 RethinkDB查询例子。 标签:分布式数据库

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧