2016-10-05 18 views
0

ローカルファイルシステムに24GBのフォルダがあります。私の仕事は、そのフォルダをHDFSに移動することです。私はそれを2通り行った。 1)hdfs dfs -copyFromLocal/home/data// home/Apache FlumeがcopyFromLocalコマンドよりも時間がかかります

この処理には約15分かかりました。

2)Flumeの使用。

は、ここでこのステップは、HDFSにデータをプッシュすることはほとんど時間を要した

spool_dir.sources = src-1 
spool_dir.channels = channel-1 
spool_dir.sinks = sink_to_hdfs 
# source 
spool_dir.sources.src-1.type = spooldir 
spool_dir.sources.src-1.channels = channel-1 
spool_dir.sources.src-1.spoolDir = /home/data/ 
spool_dir.sources.src-1.fileHeader = false 
# HDFS sinks 
spool_dir.sinks.sink_to_hdfs.type = hdfs 
spool_dir.sinks.sink_to_hdfs.hdfs.fileType = DataStream 
spool_dir.sinks.sink_to_hdfs.hdfs.path = hdfs://192.168.1.71/home/user/flumepush 
spool_dir.sinks.sink_to_hdfs.hdfs.filePrefix = customevent 
spool_dir.sinks.sink_to_hdfs.hdfs.fileSuffix = .log 
spool_dir.sinks.sink_to_hdfs.hdfs.batchSize = 1000 
spool_dir.channels.channel-1.type = file 
spool_dir.channels.channel-1.checkpointDir = /home/user/spool_dir_checkpoint 
spool_dir.channels.channel-1.dataDirs = /home/user/spool_dir_data 
spool_dir.sources.src-1.channels = channel-1 
spool_dir.sinks.sink_to_hdfs.channel = channel-1 

私の薬剤です。

私の知る限り、Flumeは配布されているので、FlumeがcopyFromLocalコマンドよりも速くデータをロードする必要はありません。

+0

はあなたがHDFSに入れたいデータについてのさらなる情報をお持ちですか? は、それがデータをログますか?それは時間の経過とともに変化していますか?どこで、これは、私はあなたの冒頭陳述に同意できないだろう? – bessbd

答えて

0

Apache Flumeは、ローカルファイルシステムからHDFSにフォルダを移動またはコピーするためのものではありません。 Flumeは、大量のログ・データをさまざまなソースから集中データ・ストアに効率的に収集、集約および移動するためのものです。 (参照:Flume User Guide

大きなファイルやディレクトリを移動する場合は、前述のようにhdfs dfs -copyFromLocalを使用してください。

+0

データが生成されるということです –

+0

https://flume.apache.org/FlumeUserGuide.htmlによれば、「Apache Flumeは、分散、信頼性の高い、利用可能なシステムで、効率的にデータを収集、多数の異なるソースからの大量のログデータの集約と移動中央のデータストアに転送します。 " そのデータがログファイルである場合、Flumeの新機能であるtaildir sourceを使用できます。あなたが言及したユースケースだと思います。 – bessbd

1

読み書き操作が簡単であれば、ファイルチャネルを使用しているので、flumeは設定によって少なくとも2倍遅くなります。ディスクから読み込まれたすべてのファイルはflumeイベントにカプセル化されます)、ファイルチャネル経由でディスクにシリアル化されます。シンクは、hdfsまでプッシュする前に、ファイルチャネル(ディスク)からイベントを読み戻します。

また、blobデシリアライザをspoolDirソースに設定していないので(ソースファイルから一度に1行ずつ読み込み、flumeイベントをラップしてファイルチャネルに書き込むため)、HDFSとペアになりますデフォルトのrollXXX値をシンクすると、copyFromLocalで取得する入力ファイルごとのファイルではなく、10イベント/ 30秒/ 1kのファイルがhdfsで取得されます。

これらの要因はすべて、パフォーマンスが低下するほどです。より匹敵するパフォーマンスを得たい場合は、spoolDirソースでBlobDeserializerをメモリチャネルと組み合わせて使用​​する必要があります(しかし、メモリチャネルは、JREが途中で終了した場合にイベントの配信を保証しません)。

関連する問題