由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
CS版 - Hadoop居然是用Java写的,不理解 (转载)
相关主题
JAVA 如何调用现成的dll安卓速度流畅的关键在哪儿?
CS专业的不懂C语言??Sun当年设计Java的败笔
女生,30岁转CS合适吗?Java的performance
各位de过的人生中最可怕的bug是什么?c++程序员不要把头埋在沙子里了
Can JVM directly run on hardware?自己看c++是不是夕阳语言
help!!请教若干问题
语言坑:有没有Java和C#两边都用的大部份 design pattern 是不需要的
Android Ported to C#c++这种语言注定了会越做越小
相关话题的讨论汇总
话题: java话题: c++话题: hadoop话题: 优化话题: script
进入CS版参与讨论
1 (共1页)
t********l
发帖数: 106
1
【 以下文字转载自 Programming 讨论区 】
发信人: tianyagirl (呢喃), 信区: Programming
标 题: Hadoop居然是用Java写的,不理解
发信站: BBS 未名空间站 (Tue Jul 8 16:11:10 2008)
有人说,当今的趋势Java主要是应用性开发,C++主要是系统级开发。Java虽然稳定跨
平台,但是速度慢。为什么hadoop这样很系统级的要用Java不用c++?
w***g
发帖数: 5958
2
我也觉得很不爽。搞系统的弄了那么多年kqueue,epoll,难道都白弄了?
事实上hadoop的overhead很大的,只有数据极大的情况下才划算。

【在 t********l 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: tianyagirl (呢喃), 信区: Programming
: 标 题: Hadoop居然是用Java写的,不理解
: 发信站: BBS 未名空间站 (Tue Jul 8 16:11:10 2008)
: 有人说,当今的趋势Java主要是应用性开发,C++主要是系统级开发。Java虽然稳定跨
: 平台,但是速度慢。为什么hadoop这样很系统级的要用Java不用c++?

t******a
发帖数: 1200
3
1. Java 启动慢,但 JIT 后实际程序运行并不慢
2. 大部分 Internet sized distributed tasks 瓶颈都不在 task coordinator
上, 而是在 IO 上.
3. 什么是系统开发? *nix 下一堆东西是 shell script 写的. Web Dev 领域
Python, PHP, Ruby 等解释性语言才是主流,这些比 Java 更慢,照样没事。
因为大部分瓶颈根本不在这里. 就算你把系统级开发限制为 OS kernel dev
的话,那主要语言是 C 而不是 C++. C++ 现在最主要的应用领域恐怕是
Gaming Industry & Telecom Industry, 以前 UI Framework 是 C++ 的
强项,但现在用 C++ 做 UI 的人应该不多了.

【在 t********l 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: tianyagirl (呢喃), 信区: Programming
: 标 题: Hadoop居然是用Java写的,不理解
: 发信站: BBS 未名空间站 (Tue Jul 8 16:11:10 2008)
: 有人说,当今的趋势Java主要是应用性开发,C++主要是系统级开发。Java虽然稳定跨
: 平台,但是速度慢。为什么hadoop这样很系统级的要用Java不用c++?

w***g
发帖数: 5958
4
JIT本身其实并不是问题。在某些情况下java甚至能比C快,因为JIT可以进行动态优化
。但是hadoop的问题不在这儿。Hadoop的大部分工作是网络传输,磁盘读写,文件扫描
,而且要求高吞吐量。用标准java库做这些开销是很大的(比如new xxxStream (new
xxxStream (new xxxStream)))。对比一下OS领域关于消除double buffering的那些论
文,可以看出用java明显就没有走对方向。
我同意script很好,在性能不是问题的前提下。但是现在的问题是性能已经被忽略的太
多了。像Hadoop这种大规模计算的问题,明显是需要高性能的。举个例子吧,如果用
HadoopStreaming+python在一个十台机器的cluster上运行一个任务,保守点估计用C实
现同样的功能性能提高10倍,那么用C写根本就不需要cluster。
Java这东西做做网站,用户界面还可以,但是Java的bloatware的本质决定了它不能胜
任高性能计算。

【在 t******a 的大作中提到】
: 1. Java 启动慢,但 JIT 后实际程序运行并不慢
: 2. 大部分 Internet sized distributed tasks 瓶颈都不在 task coordinator
: 上, 而是在 IO 上.
: 3. 什么是系统开发? *nix 下一堆东西是 shell script 写的. Web Dev 领域
: Python, PHP, Ruby 等解释性语言才是主流,这些比 Java 更慢,照样没事。
: 因为大部分瓶颈根本不在这里. 就算你把系统级开发限制为 OS kernel dev
: 的话,那主要语言是 C 而不是 C++. C++ 现在最主要的应用领域恐怕是
: Gaming Industry & Telecom Industry, 以前 UI Framework 是 C++ 的
: 强项,但现在用 C++ 做 UI 的人应该不多了.

t********l
发帖数: 106
5
telecom为什么用c++?
难道以后c++就要退出编程舞台了?底层用C,上面用java/c#,最外边用script?

【在 t******a 的大作中提到】
: 1. Java 启动慢,但 JIT 后实际程序运行并不慢
: 2. 大部分 Internet sized distributed tasks 瓶颈都不在 task coordinator
: 上, 而是在 IO 上.
: 3. 什么是系统开发? *nix 下一堆东西是 shell script 写的. Web Dev 领域
: Python, PHP, Ruby 等解释性语言才是主流,这些比 Java 更慢,照样没事。
: 因为大部分瓶颈根本不在这里. 就算你把系统级开发限制为 OS kernel dev
: 的话,那主要语言是 C 而不是 C++. C++ 现在最主要的应用领域恐怕是
: Gaming Industry & Telecom Industry, 以前 UI Framework 是 C++ 的
: 强项,但现在用 C++ 做 UI 的人应该不多了.

w***g
发帖数: 5958
6
java/c#和script是在同一个层次上的。现在比较多的有下面两种做法
1. 底层用C/C++,接口用C,外面用script。
2. 底层用java, 外面用java。
事实上搞java的那批人逗得很,什么都要用java实现。最好哪天操作系统也用java写了
他们才高兴。(事实上现在有java操作系统,可惜实在没法用。)你去网上找java的
project好了,类似"Jwheel is a java implementation of the Wheel"这样的东西不
计其数。

【在 t********l 的大作中提到】
: telecom为什么用c++?
: 难道以后c++就要退出编程舞台了?底层用C,上面用java/c#,最外边用script?

t******a
发帖数: 1200
7

1. 你知道什么是 double buffering 么? 你看过 Java Stream 的实现么? 你
Benchmark 过Java IO Library vs C library 么 ? 不要整天拿个你不懂的名词
跑火车。 Java 做 serialization时因为 type saftety 原因不支持类似
readFoo( &myfoo, sizeof(Foo)) 的方法,但单纯的 read, write 是不慢
的, 尤其是 disk/network io.
Premature optimization is the root of all evil. - Don Knuth
Rule 1: Don't optimize your code. Rule 2 : Still don't optimize your code
用 C 实现相同的功能速度不可能是 Java 的十倍。按照我们的经验,Java 比 C
一般情况下慢 20% - 100% 左右。如果有特别 computational bootleneck,
用 JNI 写一个 Native implementat

【在 w***g 的大作中提到】
: JIT本身其实并不是问题。在某些情况下java甚至能比C快,因为JIT可以进行动态优化
: 。但是hadoop的问题不在这儿。Hadoop的大部分工作是网络传输,磁盘读写,文件扫描
: ,而且要求高吞吐量。用标准java库做这些开销是很大的(比如new xxxStream (new
: xxxStream (new xxxStream)))。对比一下OS领域关于消除double buffering的那些论
: 文,可以看出用java明显就没有走对方向。
: 我同意script很好,在性能不是问题的前提下。但是现在的问题是性能已经被忽略的太
: 多了。像Hadoop这种大规模计算的问题,明显是需要高性能的。举个例子吧,如果用
: HadoopStreaming+python在一个十台机器的cluster上运行一个任务,保守点估计用C实
: 现同样的功能性能提高10倍,那么用C写根本就不需要cluster。
: Java这东西做做网站,用户界面还可以,但是Java的bloatware的本质决定了它不能胜

t******a
发帖数: 1200
8

lol, 没听说过 JPython, JRuby, Groovy ? .Net 上也有一堆 interpreted script
语言的实现。发现你对 Script language 的了解和 Java/C# 一样有限。

【在 w***g 的大作中提到】
: java/c#和script是在同一个层次上的。现在比较多的有下面两种做法
: 1. 底层用C/C++,接口用C,外面用script。
: 2. 底层用java, 外面用java。
: 事实上搞java的那批人逗得很,什么都要用java实现。最好哪天操作系统也用java写了
: 他们才高兴。(事实上现在有java操作系统,可惜实在没法用。)你去网上找java的
: project好了,类似"Jwheel is a java implementation of the Wheel"这样的东西不
: 计其数。

t******a
发帖数: 1200
9
Telecom 用 C++ 是历史原因,Telecom 对 C++/CORBA 的历史投资强度和当年
银行界对 COBOL 的投资相比有过之而无不及。
C++ 是个好东西,起码在应用层大多数情况比 C 更合适。可惜 C++ 的 learning
curve 太陡了,调试起来也相对麻烦些。多数项目100%用 C++ 来做并不合算。
不过 C++ 至今依然是 Gaming Industry 的不二之选。
你去一些 Internet job website 用 C++ 做关键词搜索一下就能感觉到当今
社会对 C++ 的需求量了

【在 t********l 的大作中提到】
: telecom为什么用c++?
: 难道以后c++就要退出编程舞台了?底层用C,上面用java/c#,最外边用script?

d**n
发帖数: 198
10
grid is not a parallel machine
it is more for data intensive than for computation intensive.
a classical example is: compute the average of 10billion lines, each line
contains a number plus a long string.
Using a single machine, scanning the data itself taks forever.
Hadoop is a framework. You can write teh mapper/reducer in C++

【在 w***g 的大作中提到】
: JIT本身其实并不是问题。在某些情况下java甚至能比C快,因为JIT可以进行动态优化
: 。但是hadoop的问题不在这儿。Hadoop的大部分工作是网络传输,磁盘读写,文件扫描
: ,而且要求高吞吐量。用标准java库做这些开销是很大的(比如new xxxStream (new
: xxxStream (new xxxStream)))。对比一下OS领域关于消除double buffering的那些论
: 文,可以看出用java明显就没有走对方向。
: 我同意script很好,在性能不是问题的前提下。但是现在的问题是性能已经被忽略的太
: 多了。像Hadoop这种大规模计算的问题,明显是需要高性能的。举个例子吧,如果用
: HadoopStreaming+python在一个十台机器的cluster上运行一个任务,保守点估计用C实
: 现同样的功能性能提高10倍,那么用C写根本就不需要cluster。
: Java这东西做做网站,用户界面还可以,但是Java的bloatware的本质决定了它不能胜

相关主题
help!!安卓速度流畅的关键在哪儿?
语言坑:有没有Java和C#两边都用的Sun当年设计Java的败笔
Android Ported to C#Java的performance
进入CS版参与讨论
m*****r
发帖数: 130
11
java 慢也是分情况,其实很多时候程序是在等I/O bound的,还有是memory-bound的,
一旦分布式了,这个网络通讯代价就太大了,很多程序都是在等数据,内存的,硬盘的
,网络的。
另一方面cpu intensive的程序JVM其实动态优化做的很好,我做过矩阵相乘的
benchmark,弄成block相乘利用L2cache,c的程序必须编译-O3才能跟java1.5的相比。

【在 t********l 的大作中提到】
: telecom为什么用c++?
: 难道以后c++就要退出编程舞台了?底层用C,上面用java/c#,最外边用script?

D*******a
发帖数: 3688
12
c的可以用intel c++ compiler,针对cpu优化了比gcc快很多

【在 m*****r 的大作中提到】
: java 慢也是分情况,其实很多时候程序是在等I/O bound的,还有是memory-bound的,
: 一旦分布式了,这个网络通讯代价就太大了,很多程序都是在等数据,内存的,硬盘的
: ,网络的。
: 另一方面cpu intensive的程序JVM其实动态优化做的很好,我做过矩阵相乘的
: benchmark,弄成block相乘利用L2cache,c的程序必须编译-O3才能跟java1.5的相比。

c****r
发帖数: 185
13
The learning curve is due to the stupid design of the language itself.
If C++ could get rid of header files, macros, operator override, and
introduce packages, interfaces, lives would be much easier.

【在 t******a 的大作中提到】
: Telecom 用 C++ 是历史原因,Telecom 对 C++/CORBA 的历史投资强度和当年
: 银行界对 COBOL 的投资相比有过之而无不及。
: C++ 是个好东西,起码在应用层大多数情况比 C 更合适。可惜 C++ 的 learning
: curve 太陡了,调试起来也相对麻烦些。多数项目100%用 C++ 来做并不合算。
: 不过 C++ 至今依然是 Gaming Industry 的不二之选。
: 你去一些 Internet job website 用 C++ 做关键词搜索一下就能感觉到当今
: 社会对 C++ 的需求量了

d**n
发帖数: 198
14
many of C++ features make the code hard to debug.

【在 c****r 的大作中提到】
: The learning curve is due to the stupid design of the language itself.
: If C++ could get rid of header files, macros, operator override, and
: introduce packages, interfaces, lives would be much easier.

v******d
发帖数: 1322
15
their differeces are not only abt language, but also the implementation.
w***g
发帖数: 5958
16
1. 我说的double buffering指的是文件系统的buffer,跟graphics那个不是一回事。
我指的是sendfile(2)解决的那个问题。另外,hadoop内部处理的是一些块数据,并不
和stream模型对应。Serialization(对应C的printf/scanf)在这里也没有出现,除了
读写配置文件以外。C的low level I/O其实都是一些系统调用,在user level已经没什
么优化余地了。
2. 我不知道系统软件做优化有什么错的。真如你所说,搞系统的人都要哭死。
3. 说C的速度有java的10倍确实有点夸张。如果代码是一行一行对应的话,现在java在
某些情况下确实能和c一样快。但是java的编程风格跟c很不一样的。你见过在java中用
循环展开优化代码的吗事实上java的一个好处就是抽象程度比较好,不用考虑这些细
节问题,但是在性能上的损失也是不可挽回的。Java和C根本就是适合不同的问题,没
法直接比的。我的观点是像hadoop这样的文件系统如果用C实现性能会提高很多。
关于我在原帖中提出的那个Hadoop Streaming + Pytho

【在 t******a 的大作中提到】
: Telecom 用 C++ 是历史原因,Telecom 对 C++/CORBA 的历史投资强度和当年
: 银行界对 COBOL 的投资相比有过之而无不及。
: C++ 是个好东西,起码在应用层大多数情况比 C 更合适。可惜 C++ 的 learning
: curve 太陡了,调试起来也相对麻烦些。多数项目100%用 C++ 来做并不合算。
: 不过 C++ 至今依然是 Gaming Industry 的不二之选。
: 你去一些 Internet job website 用 C++ 做关键词搜索一下就能感觉到当今
: 社会对 C++ 的需求量了

t******a
发帖数: 1200
17
1. 你难道想说的是 Ephemeral Mapping? 这和 Double Buffering 差得也太远了些。
拜托你举一个 System 领域里对 double buffering 这个名词有不同解释的文章?
再说搞 Ephemeral Mapping 的优化得在 OS API 下面一层搞,应用层不管用 C 还
是 Java都没法控制的。你说的应用层多次复制问题,在 Java Steam 里并不存在,
因为 Java 里类似实现都是 copy-on-write 的. 虽然 Java Library 的设计者
有时候很傻,但这么明显的疏忽是不会有的。
2. 优化当然有用,但先得找到程序的瓶颈。而且一般得是优化算法,而不是在
算法固定的时候替换语言和编译器。Java -> C -> Assembly 这样的优化在
工程界有少量的使用,在学术界想用来发论文是不行的。而且这种优化在大多
数情况下是得不偿失的,不然 *nix 的 device drivers 就都被优化成
Assembly language 了.
3. Java 和 C 的用途的确不同,但我这里的观点是对于 Hadoop

【在 w***g 的大作中提到】
: 1. 我说的double buffering指的是文件系统的buffer,跟graphics那个不是一回事。
: 我指的是sendfile(2)解决的那个问题。另外,hadoop内部处理的是一些块数据,并不
: 和stream模型对应。Serialization(对应C的printf/scanf)在这里也没有出现,除了
: 读写配置文件以外。C的low level I/O其实都是一些系统调用,在user level已经没什
: 么优化余地了。
: 2. 我不知道系统软件做优化有什么错的。真如你所说,搞系统的人都要哭死。
: 3. 说C的速度有java的10倍确实有点夸张。如果代码是一行一行对应的话,现在java在
: 某些情况下确实能和c一样快。但是java的编程风格跟c很不一样的。你见过在java中用
: 循环展开优化代码的吗事实上java的一个好处就是抽象程度比较好,不用考虑这些细
: 节问题,但是在性能上的损失也是不可挽回的。Java和C根本就是适合不同的问题,没

t******a
发帖数: 1200
18
比较 C++/Java/Script language performance 的文章太多了,没必要找一篇
过时的而且有结论争议的文章来支持自己的观点。用这样的态度搞学术研究可不行;)
给你一天时间自己找更新一些的文章,很容易的。如果找不到的话我可以贴
一些链接.

【在 w***g 的大作中提到】
: 1. 我说的double buffering指的是文件系统的buffer,跟graphics那个不是一回事。
: 我指的是sendfile(2)解决的那个问题。另外,hadoop内部处理的是一些块数据,并不
: 和stream模型对应。Serialization(对应C的printf/scanf)在这里也没有出现,除了
: 读写配置文件以外。C的low level I/O其实都是一些系统调用,在user level已经没什
: 么优化余地了。
: 2. 我不知道系统软件做优化有什么错的。真如你所说,搞系统的人都要哭死。
: 3. 说C的速度有java的10倍确实有点夸张。如果代码是一行一行对应的话,现在java在
: 某些情况下确实能和c一样快。但是java的编程风格跟c很不一样的。你见过在java中用
: 循环展开优化代码的吗事实上java的一个好处就是抽象程度比较好,不用考虑这些细
: 节问题,但是在性能上的损失也是不可挽回的。Java和C根本就是适合不同的问题,没

w***g
发帖数: 5958
19
不是ephemeral mapping。或许叫zero-copy更合适。
另外,Hadoop是一个cluster软件,并不是Internet scale的。Hadoop那种1 head+n
worker的架构不可能达到Internet scale。至于算法优化,一个算法如果需要用
mapreduce实现的,那么基本上可以确定是O(N)复杂度的,O(N^2)也是不可接受的。
MapReduce之所以火起来是因为它把一些trivial的问题scale大了。

【在 t******a 的大作中提到】
: 1. 你难道想说的是 Ephemeral Mapping? 这和 Double Buffering 差得也太远了些。
: 拜托你举一个 System 领域里对 double buffering 这个名词有不同解释的文章?
: 再说搞 Ephemeral Mapping 的优化得在 OS API 下面一层搞,应用层不管用 C 还
: 是 Java都没法控制的。你说的应用层多次复制问题,在 Java Steam 里并不存在,
: 因为 Java 里类似实现都是 copy-on-write 的. 虽然 Java Library 的设计者
: 有时候很傻,但这么明显的疏忽是不会有的。
: 2. 优化当然有用,但先得找到程序的瓶颈。而且一般得是优化算法,而不是在
: 算法固定的时候替换语言和编译器。Java -> C -> Assembly 这样的优化在
: 工程界有少量的使用,在学术界想用来发论文是不行的。而且这种优化在大多
: 数情况下是得不偿失的,不然 *nix 的 device drivers 就都被优化成

w***g
发帖数: 5958
20
比较这个确实挺无聊的,我干脆把帖子删了。

【在 t******a 的大作中提到】
: 比较 C++/Java/Script language performance 的文章太多了,没必要找一篇
: 过时的而且有结论争议的文章来支持自己的观点。用这样的态度搞学术研究可不行;)
: 给你一天时间自己找更新一些的文章,很容易的。如果找不到的话我可以贴
: 一些链接.

d**n
发帖数: 198
21
what is the most complex map/reduce code you have written? what is the data
size?

【在 w***g 的大作中提到】
: 不是ephemeral mapping。或许叫zero-copy更合适。
: 另外,Hadoop是一个cluster软件,并不是Internet scale的。Hadoop那种1 head+n
: worker的架构不可能达到Internet scale。至于算法优化,一个算法如果需要用
: mapreduce实现的,那么基本上可以确定是O(N)复杂度的,O(N^2)也是不可接受的。
: MapReduce之所以火起来是因为它把一些trivial的问题scale大了。

w***g
发帖数: 5958
22
真不好意思我还没写过mapreduce code。我一直在关注hadoop是因为我们想用它来处理
一大批图片文件。一共有十来个TB吧,每个100KB的样子。很不幸的是hadoop基本上不
支持小文件。我们测试过hadoop upload的性能,上传小文件要达到1MB/s都困难,传完
那么多图片基本上就天荒地老了。
事实上我们希望弄一个支持小文件的storage,这样以后更多的文件来了直接存进去,
然后mapreduce,但是hadoop现在的状态还是没法用。如果您老有什么建议不妨讲讲,
要能帮我们解决了这个问题那就最好不过了。
我们自己能想到的无非就是把一个目录tar起来再放到hadoop上。但是那样处理起来比
较麻烦。我正在盼着hadoop实现类似的功能(HBASE?), 呵呵。

data

【在 d**n 的大作中提到】
: what is the most complex map/reduce code you have written? what is the data
: size?

1 (共1页)
进入CS版参与讨论
相关主题
c++这种语言注定了会越做越小Can JVM directly run on hardware?
Java 写的程序在server端也是在JVM上run吗?help!!
单机学习spark/hadoop的方案?语言坑:有没有Java和C#两边都用的
床铺上台, 将会使C++语言重新夺回霸主地位 (转载)Android Ported to C#
JAVA 如何调用现成的dll安卓速度流畅的关键在哪儿?
CS专业的不懂C语言??Sun当年设计Java的败笔
女生,30岁转CS合适吗?Java的performance
各位de过的人生中最可怕的bug是什么?c++程序员不要把头埋在沙子里了
相关话题的讨论汇总
话题: java话题: c++话题: hadoop话题: 优化话题: script