Distcpの件
[TOC]
魂拷問:あなたは本当にdistcpを知っていますか?ここで言うのはdistcpのことです
背景
今日ノートを整理している時、何編もの臨時記録が記録されているクラスタ間のファイルコピーに注意すべき点を発見しました.記録されているものとポイントは違いますが、コアのものはdistcp関連なので、やはり少しまとめる必要があるような気がします.この文章の内容は主に細部の問題で、もっと重点を置いているのは
概要
まず、distcpとは何でしょうか.文字通り
基本的な使い方
パラメータの説明
ここでは各パラメータの中国語の意味を一つ一つ翻訳しないで、基本的にはどのような意味を直訳することができます.ここでは主に使用上注意しなければならないと思います.--append,--overwrite,--update間の関係 パラメータ
説明する
コメント
append
追加、sinkファイルが既に存在するデータを多重化し、データの追加を試み、基準TODOを判断する
overwrite
以前に存在するかどうかにかかわらず、上書きは再生成されます.
update
更新、判断基準はsourceとsinkファイルサイズが一致するかどうか -m
これはよく説明されていますが、distcpのためにmapreduceモデルを使用するべきで、sqoopと少し似ています.だから-mは-mapです.並列度です. -i
失敗を無視するということは、コピータスクが重い場合、リソースが緊張している場合に途中で失敗する可能性が高いなどですが、タスクを再起動するたびに全量コピーを再開するわけではありません.ここでは、失敗を無視し、後続の実行時の再増分コピーを考慮することができます. -strategy
コピーポリシーの問題です.デフォルトはファイルのサイズに応じてタスクを分割します.オプションのパラメータは -p
コピー、blockサイズ、ユーザー権限など、ターゲットシステムに保存されているファイルのstatusという意味ですが、デフォルトではターゲットシステムと一致しています -bandwidth
明らかに、帯域幅の大きさであり、distcpは計算ロジックがなく、io密集型タスクに属しているため、クラスタ移行の際に帯域幅の使用を厳格に制御する必要がある.このパラメータはmapの使用帯域幅を制御することであり、distcpタスクの個数とdistcpタスクのmap個数を制限すれば、全体の移行プログラムの帯域幅の使用を制御することができる.
QA
ここに記録されているのは、私が使用している間に出会った小さな問題で、必ずしも原理の最適化の問題ではなく、使用上疑問や曖昧さが生じる可能性がある場所です.
Q 1:コピーしたときにデータが衝突した場合、どのような結果になりますか?A 1:soureに同じ名前のファイルが表示された場合、distcpタスクが失敗し、エラーログが印刷されます.ターゲットディレクトリにコピーするファイルがすでに存在する場合、デフォルトではソースファイルのコピータスクは無視されます.もちろん、エラーを設定することもできます.別のプロセスでターゲットファイルにデータを書き込むと、ログが間違って印刷されます.
Q 2:distcpのタスク配置位置に要求はありますか?A 2:distcpタスクを実行するノードまたはtaskが上下流にアクセスしてインタラクションできることだけを要求すればよいが,配置の場所は要求されず,実際にはターゲットクラスタのノードに配置されるのが一般的である.
Q 3:distcpタスクビッグデータの移行に注意することは何ですか?A 3:distcpタスクは大きなioのタスクであるため、帯域幅は制限要因であり、クラスタマシン帯域幅を監視するスクリプトを書き、空き時間に移行タスクを開始することができます.
ふろく
参照リンク: hadoop移行 分散コピー
記録が少し急いでいますが、間違いがあれば、ご指摘ください.
魂拷問:あなたは本当にdistcpを知っていますか?ここで言うのはdistcpのことです
背景
今日ノートを整理している時、何編もの臨時記録が記録されているクラスタ間のファイルコピーに注意すべき点を発見しました.記録されているものとポイントは違いますが、コアのものはdistcp関連なので、やはり少しまとめる必要があるような気がします.この文章の内容は主に細部の問題で、もっと重点を置いているのは
リファレンスアドレスです.概要
まず、distcpとは何でしょうか.文字通り
distributed copy( )
です.つまり、もともと一人でやっていたことを、多くの人に分担して並列に処理します.もちろん、このタスクの分業の粒度はファイルに基づいています.つまり、1つのファイルしかありません.では、このコピーはせいぜい一人でしかできません.基本的な使い方
# hdfs ( hadoop), hftp ( hadoop )
hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/foo
#
hadoop distcp hdfs://nn1:8020/foo/bar1 hdfs://nn2:8020/foo/bar2 hdfs://nn3:8020/bar/foo
# -f , -file source
パラメータの説明
ここでは各パラメータの中国語の意味を一つ一つ翻訳しないで、基本的にはどのような意味を直訳することができます.ここでは主に使用上注意しなければならないと思います.
[yourFather@hadoop-onedata ~]$ hadoop distcp --help
usage: distcp OPTIONS [source_path...]
OPTIONS
-append Reuse existing data in target files and append new
data to them if possible
-async Should distcp execution be blocking
-atomic Commit all changes or none
-bandwidth Specify bandwidth per map in MB
-delete Delete from target, files missing in source
-diff Use snapshot diff report to identify the
difference between source and target
-f List of files that need to be copied
-filelimit (Deprecated!) Limit number of files copied to <= n
-i Ignore failures during copy
-log Folder on DFS where distcp execution logs are
saved
-m Max number of concurrent maps to use for copy
-mapredSslConf Configuration for ssl config file, to use with
hftps://
-overwrite Choose to overwrite target files unconditionally,
even if they exist.
-p preserve status (rbugpcaxt)(replication,
block-size, user, group, permission,
checksum-type, ACL, XATTR, timestamps). If -p is
specified with no , then preserves
replication, block size, user, group, permission,
checksum type and timestamps. raw.* xattrs are
preserved when both the source and destination
paths are in the /.reserved/raw hierarchy (HDFS
only). raw.* xattrpreservation is independent of
the -p flag. Refer to the DistCp documentation for
more details.
-sizelimit (Deprecated!) Limit number of files copied to <= n
bytes
-skipcrccheck Whether to skip CRC checks between source and
target paths.
-strategy Copy strategy to use. Default is dividing work
based on file sizes
-tmp Intermediate work path to be used for atomic
commit
-update Update target, copying only missingfiles or
directories
説明する
コメント
append
追加、sinkファイルが既に存在するデータを多重化し、データの追加を試み、基準TODOを判断する
overwrite
以前に存在するかどうかにかかわらず、上書きは再生成されます.
update
更新、判断基準はsourceとsinkファイルサイズが一致するかどうか
これはよく説明されていますが、distcpのためにmapreduceモデルを使用するべきで、sqoopと少し似ています.だから-mは-mapです.並列度です.
個のmapを起動して同時にコピーします.なぜ一番多いのでしょうか.コピーはファイルベース(厳密にはblock)なので、1つのファイルを複数のコピーに分解するのは少し難しいに違いありません.だから、sourceが1つのファイルしかない場合、-mは何個を指定しますか.コピータスクを実行するmap taskは1つしかありません失敗を無視するということは、コピータスクが重い場合、リソースが緊張している場合に途中で失敗する可能性が高いなどですが、タスクを再起動するたびに全量コピーを再開するわけではありません.ここでは、失敗を無視し、後続の実行時の再増分コピーを考慮することができます.
コピーポリシーの問題です.デフォルトはファイルのサイズに応じてタスクを分割します.オプションのパラメータは
dynamic|uniform
で、デフォルトはコピータスクごとに同じバイト数をコピーします.コピー、blockサイズ、ユーザー権限など、ターゲットシステムに保存されているファイルのstatusという意味ですが、デフォルトではターゲットシステムと一致しています
明らかに、帯域幅の大きさであり、distcpは計算ロジックがなく、io密集型タスクに属しているため、クラスタ移行の際に帯域幅の使用を厳格に制御する必要がある.このパラメータはmapの使用帯域幅を制御することであり、distcpタスクの個数とdistcpタスクのmap個数を制限すれば、全体の移行プログラムの帯域幅の使用を制御することができる.
QA
ここに記録されているのは、私が使用している間に出会った小さな問題で、必ずしも原理の最適化の問題ではなく、使用上疑問や曖昧さが生じる可能性がある場所です.
Q 1:コピーしたときにデータが衝突した場合、どのような結果になりますか?A 1:soureに同じ名前のファイルが表示された場合、distcpタスクが失敗し、エラーログが印刷されます.ターゲットディレクトリにコピーするファイルがすでに存在する場合、デフォルトではソースファイルのコピータスクは無視されます.もちろん、エラーを設定することもできます.別のプロセスでターゲットファイルにデータを書き込むと、ログが間違って印刷されます.
Q 2:distcpのタスク配置位置に要求はありますか?A 2:distcpタスクを実行するノードまたはtaskが上下流にアクセスしてインタラクションできることだけを要求すればよいが,配置の場所は要求されず,実際にはターゲットクラスタのノードに配置されるのが一般的である.
Q 3:distcpタスクビッグデータの移行に注意することは何ですか?A 3:distcpタスクは大きなioのタスクであるため、帯域幅は制限要因であり、クラスタマシン帯域幅を監視するスクリプトを書き、空き時間に移行タスクを開始することができます.
ふろく
# 1: , ,
time hadoop distcp hdfs://nn1:8020/user/hive/warehouse/${database}.db/${table}/dt=${partition} hdfs://nn2:8020/user/hive/warehouse/${database}.db/${table} >> /logs/distcp/${database}.log
# 2:
hadoop distcp \
-Dmapred.jobtracker.maxtasks.per.job=1800000 \ # map ( map )
-Dmapred.job.max.map.running=4000 \ # map
-Ddistcp.bandwidth=150000000 \ #
-Ddfs.replication=2 \ # ,
-Ddistcp.skip.dir=$skipPath \ # ( )
-Dmapred.map.max.attempts=9 \ # task
-Dmapred.fairscheduler.pool=distcp \ # pool
-pugp \ # ( , , )
-i \ # task
-skipcrccheck \ # CRC ( , hdfs 。)
hdfs://clusterA:9000/AAA/data \ #
hdfs://clusterB:9000/BBB/data #
# 3: , dfs.http.address
hadoop distcp -numListstatusThreads 40 -update -delete -prbugpaxtq hftp://nn1:50070/source hdfs://cluster2/target
参照リンク:
記録が少し急いでいますが、間違いがあれば、ご指摘ください.