5

Spark を試しているところですが、非常に遅いことがわかりました。私が言いたいことを示すために、以下に例を示しました.SparkがHDFSから10行のテキストファイルをロードし、行数を数えるのに2秒近くかかります. 私の質問:

  1. これは期待されていますか?プラットフォームにどれくらい時間がかかりますか?
  2. 考えられる理由は何ですか?現在、2 ノードの Hadoop クラスター (両方とも 8 コア、64G RAM) で Spark 1.3 を使用しています。Hadoop と Spark に関しては、私はかなりグリーンなので、Ambari/HDP のデフォルト以外の構成はほとんど行っていません。

当初、私は 1 億行でテストしていました。Spark は単純にカウントするのに約 10 分かかりました。

例:

10 個の数字のテキスト ファイルを作成し、hadoop に読み込みます。

for i in {1..10}; do echo $1 >> numbers.txt; done
hadoop fs -put numbers.txt numbers.txt

pyspark を開始します (約 20 秒かかります...):

pyspark --master yarn-client --executor-memory 4G --executor-cores 1 --driver-memory 4G --conf spark.python.worker.memory=4G

HDFS からファイルをロードしてカウントします。

sc.textFile('numbers.txt').count()

フィードバックによると、Spark がそれを行うのに約 1.6 秒かかります。ひどい構成でも、それほど時間がかかるとは思いません。

4

2 に答える 2

1

クラスタ構成とは関係ありません。遅延評価によるものです。

Sparkには 2 種類の API があります。Transformations & Actions

上記のドキュメント リンクから参照してください。

RDDは、既存のデータセットから新しいデータセットを作成する変換と、データセットで計算を実行した後にドライバー プログラムに値を返すアクションの 2 種類の操作をサポートします。

たとえば、 map は、関数を介して各データセット要素を渡し、結果を表す新しい RDD を返す変換です。一方、reduce は、RDD のすべての要素を何らかの関数を使用して集約し、最終結果をドライバー プログラムに返すアクションです (ただし、分散データセットを返す reduceByKey も並行して存在します)。

Spark のすべての変換は、結果をすぐには計算しないという代わりに、いくつかの基本データセット (ファイルなど) に適用された変換を記憶するだけです。変換は、アクションがドライバー プログラムに結果を返す必要がある場合にのみ計算されます。

sc.textFile('numbers.txt').count()count()呼び出しを伴うアクション操作です。

このため、最初は 2 秒かかりましたが、2 回目は数秒かかりました。

于 2016-01-05T15:54:21.320 に答える