Hadoopベンチマークテスト

17493 ワード

転載:転載:『Hadoopベンチマークテスト
テストは、システムの正確性を検証し、システムのパフォーマンスを分析する上で非常に重要ですが、無視されがちです.システムをより全面的に理解し、システムのボトルネックを見つけることができ、システムの性能をよりよく改善するために、まずテストから着手し、Hadoopのいくつかの主要なテスト手段を学ぶつもりです.本文は2つの部分に分けます:第1部分はHadoopが持っているテストツールを使ってテストする方法を記録します;第2部では、IntelオープンのHadoop Benchmark Suit:HiBenchのインストールと使用を記録します.
1.Hadoop基準テスト
Hadoopはいくつかのベンチマークテストを持っていて、hadoop-*test*のようないくつかのjarパッケージにパッケージされています.JArとhadoop-*examples*.JArは、Hadoop環境でテストを簡単に実行できます.本試験で使用したHadoopバージョンはclouderaのhadoop-0.2.2-cdh 3 u 3である.
テストの前に、環境変数を設定します.
$ export $HADOOP_HOME=/home/hadoop/hadoop
$ export $PATH=$PATH:$HADOOP_HOME/bin

jarパッケージのクラスを呼び出すには、次のコマンドを使用します.
$ hadoop jar $HADOOP_HOME/xxx.jar

(1). Hadoop Test
パラメータなしでhadoop-test-0.20.2-cdh 3 u 3を呼び出す.JArの場合、すべてのテストプログラムがリストされます.
$ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar
An example program must be given as the first argument.
Valid program names are:
  DFSCIOTest: Distributed i/o benchmark of libhdfs.
  DistributedFSCheck: Distributed checkup of the file system consistency.
  MRReliabilityTest: A program that tests the reliability of the MR framework by injecting faults/failures
  TestDFSIO: Distributed i/o benchmark.
  dfsthroughput: measure hdfs throughput
  filebench: Benchmark SequenceFile(Input|Output)Format (block,record compressed and uncompressed), Text(Input|Output)Format (compressed and uncompressed)
  loadgen: Generic map/reduce load generator
  mapredtest: A map/reduce test check.
  minicluster: Single process HDFS and MR cluster.
  mrbench: A map/reduce benchmark that can create many small jobs
  nnbench: A benchmark that stresses the namenode.
  testarrayfile: A test for flat files of binary key/value pairs.
  testbigmapoutput: A map/reduce program that works on a very big non-splittable file and does identity map/reduce
  testfilesystem: A test for FileSystem read/write.
  testipc: A test for ipc.
  testmapredsort: A map/reduce program that validates the map-reduce framework's sort.
  testrpc: A test for rpc.
  testsequencefile: A test for flat files of binary key value pairs.
  testsequencefileinputformat: A test for sequence file input format.
  testsetfile: A test for flat files of binary key/value pairs.
  testtextinputformat: A test for text input format.
  threadedmapbench: A map/reduce benchmark that compares the performance of maps with multiple spills over maps with 1 spill

これらのプログラムはHadoopを複数の角度から試験し,TestDFSIO,mrbench,nnbenchは3つの広く用いられている試験である.TestDFSIO
TestDFSIOはHDFSのIO性能をテストするために使用され、1つのMapReduceジョブを使用して同時に読み書き操作を実行し、各mapタスクは各ファイルを読み書きするために使用され、mapの出力は処理ファイルに関する統計を収集するために使用され、reduceは統計を蓄積し、summaryを生成するために使用される.TestDFSIOの使い方は以下の通りです.
TestDFSIO.0.0.6
Usage: TestDFSIO [genericOptions] -read | -write | -append | -clean [-nrFiles N] [-fileSize Size[B|KB|MB|GB|TB]] [-resFile resultFileName] [-bufferSize Bytes] [-rootDir]

以下の例では、1000 MBのファイル10個をHDFSに書き込む.
$ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar TestDFSIO \
-write -nrFiles 10 -fileSize 1000

結果はローカルファイルTestDFSIOに書き込まれます.results.log:
----- TestDFSIO ----- : write
           Date & time: Mon Dec 10 11:11:15 CST 2012
       Number of files: 10
Total MBytes processed: 10000.0
     Throughput mb/sec: 3.5158047729862436
Average IO rate mb/sec: 3.5290374755859375
IO rate std deviation: 0.22884063705950305
    Test exec time sec: 316.615

以下の例では、HDFSから1000 MBのファイルを10個読み込みます.
$ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar TestDFSIO \
    -read -nrFiles 10 -fileSize 1000

結果はローカルファイルTestDFSIOに書き込まれます.results.log:
—– TestDFSIO —– : read
           Date & time: Mon Dec 10 11:21:17 CST 2012
       Number of files: 10
Total MBytes processed: 10000.0
     Throughput mb/sec: 255.8002711482874
Average IO rate mb/sec: 257.1685791015625
IO rate std deviation: 19.514058659935184
    Test exec time sec: 18.459

次のコマンドを使用して、テストデータを削除します.
$ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar TestDFSIO -clean

nnbench
nnbenchはNameNodeの負荷をテストするために使用され、HDFSに関連する多くの要求を生成し、NameNodeに大きな圧力をかけます.このテストでは、HDFS上でファイルの作成、読み取り、名前変更、削除などの操作をシミュレートできます.nnbenchの使い方は以下の通りです.
NameNode Benchmark 0.4
Usage: nnbench <options>
Options:
     -operation <Available operations are create_write open_read rename delete. This option is mandatory>
      * NOTE: The open_read, rename and delete operations assume that the files they operate on, are already available. The create_write operation must be run before running the other operations.
     -maps <number of maps. default is 1. This is not mandatory>
     -reduces <number of reduces. default is 1. This is not mandatory>
     -startTime <time to start, given in seconds from the epoch. Make sure this is far enough into the future, so all maps (operations) will start at the same time>. default is launch time + 2 mins. This is not mandatory
     -blockSize <Block size in bytes. default is 1. This is not mandatory>
     -bytesToWrite <Bytes to write. default is 0. This is not mandatory>
     -bytesPerChecksum <Bytes per checksum for the files. default is 1. This is not mandatory>
     -numberOfFiles <number of files to create. default is 1. This is not mandatory>
     -replicationFactorPerFile <Replication factor for the files. default is 1. This is not mandatory>
     -baseDir <base DFS path. default is /becnhmarks/NNBench. This is not mandatory>
     -readFileAfterOpen <true or false. if true, it reads the file and reports the average time to read. This is valid with the open_read operation. default is false. This is not mandatory>
     -help: Display the help statement

次の例では、12個のmapperと6個のreducerを使用して1000個のファイルを作成します.
$ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar nnbench \
    -operation create_write -maps 12 -reduces 6 -blockSize 1 \
    -bytesToWrite 0 -numberOfFiles 1000 -replicationFactorPerFile 3 \
    -readFileAfterOpen true -baseDir /benchmarks/NNBench-`hostname -s`

mrbench
mrbenchは、クラスタ上の小さなジョブの実行が重複可能であるかどうか、および実行が効率的であるかどうかを確認するために、小さなジョブを複数回繰り返し実行します.mrbenchの使い方は以下の通りです.
MRBenchmark.0.0.2
Usage: mrbench [-baseDir <base DFS path for output/input, default is /benchmarks/MRBench>] [-jar <local path to job jar file containing Mapper and Reducer implementations, default is current jar file>] [-numRuns <number of times to run the job, default is 1>] [-maps <number of maps for each run, default is 2>] [-reduces <number of reduces for each run, default is 1>] [-inputLines <number of input lines to generate, default is 1>] [-inputType <type of input to generate, one of ascending (default), descending, random>] [-verbose]

次の例では、小さなジョブを50回実行します.
$ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar mrbench -numRuns 50

実行結果は次のとおりです.
DataLines     Maps     Reduces     AvgTime (milliseconds)
1          2     1     14237

以上の結果は、平均作業完了時間が14秒であることを示している.
(2). Hadoop Examples
前述のテストに加えて、HadoopはWordCountとTeraSortのようないくつかの例を持っています.これらの例はhadoop-examples-0.2.2-cdh 3 u 3です.jarで.次のコマンドを実行すると、すべてのサンプル・プログラムがリストされます.
$ hadoop jar $HADOOP_HOME/hadoop-examples-0.20.2-cdh3u3.jar
An example program must be given as the first argument.
Valid program names are:
  aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.
  aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files.
  dbcount: An example job that count the pageview counts from a database.
  grep: A map/reduce program that counts the matches of a regex in the input.
  join: A job that effects a join over sorted, equally partitioned datasets
  multifilewc: A job that counts words from several files.
  pentomino: A map/reduce tile laying program to find solutions to pentomino problems.
  pi: A map/reduce program that estimates Pi using monte-carlo method.
  randomtextwriter: A map/reduce program that writes 10GB of random textual data per node.
  randomwriter: A map/reduce program that writes 10GB of random data per node.
  secondarysort: An example defining a secondary sort to the reduce.
  sleep: A job that sleeps at each map and reduce task.
  sort: A map/reduce program that sorts the data written by the random writer.
  sudoku: A sudoku solver.
  teragen: Generate data for the terasort
  terasort: Run the terasort
  teravalidate: Checking results of terasort
  wordcount: A map/reduce program that counts the words in the input files.

WordCountはRunning Hadoop On CentOS (Single-Node Cluster)文で紹介されていますが、ここではこれ以上説明しません.
TeraSort
完全なTeraSortテストは、次の3つのステップで実行する必要があります.
TeraGenによるランダムデータ生成入力データに対してTeraSort を実行する
TeraValidateでシーケンス化された出力データを検証する
テストのたびに入力データを生成する必要はありません.データを生成した後、テストのたびに最初のステップをスキップできます.
TeraGenの使い方は以下の通りです.
$ hadoop jar hadoop-*examples*.jar teragen <number of 100-byte rows> <output dir>

次のコマンドは、TeraGenを実行して1 GBの入力データを生成し、ディレクトリ/examples/terasort-inputに出力します.
$ hadoop jar $HADOOP_HOME/hadoop-examples-0.20.2-cdh3u3.jar teragen \
    10000000 /examples/terasort-input

TeraGenが生成したデータの行ごとのフォーマットは次のとおりです.
<10 bytes key><10 bytes rowid><78 bytes filler>\r

次のようになります.
keyはいくつかのランダム文字であり、各文字のASCIIコードの値範囲は[32,126]である.
rowidは整数で、右揃えはです.
fillerは7組の文字からなり、各グループは10文字(最後のグループは8文字)であり、文字は‘A’から’Z’までの順に値をとる.
次のコマンドは、TeraSortを実行してデータをソートし、結果をディレクトリ/examples/terasort-outputに出力します.
$ hadoop jar $HADOOP_HOME/hadoop-examples-0.20.2-cdh3u3.jar terasort \
    /examples/terasort-input /examples/terasort-output

次のコマンドは、TeraValidateを実行してTeraSortから出力されたデータが秩序化されているかどうかを確認します.問題が検出された場合は、乱順のkeyをディレクトリ/examples/terasort-validateに出力します.
$ hadoop jar $HADOOP_HOME/hadoop-examples-0.20.2-cdh3u3.jar teravalidate \
    /examples/terasort-output /examples/terasort-validate

(3). Hadoop Gridmix2
GridmixはHadoopが持参したベンチマークテストプログラムであり、データの生成、ジョブの発行、完了時間の統計などの機能モジュールを含む他のいくつかのベンチマークテストプログラムのさらなるパッケージである.GridmixにはstreamSort、javaSort、combiner、monsterQuery、webdataScan、webdataSortのさまざまなタイプのジョブが用意されています.
コンパイル
$ cd  $HADOOP_HOME/src/benchmarks/gridmix2
$ ant
$ cp build/gridmix.jar .

環境変数の変更
gridmix-env-2ファイルを変更するには、次の手順に従います.
export HADOOP_INSTALL_HOME=/home/jeoygin
export HADOOP_VERSION=hadoop-0.20.2-cdh3u3
export HADOOP_HOME=${HADOOP_INSTALL_HOME}/${HADOOP_VERSION}
export HADOOP_CONF_DIR=${HADOOP_HOME}/conf
export USE_REAL_DATASET=

export APP_JAR=${HADOOP_HOME}/hadoop-test-0.20.2-cdh3u3.jar
export EXAMPLE_JAR=${HADOOP_HOME}/hadoop-examples-0.20.2-cdh3u3.jar
export STREAMING_JAR=${HADOOP_HOME}/contrib/streaming/hadoop-streaming-0.20.2-cdh3u3.jar

もしUSE_REAL_DATASETの値がTRUEの場合、500 GBの圧縮データ(2 TBの非圧縮データに相当)が使用され、空にすると500 MBの圧縮データ(2 GBの非圧縮データに相当)が使用されます.
構成情報の変更
構成情報gridmix_config.xmlファイルにあります.gridmixでは、各ジョブには大中小の3種類があります.小ジョブには3つの入力ファイル(すなわち3つのmap)しかありません.中ジョブの入力ファイルは、正規表現{part-000*0,part-000*1,part-000*2}と一致するファイルです.大きな作業会の処理所にデータがあります.
データの生成
$ chmod +x generateGridmix2data.sh
$ ./generateGridmix2data.sh

generateGridmix2data.shスクリプトは、HDFSのディレクトリ/gridmix/dataに入力データを生成するジョブを実行します.
うんてん
$ chmod +x rungridmix_2
$ ./rungridmix_2

実行後、_が作成されます.start.outファイルは開始時間を記録し、終了後、作成_end.outファイルは完了時間を記録します.
(4). タスク統計の表示
Hadoopは、タスクの統計を取得するために非常に便利な方法を提供します.次のコマンドを使用して行います.
$ hadoop job -history all <job output directory>

このコマンドは、/_logs/historyディレクトリに格納されているタスクの2つの履歴ファイルを分析し、タスクの統計を計算します.
2. HiBench
HiBenchはIntelがオープンしたHadoop Benchmark Suitで、9つの典型的なHadoop負荷(Micro benchmarks、HDFS benchmarks、web search benchmarks、machine learning benchmarks、data analytics benchmarks)を含み、ホームページは:https://github.com/intel-hadoop/hibench.
HiBenchは、ほとんどの負荷に圧縮を有効にするかどうかのオプションを提供し、デフォルトのcompression codecはzlibです.
Micro Benchmarks:
Sort(sort):Hadoop RandomTextWriterを使用してデータを生成し、データをソートする.
WordCount(wordcount):入力データ中の単語の出現回数を統計し、入力データはHadoop RandomTextWriterを用いてを生成する.
TeraSort(terasort):マイクロソフトのデータベース大牛Jim Gray(2007年行方不明)が作成した標準benchmarkで、入力データはHadoop TeraGenがを生成します.
HDFS Benchmarks:
拡張DFSIO(dfsioe):HadoopクラスタのHDFSスループットを、同時に読み書き要求を実行するタスクを大量に生成することによってテストする.
Web Search Benchmarks:
Nutch indexing(nutchindexing):大規模な検索エンジンインデックスはMapReduceの重要な応用であり、この負荷テストNutch(Apacheのオープンソース検索エンジン)のインデックスサブシステムは、自動的に生成されたWebデータを使用し、Webデータのリンクと単語はZipfian分布に合致する.
PageRank(pagerank):この負荷はHadoop上のPageRankアルゴリズム実装を含み、自動的に生成されたWebデータを使用して、WebデータのリンクはZipfian分布に合致する.
Machine Learning Benchmarks:
Mahout Bayesian classification(bayes):大規模な機械学習もMapReduceの重要な応用であり、この負荷テストMahout 0.7(Apacheのオープンソース機械学習ライブラリ)のNaive Bayesianトレーナーであり、入力データは自動的に生成されたドキュメントであり、ドキュメントの単語はZipfian分布に合致する.
Mahout K-means clustering(kmeans):この負荷テストMahout 0.7のK-meansクラスタリングアルゴリズムは、入力データセットが均一分布とガウス分布に基づくGenKMeansDatasetによって生成される
Data Analytics Benchmarks:
Hive Query Benchmarks(hivebench):この負荷の開発SIGMOD 09に基づく論文「A Comparison of Approaches to Large-Scale Data Analysis」とHIVE-396は、典型的なOLAPクエリを実行するHiveクエリ(Aggregation and Join)を含み、自動生成されたWebデータを使用して、WebデータのリンクがZipfian分布に合致する
以下、${HIBENCH_HOME}をHiBenchの解凍ディレクトリとして定義する.
(1). インストールと構成
環境の構築:
HiBench-2.2:https://github.com/intel-hadoop/HiBench/zipball/HiBench-2.2ダウンロードHadoop:任意の負荷を実行する前に、Hadoop環境が正常に動作していることを確認してください.すべての負荷はCloudera Distribution of Hadoop 3 update 4(cdh 3 u 4)とHadoop 1.0.3でにテストされました.
Hive:hivebenchをテストする場合は、Hive環境が正しく確立されていることを確認します.
すべての負荷を構成するには、次の手順に従います.
${HIBENCH_HOME}/bin/hibench-config.shファイルにグローバルな環境変数を設定します.
$ unzip HiBench-2.2.zip
$ cd HiBench-2.2
$ vim bin/hibench-config.sh
HADOOP_HOME      <The Hadoop installation location>
HADOOP_CONF_DIR  <The hadoop configuration DIR, default is $HADOOP_HOME/conf>
COMPRESS_GLOBAL  <Whether to enable the in/out compression for all workloads, 0 is disable, 1 is enable>
COMPRESS_CODEC_GLOBAL  <The default codec used for in/out data compression>

1つの負荷を構成するには、次の手順に従います.
各負荷ディレクトリの下でconf/configureを変更することができる.shこのファイルは、負荷運転のパラメータを設定します.
各ノードを同期する時間
(2). うんてん
いくつかの負荷を同時に実行します.
修正${HIBENCH_HOME}/conf/benchmarks.lstファイル、実行する負荷を定義し、各行に1つの負荷を指定し、任意の行の前に#を使用して行をスキップできます.
${HIBENCH_HOME}/bin/run-allを実行します.shスクリプト各負荷を個別に実行するには、次の手順に従います.
各ロードを個別に実行できます.通常、各ロードディレクトリには3つの異なるファイルがあります.
conf/configure.sh    , 
bin/prepare*.sh    HDFS
bin/run*.sh        benchmark

benchmarkの構成:必要に応じてconfigureを変更できます.shファイルは、自分が望むパラメータを設定する.
準備データ:bin/prepareを実行する.shスクリプトはbenchmarkのために入力データを準備する
benchmarkの実行:bin/run*を実行します.shスクリプトは、対応するbenchmark を実行する.
(3). 小結
HiBenchは広く使われているHadoop Benchmarkをカバーしています.このプロジェクトのソースコードを見たことがあると、このプロジェクトは精悍で、コードが多くないことがわかります.スクリプトを通じて、benchmarkの構成、準備、運行を規範化し、非常に便利です.
3.参考資料
Benchmarking and Stress Testing an Hadoop Cluster with TeraSort, TestDFSIO & Co.
Hadoop Gridmixベンチマークテスト
HiBench