-
Notifications
You must be signed in to change notification settings - Fork 245
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
有没有考虑过先实现一下Apache Spark里的RDD,在此基础上实现分布式机器学习算法? #1
Comments
感谢你的建议,spark看上去很强大,我花时间研究一下。在Google待久了被内部的那套系统束缚住反而对开源界的好东西关注不足。 其实我在自己用go实现一个分布式任务调度系统,而且想在其上实现一套分布式文件存储和数据库,不过因为没多余时间所以进度及其缓慢。 让我花点时间研究一下再详细答复你。 |
恩,好,分布式调度系统,分布式文件系统,等,都是学术界研究了多年的东西,有一些成熟的开源项目或论文了,可以选择一个好的去实现。 例如,
可以重新实现轮子,但是不可以重新发明轮子 :) |
看了下Spark,很强大,但感觉弥勒佛不适合走这条路。针对这个项目,可以有三种发展模式:
和2相比1有下面的优势
总之Spark做分布式学习是很好的,但并不适合弥勒佛。这个项目刚刚起步,希望核心的东西还是逐步自我完善出来比较好,而不是照搬现有解决方案。否则未来over engineering可能会成为一个问题,而且一旦捆绑住想抽离就不容易了。 |
恩,你说的有道理,2相比3,完全没优势,不过我的意思也不是方案2,不是完整实现Spark,而是实现它论文里的RDD,这个是Spark的核心,比MapReduce 抽象程度高,表达力更强,性能也高。 我的重点关注的问题是,编程接口,即抽象工具。裸用MPI, socket之类的API来写分布式算法,太麻烦太容易出错了。就像设计一门新语言一样,编程范式是最重要的,性能什么的可以慢慢优化。 做一个分布式算法,我所了解的编程接口有:
你倾向于选择方案1,
是不是意味着,弥勒佛里的分布式机器学习算法,都是裸用 socket 或 RPC ?这样应该会太底层,代码量巨长吧。因为你没有提供高级的抽象工具。 我预想的编程接口(抛开调度系统,因为他们跟编程接口无关),有以下几个:
|
我在知乎上开了一个讨论贴子,写分布式机器学习算法,哪种编程接口比较好? |
这个看完,让我有点激动。我目前构建的系统是基于Mesos+Spark as service。实施中全部使用Docker,我本身是Docker commiter,所以没什么问题。但我要给国内客户提供MLS服务,所以想使用golang之类的匹配我的技术栈,不然就要去看scala了。目前项目有什么进展吗?如何用这个。 |
这个项目已经凉了么? |
我用Spark写过两个机器学习算法,Naive Bayes classifier, Random forest, Apache Spark 的 RDD 是一个比Map-reduce和MPI更好用的分布式框架,表达力也很强。
看样子你目前是想直接使用golang 的 channel 实现分布式机器学习算法?这样的话,跟直接用MPI差不多,太底层,写的代码会很罗嗦。
方便程度:Spark > Hadoop > MPI, 代码简洁度:Spark > Hadoop > MPI,限制程度:MapReduce > Spark > MPI,MPI是最自由的,写起来也是最麻烦的,所以任何分布式计算框架,都似乎是在抽象和性能之间进行折中。
只有用更高层的抽象工具,写机器学习算法才会更简洁。
对了,Apache Tez,也是一个DAG计算框架(跟Spark很类似,本质上都是DAG),你也可以看看。还有MSRA的 Dryad,等等。我个人觉得Spark的RDD平衡的更好,也有非常成熟的实现,就是Spark本身。
关于用 golang 实现 Spark的RDD,有一个项目在此 Gopark,不过不太活跃,但是可以联系作者,一起做形成合力,照目前这种活跃度,项目完工遥遥无期。。。。
The text was updated successfully, but these errors were encountered: