HDFS はデータを 64MB/128MB のブロックに格納し、データはこれらのブロック サイズでタスク ノード間で複製されます。このブロックはノードのハードディスクに保存されます。この声明で間違っている場合は訂正してください。
このブロックは完全に RAM にロードされますか、それとも行ごとにストリーミングする必要がありますか? それとも両方可能ですか?
そのCSVファイルの各行に対して独立していないいくつかの計算を実行したい1GBのCSVファイルがあるとしましょう。つまり、計算では 10 行を連続して処理する必要があります。例: 行 1:10、次に 2:11、次に 3:12 などの計算..私のオプションは何ですか? この 1 GB の複数行データを 1 行のデータに変換し、それを 1 つの行列としてロードするのは良い考えですか (64MB/128MB ブロック全体で計算するのが複雑な場合、これは RAM をオーバーフローさせると思います)?
3 に答える
1) その通りです (ブロック サイズは構成可能ですが、Hadoop アーキテクチャについて簡単に説明します。Hadoop には、NameNode/DataNode/SecondaryNameNode (SNN) と JobTracker/TaskTracker という 2 つのデーモン グループを持つマスター/スレーブ アーキテクチャがあります。NameNode は、 NameNode は通常、DataNode として機能しません. DataNode は、ローカル ファイル システム (ディスク) に対して HDFS ブロックを読み書きし、他の DataNode と通信します。レプリケーション: SNN は、NameNode と通信するアシスタント デーモンであり、単一障害点 NameNode がダウンした場合に、ダウンタイムとデータの損失を最小限に抑えます。JobTracker マスターはコードの実行計画を決定し、TaskTracker スレーブは JobTracker が割り当てる個々のタスクを実行します。
2) NameNode は、RAM 内のすべてのデータノード名前空間を追跡します。データが HDFS にロードされると、処理のためにディスクからストリーミングされます (HDFS はシーケンシャル データ アクセス用に最適化されています)。ストリーミングは、データが保存されているドライブの最大 I/O レートによってのみ制限されます。最適な HDFS ブロック サイズについては、この Cloudera の投稿を参照してくださいhttp://blog.cloudera.com/blog/2009/02/the-small-files-problem/
3) ユースケースについてもう少し説明していただけますか? かなり複雑な独自の InputSplits を定義する必要がある場合があります ( http://developer.yahoo.com/hadoop/tutorial/module4.htmlを参照)。データセットを制御できる場合は、前処理できます。または、ファイル サイズを制御できる場合は、ブロック サイズが 64MB の場合、たとえば 62MB のチャンクでファイルを書き出すことができます。
3)に答えるには:
10 行セットの一部が失われても構わない場合、非常にシンプルで迅速な解決策は、LineReaderの周りに少しのコードを作成することです。マッパーが最初にキーと値のペアを要求したときに、 LineReader は 10 行を読み取り、その後のすべての呼び出しでは、1 行ずつ読み取ります。これには、数行の余分なコードが必要です。
1) データはデータノードに沿って複製されます。ほとんどの構成では、タスクノードもデータノードにする必要があります。はい、物理的に保存されます。
2) 標準リーダーを使用する場合、Hadoop ユーザーは、入力分割で bufferedreaders のようなものを使用し、データを 1 行ずつ「ストリーム」します。他のリーダーもあり、独自のリーダーを実装することもできます
3) ファイルの 10 行を処理する場合、いくつかの方法があります。1 つは、ファイルを分割不可に設定することです。これにより、CSV 全体が 1 つのマッパーによって処理されることが保証されます。自分でファイルを分割して、多くのマッパーを機能させることができます。私が考えることができる他のアプローチは、はるかに複雑であるか、ブロックの境界に問題があります。ファイル全体をロードするのは最善の考えではないと思います.csvが将来的に大きくなった場合、アプローチは失敗する必要があります。
ジョブがマップのみのジョブの場合、reduce フェーズを追加して、それらの 10 行の特別なキーを計算し (たとえば、特別な問題などに関連している)、reducer で関連するすべての行を取得できます。残念ながら、私はあなたの仕事についてより具体的に説明するのに十分な知識がありませんでした
Hadoop を初めて使用する場合は、このリンクを参考にしてください。