2012-06-29 13 views
5

Mam elastyczną mapę Zmniejsz zadanie, które zapisuje niektóre pliki w S3 i chcę połączyć wszystkie pliki w celu utworzenia unikalnego pliku tekstowego.Czy można uruchomić hadoop fs -getmerge w S3?

Obecnie ręcznie kopiuję folder ze wszystkimi plikami do naszego HDFS (hadoop fs copyFromLocal), a następnie uruchamiam hadoop fs -getmerge i hadoop fs copyToLocal, aby uzyskać plik.

czy mimo to można korzystać z hadoop fs bezpośrednio na S3?

Odpowiedz

1

Właściwie ta odpowiedź na temat getmerge jest niepoprawna. getmerge oczekuje lokalnego miejsca docelowego i nie będzie działać z S3. Rzuca IOException, jeśli spróbujesz i odpowiesz -getmerge: Wrong FS :.

Zastosowanie:

hadoop fs [generic options] -getmerge [-nl] <src> <localdst> 
0

Nie osobiście wypróbowałem polecenia getmerge, ale polecenia na węzłach klastra EMR obsługują ścieżki S3, podobnie jak ścieżki HDFS. Na przykład, można zalogować się na węźle głównym w klastrze i uruchom:

hadoop fs -ls s3://<my_bucket>/<my_dir>/ 

Powyższa komenda zostanie lista wszystkich obiektów z S3 w ramach określonej ścieżki katalogów.

Spodziewałabym się, że hadoop fs -getmerge będzie działać w ten sam sposób. Tak więc, po prostu używaj pełnych ścieżek S3 (zaczynając od s3: //) zamiast ścieżek HDFS.

+0

'Hadoop fs -getmerge' może połączyć się tylko do lokalnego systemu plików, nie s3 – justderb

1

Łatwym sposobem (jeśli generują niewielki plik, który pasuje na urządzeniu głównym) jest wykonanie następujących czynności:

  1. Merge części plików w jednym pliku na komputerze lokalnym (Documentation)

    hadoop fs -getmerge hdfs://[FILE] [LOCAL FILE] 
    
  2. Skopiuj plik wynik do S3, a następnie usuń plik lokalny (Documentation)

    hadoop dfs -moveFromLocal [LOCAL FILE] s3n://bucket/key/of/file 
    
Powiązane problemy