我和我的团队正在开发一个利用Flink的应用程序。数据将使用计算量大的数值算法进行处理。为了尽可能地优化它,我想用C/C++而不是用Java编写这个算法。
问题是:在Flink中可以使用C/C++代码吗?或者把它封装到Java库中?
发布于 2016-12-07 09:10:32
我从来没有特别测试过这个案子。通常,您可以使用JNI ()使用来自Java的本机代码。
这样做的目的是让Java外观公开您的本机代码,并在用Java (或其他JVM语言,如Scala)中的Flink定义的计算图中使用这些方法。您必须使Java和本机库都可以在所有涉及的节点上使用,才能完成这项工作。如果您有一个Hadoop集群,您可以利用纱线将文件随作业一起传送(docs 这里,请参阅--yarn-ship CLI选项)。
我建议您以增量的方式测试这个函数,并公开一个非常小的本机函数。此外,在性能方面不要低估Java的能力:有了一些深思熟虑的编程并利用了JIT和其他运行时优化,长时间运行的流程可以获得比具有非托管内存的类似本机代码更好的性能。
请记住,当然,使用本机代码意味着将代码的可移植性限制在编译库的平台上。
https://stackoverflow.com/questions/40906516
复制相似问题