sql >> データベース >  >> NoSQL >> HBase

Hadoopの制限、Hadoopの欠点を解決する方法

    Hadoopの機能について説明しました 以前のHadoopチュートリアルで。次に、Hadoopの制限について説明します。 ApacheHadoopフレームワークにはさまざまな欠点があります。

    たとえば、スモールファイルの問題、処理が遅い、バッチ処理のみ、レイテンシ、セキュリティの問題、脆弱性、キャッシュなしなど

    Hadoopのこれらすべての制限については、このHadoopチュートリアルで詳しく説明します。

    Hadoopとは何ですか?

    Apache Hadoop は、大量のデータセットの分散ストレージと処理のためのオープンソースソフトウェアフレームワークです。オープンソースとは、自由に利用でき、要件に応じてソースコードを変更できることを意味します。

    Apache Hadoopを使用すると、数千のノードを持つシステムでアプリケーションを実行することもできます。分散ファイルシステムは、ノード間の高速データ転送速度を提供します。

    また、ノードに障害が発生した場合でもシステムが動作を継続できるようにします。 Hadoopの主な機能は次のとおりです。

    • Apache Hadoopでは、データのコピーが多いためにマシンに障害が発生しても、データを利用できます。したがって、いずれかのマシンがクラッシュした場合、別のパスからデータにアクセスできます。
    • ノードに新しいハードウェアを簡単に追加できるため、ApacheHadoopはスケーラブルです。
    • デフォルトでは、各ブロックの3つのレプリカがクラスター全体に保存されるため、Hadoopはフォールトトレラント性が高くなっています。そのため、クラスター内のいずれかのノードがダウンした場合でも、そのノードのデータを他のノードから簡単に復元できます。
    • Apache Hadoopは、それほど高価ではないコモディティハードウェアのクラスター上で実行されます。
    • Apache Hadoopでは、クラスター上のデータのレプリケーションによるハードウェア障害にもかかわらず、データはクラスターに確実に保存されます。

    Hadoopはビッグデータの最も強力なツールですが、さまざまな制限があります。 Hadoopの制限により、ApacheSparkとApacheFlinkが登場しました。

    Hadoopの制限

    ApacheHadoopのさまざまな制限とその解決策を以下に示します-

    a。小さなファイルに関する問題

    Hadoopの主な問題は、小さなデータには適していないことです。 HDFS 大容量設計のため、smallのランダム読み取りをサポートする機能がありません。

    小さいファイルはHDFSブロックサイズ(デフォルトは128MB)よりも小さいです。これらの膨大な数の小さなファイルを保存している場合、HDFSはこれらの多くの小さなファイルを処理できません。

    HDFSは、多数の小さなファイルではなく、少数の大きなファイルを処理して大きなデータセットを格納するように設計されているためです。小さなファイルがたくさんある場合、NameNodeはHDFSの名前空間を格納するため、オーバーロードされます。

    解決策:

    小さいファイルをマージして大きいファイルを作成し、大きいファイルをHDFSにコピーするだけです。

    Hadoopアーカイブ (HARファイル)は、たくさんの小さなファイルの問題を扱います。 Hadoop Archivesは、HDFSの上に階層化されたファイルシステムを構築することで機能します。

    ヘルプHadoopアーカイブコマンドを使用すると、HARファイルが作成されます。これにより、MapReduceジョブが実行され、アーカイブされているファイルが少数のHDFSファイルにパックされます。 HARを介したファイルの読み取りは、HDFSを介した読み取りよりも効率的ではありません。

    各HARファイルへのアクセスには2つのインデックスファイルの読み取りとデータファイルの読み取りが必要なため、処理速度が低下します。

    シーケンスファイルは、小さなファイルの問題も克服します。ここでは、ファイル名をキーとして使用し、ファイルの内容を値として使用します。

    ファイル用のプログラム(100 KB)を作成することで、それらを1つのシーケンスファイルに入れて、シーケンスファイルを操作するストリーミング方式で処理できます。

    シーケンスファイルは分割可能であるため、HadoopのMapReduceはシーケンスファイルをチャンクに分割し、各チャンクを個別に操作できます。

    Hbaseにファイルを保存することで、小さなファイルの問題を克服できます。実際には、何百万もの小さなファイルをHBaseに保存するのではなく、ファイルのバイナリコンテンツをセルに追加します。

    b。処理速度が遅い

    MapReduceは大量のデータを処理します。 Hadoopでは、MapReduceは処理をフェーズに分割することで機能します:マップ および削減 。そのため、MapReduceはこれらのタスクを実行するのに多くの時間を必要とするため、レイテンシーが増加します。したがって、処理速度が低下します。

    解決策:

    データのメモリ内処理により、ApacheSparkはこの問題を克服します。インメモリ処理の場合と同様に、データ/プロセスをディスクに出し入れするのに時間がかからないため、処理が高速になります。

    Apache Sparkは、メモリ内のすべてを処理するため、MapReduceと比較して100倍高速です。

    Flinkもこの問題を克服できます。 Flinkは、ストリーミングアーキテクチャにより、Sparkよりも高速に処理されます。

    c。バッチ処理のみのサポート

    Hadoopはバッチ処理のみをサポートしており、データのストリーミングには適していません。したがって、全体的なパフォーマンスは低下します。 MapReduceフレームワークは、Hadoopクラスターのメモリを最大限に活用しません。

    解決策

    Apache Sparkは、ストリーム処理をサポートしているため、この問題を解決します。ただし、Sparkストリーム処理は、マイクロバッチ処理を使用するため、Flinkほど効率的ではありません。 Apache Flinkは、ストリーミングとバッチ処理に単一のランタイムを提供するため、全体的なパフォーマンスが向上します。

    d。リアルタイム処理なし

    Apache Hadoopは、バッチ処理フレームワークです。これは、入力に大量のデータを取り、それを処理して結果を生成することを意味します。

    バッチ処理は、大量のデータを処理するのに非常に効率的ですが、処理されるデータのサイズとシステムの計算能力に依存します。出力が大幅に遅れる可能性があります。 ApacheHadoopはリアルタイム処理には適していません。

    解決策:

    Sparkはストリーム処理に適しています。蒸し処理は、連続的な入力/出力データを提供します。短時間でデータを処理します。

    Flinkは、ストリーミングとバッチ処理の両方に単一のランタイムを提供します。

    e。反復処理

    Apache Hadoopは、反復処理にはあまり効率的ではありません。 Hadoopは循環データフロー(つまり、前のステージの各出力が次のステージへの入力である一連のステージ)をサポートしていないためです。

    解決策:

    Sparkはこの問題を克服します。 ApacheSparkがディスクではなくRAMからデータにアクセスするため。これにより、同じデータセットに繰り返しアクセスする反復アルゴリズムのパフォーマンスが劇的に向上します。

    Apache Sparkでは、反復処理のために、各反復を個別にスケジュールして実行する必要があります。

    f。レイテンシ

    HadoopのMapReduceは、さまざまな形式、構造化された大量のデータをサポートしているため、低速です。 MapReduceでは、Mapはデータのセットを取得し、それを別のデータのセットに変換します。ここで、個々の要素はキーと値のペアに分解されます。

    Reduceはマップからの出力をとして取得し、Reduceはマップからの出力を入力として取得してさらに処理します。 MapReduceは、これらのタスクを実行するために多くの時間を必要とし、それによってレイテンシーが増加します。

    解決策:

    ApacheSparkはこの問題を減らすことができます。 Sparkはバッチシステムですが、RDDによって入力データの多くをメモリにキャッシュするため、比較的高速です。 Apache Flinkデータストリーミングは、低遅延と高スループットを実現します。

    g。使いやすさなし

    HadoopのMapReduce開発者は、操作ごとにコードを渡す必要があるため、作業が非常に困難になります。 Hadoopでは、MapReduceにはインタラクティブモードがありませんが、ハイブとピッグを追加すると、MapReduceの操作が少し簡単になります。

    解決策:

    Sparkにはインタラクティブモードがあるため、Sparkはこの問題を克服しました。そのため、開発者とユーザーは同様に、クエリやその他のアクティビティについて中間的なフィードバックを得ることができます。

    Sparkには多数の高レベルの演算子があるため、Sparkのプログラミングは簡単です。高レベルの演算子もあるため、ApacheFlinkを使用することもできます。

    h。セキュリティの問題

    Apache Hadoopは、複雑なアプリケーションの保守に挑戦しています。 Hadoopには、ストレージおよびネットワークレベルでの暗号化がありません。これは、主要な懸念事項です。 Apache Hadoopは、管理が難しいKerberos認証をサポートしています。

    解決策:

    ApacheSparkはセキュリティボーナスを提供します。 HDFSでApacheSparkを実行すると、HDFSACLとファイルレベルの権限を使用できます。

    i。自然に脆弱

    ApacheHadoopはJavaで書かれています。 Javaは最も人気のある言語であるため、サイバー犯罪者によって最も悪用されるJavaです。

    j。キャッシングなし

    ApacheHadoopはキャッシングには効率的ではありません。 MapReduceは、さらなる要件のために中間データをメモリにキャッシュできず、これによりHadoopのパフォーマンスが低下します。

    解決策:

    SparkとFlinkはこの問題を克服します。 SparkとFlinkは、全体的なパフォーマンスを向上させるさらなる反復のためにデータをメモリにキャッシュします。

    k。長いコード

    Apache Hadoopには、1、20,000行のコードがあります。行数はバグの数を生成します。したがって、プログラムの実行にはさらに時間がかかります。

    解決策:

    SparkとFlinkはScalaとJavaで書かれています。ただし、実装はScalaで行われるため、コードの行数はHadoopよりも少なくなります。したがって、プログラムの実行にかかる時間が短縮されます。

    結論

    Hadoopの制限の結果として、SparkとFlinkの必要性が浮上しました。したがって、システムを使いやすくして、大量のデータを操作できるようにします。

    Apache Sparkはデータのメモリ内処理を提供するため、処理速度が向上します。 Flinkは、バッチ処理だけでなくストリーミングにも単一のランタイムを提供するため、パフォーマンスが向上します。

    Sparkはセキュリティボーナスを提供します。したがって、Apache SparkやFlinkなどの他のビッグデータテクノロジーを使用することで、これらすべてのHadoopの制限を解決できます。

    Hadoopの他の制限を見つけた場合は、以下のセクションにコメントを残してお知らせください。


    1. SparkでRedis:タスクをシリアル化できません

    2. PHPがMongoDBドライバーを見つけることができません

    3. レプリカSetmongodocker-compose

    4. Debian9へのRedisのインストール