najlepszym sposobem, aby to zrobić, jest użycie polecenia distcp Hadoop. Przykład (w jednym z węzłów w klastrze)
% ${HADOOP_HOME}/bin/hadoop distcp s3n://mybucket/myfile /root/myfile
To kopiowanie plików zwanego mójplik z S3 wiadra nazwie mybucket do /root/myfile
w HDFS. Zauważ, że ten przykład zakłada, że używasz systemu plików S3 w trybie "natywnym"; oznacza to, że Hadoop widzi każdy obiekt w S3 jako plik. Jeśli użyjesz S3 w trybie blokowym, zastąpisz s3n s3 w powyższym przykładzie. Aby uzyskać więcej informacji na temat różnic między natywnym S3 i trybem bloku, a także omówienie na powyższym przykładzie, zobacz http://wiki.apache.org/hadoop/AmazonS3.
Odkryłem, że distcp jest bardzo potężnym narzędziem. Oprócz tego, że można go używać do kopiowania dużej liczby plików zi do S3, można również wykonywać szybkie kopie klastra z dużymi zestawami danych. Zamiast przesyłać wszystkie dane przez jeden węzeł, distcp używa wielu węzłów równolegle do wykonania transferu. To sprawia, że distcp jest znacznie szybszy przy transferze dużych ilości danych, w porównaniu z alternatywą kopiowania wszystkiego do lokalnego systemu plików jako pośrednika.
nadal pojawia się błąd podczas przenoszenia s3 do hdfs za pomocą distcp. w moim przypadku staram się przesuwać bardzo duży plik (ponad 300GB) po przeniesieniu 40 lub 50% na początek, nie wiem dlaczego. dowolny pomysł?? – rht