Apache Hadoop 3.3.6

Apache Hadoop 3.3.6は、Hadoop 3.3.xリリースブランチのアップデートです。

変更の概要

ユーザーは、リリースノートの全文を読むことを推奨します。このページでは、主な変更点の概要を説明します。

SBOMアーティファクト

このリリースから、HadoopはCycloneDX Mavenプラグインを使用してソフトウェア部品表(SBOM)を公開します。SBOMの詳細については、SBOMを参照してください。

HDFS RBF: RDBMSベースのトークンストレージのサポート

HDFSルーターベースフェデレーションは、MySQLへの委任トークンの保存をサポートするようになりました。HADOOP-18535これにより、元のZookeeperベースの実装よりもトークン操作のスループットが向上します。

新しいファイルシステムAPI

HADOOP-18671では、HDFS固有のAPIの多くをHadoop Commonに移動し、HDFSセマンティクスに依存する特定のアプリケーションを他のHadoop互換ファイルシステムで実行できるようにしました。

特に、recoverLease()とisFileClosed()はLeaseRecoverableインターフェースを通じて公開されます。一方、setSafeMode()はSafeModeインターフェースを通じて公開されます。

Azure ABFS: 重要なストリームプリフェッチの修正

abfsには重大なバグ修正HADOOP-18546があります。ABFS。abfsストリームのクローズ時に進行中の読み取りリストのパージを無効にします。

Hadoopリリース3.3.2以降のabfsコネクタのすべてのユーザーは、アップグレードするか、fs.azure.readaheadqueue.depth0に設定してプリフェッチを無効にする必要があります。

根本原因の分析、影響を受ける内容の詳細、および軽減策については、親JIRA HADOOP-18521ABFS ReadBufferManagerは同時HTTPリクエスト間でバッファを共有しますを参照してください。

ベクタードIO API

HADOOP-18103Hadoopでの高性能ベクタード読み取りAPI

PositionedReadableインターフェースに、ベクタードIO(Scatter/Gather IOとも呼ばれます)の操作が追加されました。

void readVectored(List<? extends FileRange> ranges, IntFunction<ByteBuffer> allocate)

リクエストされたすべての範囲が、指定されたバイトバッファに取得されます。これは非同期である可能性があり、並列である可能性があり、結果が順不同で届く可能性があります。

  1. デフォルトの実装では、一連のreadFully()呼び出しを使用するため、同等のパフォーマンスが得られます。
  2. ローカルファイルシステムは、readFully()よりも高いパフォーマンスの読み取りのためにJavaネイティブIO呼び出しを使用します。
  3. S3Aファイルシステムは、異なるスレッドで並列HTTP GETリクエストを発行します。

file://s3a://を通じた拡張されたApache ORCおよびApache Parquetクライアントのベンチマークでは、クエリパフォーマンスが大幅に向上しています。

詳細情報: * FsDataInputStream。 * HadoopベクタードIO:データがより速くなりました!Apachecon 2022の講演。

Mapreduce: Azure ABFSおよびgoogle GCS用のマニフェストコミッター

新しい中間マニフェストコミッターは、ディレクトリの名前を変更するのではなく、マニフェストファイルを使用して成功したタスク試行の作業をコミットします。ジョブコミットは、すべてのマニフェストを読み取り、宛先ディレクトリを作成(並列化)、およびファイルを再び並列で名前を変更することです。

これはAzure StorageとGoogle GCSの両方で高速かつ正確であり、従来のv1/v2ファイル出力コミッターの代わりに使用する必要があります。

また、HDFSで使用しても安全であり、v1コミッターよりも高速になるはずです。ただし、リスト操作と名前変更操作が大幅に遅くなるクラウドストレージ用に最適化されているため、メリットは小さくなる可能性があります。

詳細については、マニフェストコミッターのドキュメントを参照してください。

HDFS: 動的Datanode再構成

HDFS-16400、HDFS-16399、HDFS-16396、HDFS-16397、HDFS-16413、HDFS-16457。

多くのDatanode構成オプションは、datanodeを再起動しなくても変更できます。これにより、クラスタ全体のDatanode再起動なしでデプロイメント構成を調整できます。

動的に再構成可能な属性のリストについては、DataNode.javaを参照してください。

推移的なCVE修正

多くの依存関係が、最近のCVEに対処するためにアップグレードされました。CVEの多くは実際にはHadoopを通じて悪用可能ではなかったため、この作業のほとんどは単なるデューデリジェンスです。ただし、クラスパスにすべてのライブラリがあるアプリケーションは脆弱である可能性があり、アップグレードにより、セキュリティスキャナーが報告する誤検知の数も減らす必要があります。

すべての依存関係を最新バージョンにアップグレードできたわけではありません。これらの変更の一部は根本的に互換性がありません。特定のライブラリの状態について懸念がある場合は、Apache JIRAの課題追跡ツールを参照して、課題がファイルされているか、問題のライブラリについて議論が行われているか、パイプラインにすでに修正があるかどうかを確認してください。既存の問題を最初に検索せずに、依存関係-X.Y.ZにCVEがあることに関する新しいJIRAを提出しないでください

オープンソースプロジェクトとして、この分野での貢献は常に歓迎されます。特に、アクティブなブランチのテスト、これらのブランチのダウンストリームにあるアプリケーションのテスト、および更新された依存関係が回帰を引き起こすかどうかのテストにおいて。

セキュリティに関するアドバイザリー

Hadoop HDFSは、リモートの呼び出し元がデータを読み書きできる分散ファイルシステムです。

Hadoop YARNは、リモートの呼び出し元が任意の作業をクラスタに送信できる分散ジョブ送信/実行エンジンです。

HadoopクラスタがKerberosによる呼び出し元認証でデプロイされていない限り、サーバーへのネットワークアクセスを持つすべての人がデータへの無制限のアクセス権を持ち、システム内で任意のコードを実行できます。

本番環境では、一般に、注意すればデータとコンピューティングリソースをプライベートに保つことができる3つのデプロイメントパターンがあります。1.物理クラスタ:通常、エンタープライズKerberos/Active DirectoryシステムにバインドされているHadoopセキュリティを構成します。良い。2.クラウド:プライベートVLANとセキュリティを備えた一時的または永続的な単一または複数のユーザー/テナントクラスタ。良い。クラスタへのリモートアクセスを管理するには、Apache Knoxを検討してください。3.クラウド:プライベートVLANを備えた一時的な単一ユーザー/テナントクラスタで、セキュリティはまったくありません。これはクラスタを保護する唯一の手段であるため、慎重なネットワーク構成が必要です。クラスタへのリモートアクセスを管理するには、Apache Knoxを検討してください。

セキュリティなしで、かつ信頼できるユーザーへのアクセスを制限するためのVLANを構成せずに、クラウドにHadoopクラスタをデプロイする場合、データとコンピューティングリソースを、ネットワークアクセスを持つすべての人と暗黙的に共有することになります

このように安全でないクラスタをデプロイすると、ポートスキャナーは必然的にそれを見つけて、暗号通貨マイニングジョブを送信します。これが発生した場合、これをCVEまたはセキュリティの問題として報告しないでください。これは完全に予測可能です。クラスタを排他的に自分のクラスタにしたい場合は、クラスタを保護してください。

最後に、Hadoopを他の誰かがデプロイ/管理するサービスとして使用している場合は、製品が提供するセキュリティを判断し、それが要件を満たしていることを確認してください。

はじめに

Hadoopのドキュメントには、Hadoopの使用を開始するために必要な情報が含まれています。単一ノードのHadoopインストールを設定する方法を示す単一ノードの設定から始めます。次に、クラスタの設定に進んで、マルチノードのHadoopインストールを設定する方法を学習します。

Hadoopを本番環境にデプロイする前に、セキュアモードでのHadoopを読み、その指示に従ってクラスタを保護してください。