2

问题与 C 中 hdfs 客户端的设计和实现有关。libhdfs 页面http://hadoop.apache.org/docs/r1.0.3/libhdfs.html提到客户端使用 JNI 接口。谁能解释为什么 C 客户端使用 JNI。客户端需要做的就是在运行在datanode和namenode上的java程序中调用一个远程方法,它可以通过以datanode期望的方式序列化方法调用来实现。将 JNI 用于如此琐碎的事情是令人困惑的。

4

1 回答 1

1

HDFS 完全用 Java 实现,并使用 Java 语言和 API 的几个特性来提高性能并易于编程。Hadoop RPC 协议使用起来非常简单,因为它可以在这里。简单性来自于 Hadoop 使用Proxy 类来拦截调用,并与Writable接口一起将远程过程调用序列化到服务器端;轮到它打开包装并拨打电话。所以该协议在某种程度上依赖于Java。

另一方面,使用 JNI 开发 C 语言可以更轻松、更快速地实现和重用 Java 代码。而且更不容易出错,因为您不必处理诸如字节序或模仿 Java 行为之类的事情。

有一个使用Apache Avro的运动,它可以更容易地与其他语言绑定。到目前为止,它似乎处于搁置状态。

于 2012-09-25T12:56:53.753 回答