web-dev-qa-db-ja.com

Hadoopエコシステム全体がJavaで書かれているのはなぜですか?

ビッグデータ処理パイプラインとストレージを開発していると、多分Hadoopエコシステムの一部であるソフトウェアに出くわすでしょう。 Hadoop自体、Spark/Flink、HBase、Kafka、Accumuloなどです。

これらすべてが非常にうまく実装され、開発者のニーズに高速で高品質なソリューションを提供しています。それでも、特にビッグデータの使用パターンを念頭に置いて、大量のオブジェクトの割り当てと割り当て解除が発生します。 C++のようなガベージコレクションされていない言語を使用することはおそらく価値があります。

私が自分で見つけたもう1つの理由は、Javaアプリケーションがこのドメインで非常に人気がある理由です。分散型デプロイメントです。ビッグデータアプリケーションの重要な特徴の1つはサイズであり、単一のマシンです。JVMを使用すると、非常に単純なデプロイメントが可能になります(バイトコードをコピーするだけです)。しかし、これは本当に議論の余地がありますか?独自のクラスターを見ると、ハードウェアは非常に似ており、ほとんどの企業に当てはまると思います。マシンコードは、すべてのマシンに簡単に移動できる必要があります。

私個人的には、最大の理由はおそらくDRY(繰り返さないでください)です。それはJavaで始まり、ライブラリとフレームワークがそれに成長しました。非常にうまく機能し、わずかな利益を得るために、スタック全体を別のプログラミング言語で書き直すことに投資する気はありません。

多分あなたの誰かが私よりも深い洞察を持っていますか?

1
flowit

HadoopはNutchの問題を「修正」するために使用されていたため、元々はJavaで記述されていました。 Nutchは、Javaで作成されました。これは、どこでも実行できる書き込みソリューションであったためです。

C++と他の言語のどちらがより良い選択であったかについては、それは間違いなく議論の余地があります。現代のアーキテクチャーでは、JavaまたはC#のガベージコレクターをランダムな開発者の判断で信頼します。ほとんどのアプリケーションでは、通常のベストプラクティスを超えて、リソースの使用状況に深く関わる必要はありません。すべてのビットが重要であり、管理する必要があった初期のコンピューティングとは異なります。

ただし、ビッグデータは間違いなくそのアプローチの外れ値です。私は、JavaのガベージコレクションがJava)でコードを機能させる方法を理解している開発者に、C++の開発者がガベージコレクションをうまく行う方法を信頼するよりも信頼できるでしょう。

とは言っても、これはほとんど常にJavaとC#開発者がフレームワークに甘やかされてしまうことについての議論に入ります。C#開発者として、私は常にライブラリを作成してテストすることを望んでいます。自分でやろうとするよりも、専門家のチーム(または、大衆によって書かれ、テストされ、使用されているライブラリ)を使用します。手動でメモリを割り当てて管理する方法(Cで行うことができますが、学校からやっていない)を知る代わりC#ガベージコレクターがどのように機能するかを理解するだけで十分です。

7

私にとって、ガベージコレクションはDRY out memory-management codeの解決策です。これらすべてのmallocおよびfree呼び出しは、かなり体系的にガベージコレクションによって自動的に処理できます。確かにEdgeのケースはいくつかありますが、ガベージコレクションをアプリケーションの最も重要なボトルネックとしてプロファイルできない限り、C++のような手動のメモリ管理言語に切り替える必要がない理由はわかりません。特定の時点で、あなたはライブラリ/フレームワーク/システムが彼らが言うことを、適切に/効率的に行うことを信頼する必要があります。

ガベージコレクションシステムは、広範囲にわたって開発およびテストされています。私自身、メモリ管理に関する知識が乏しいので、特定のガベージコレクション戦略を数学的に証明した研究者と協力した専門家を信頼する方がいいと思います。開発者に「そうだと思います。ここでメモリを解放する必要があるからです。後でそれらのオブジェクトが必要になることはありません。」そして、彼らはすでにそれらをすでに解放したのを忘れていたので、必然的に後でそれらの同じオブジェクトの再割り当てを引き起こします。

たとえば、非常に具体的で詳細なメモリ管理を必要とするアプリケーションの非常にニッチなpartがある場合、それをマイクロサービスまたは小さなライブラリとして目的の言語で記述して、リンクすることはできませんあなたの第一言語に戻って?デスクトップライブラリの世界でそれが何と呼ばれているのかはわかりませんが、C++でコンパイルされたライブラリは、本当にJavaを介して呼び出すことができます。

しかし、(私の知る限り)Hadoopはまだそれを行っていないため、メモリ管理は実際にはされていないこのエコシステムの問題だと思います。

0
Chris Cirefice

旧バージョンのHadoop、つまりHadoopバージョン1.0では、ビッグデータに関連するすべての操作がJavaで記述されている必要があるため、Javaは、世界で最も安全な言語。

0
Ishan Shah