Ich habe eine Reihe von Dateien in einem Ordner in hdfs mit ihren Namen ein Format Dateiname.JJJJ-MM-TT-hh.Maschinenname.gz in hdfs. Ich muss diese auf s3 übertragen, aber ich möchte sie auf yyyy/mm/dd/hh/Dateiname.yyyy-mm-dd-hh.machinename.gz setzen (dies wäre der Objektname, da s3 eine flache Struktur hat) unter der Bucket, den ich spezifiziere. Der Befehl distcp kann Dateien von hdfs zu s3 übertragen, aber gibt es eine Möglichkeit, das oben genannte zu tun? Wenn nicht, wie kann ich distcp erweitern, um dies durchzuführen?Ändern Sie den Ziel-Dateinamen/Speicherort in distcp
0
A
Antwort
1
Beachten Sie: Dies ist keine Lösung, sondern nur ein Hinweis.
Ich weiß nicht die genaue Antwort und auch keine S3-Instanz, um es tatsächlich zu versuchen. Aber hier ist AWK Art der Vorverarbeitung der Dateinamen und Kopieren von Dateien in einer bestimmten Verzeichnisstruktur. Der folgende Befehl geschrieben lokales Linux-Dateisystem unter Berücksichtigung
Anfangsverzeichnisinhalt:
[email protected]:~/path/to/input$ find
./filename.yyyy-mm-dd-hh.machinename.gz
./filename.2016-12-10-08.machinename.gz
./filename.2015-12-10-08.machinename.gz
./filename.2015-10-10-08.machinename.gz
./filename.2015-10-11-08.machinename.gz
Befehl für Dateien innerhalb einer bestimmten Verzeichnisstruktur zu kopieren:
[email protected]:~/path/to/input$ ls | awk -F"." '{print $1" "$2" "$3" "$4}' | awk -F"-" '{print $1" "$2" "$3" "$4" "$5" "$6" "$7}' | awk -F" " '{PATH=$2"/"$3"/"$4"/"$5; FNAME=$1"."$2"-"$3"-"$4"-"$5"."$6"."$7; system("mkdir -p "PATH); system("cp "FNAME" "PATH); }'
Schlussverzeichnisinhalt nach Ausführung des Befehls:
./filename.yyyy-mm-dd-hh.machinename.gz
./yyyy
./yyyy/mm
./yyyy/mm/dd
./yyyy/mm/dd/hh
./yyyy/mm/dd/hh/filename.yyyy-mm-dd-hh.machinename.gz
./filename.2016-12-10-08.machinename.gz
./2016
./2016/12
./2016/12/10
./2016/12/10/08
./2016/12/10/08/filename.2016-12-10-08.machinename.gz
./filename.2015-12-10-08.machinename.gz
./2015
./2015/12
./2015/12/10
./2015/12/10/08
./2015/12/10/08/filename.2015-12-10-08.machinename.gz
./filename.2015-10-11-08.machinename.gz
./2015/10
./2015/10/11
./2015/10/11/08
./2015/10/11/08/filename.2015-10-11-08.machinename.gz
./filename.2015-10-10-08.machinename.gz
./2015/10/10
./2015/10/10/08
./2015/10/10/08/filename.2015-10-10-08.machinename.gz
0
Sie müssen nur Mentio n den Zielpfad im gewünschten Format.
hadoop distcp filename.yyyy-mm-dd-hh.machinename.gz s3n://<bucket-name>/yyyy/mm/dd/hh/filename.yyyy-mm-dd-hh.machinename.gz
Verwandte Themen
- 1. Unterschied zwischen 'distcp' und 'distcp-update'?
- 2. Hadoop distcp mit Dateiliste
- 3. Karte Job in Java für distcp reduzieren
- 4. Ändern Sie den Linktext
- 5. HDFS bis s3 Distcp - Access Keys
- 6. DistCp von Local Hadoop nach Amazon S3
- 7. So ändern Sie den Balkendiagrammstil
- 8. So ändern Sie den Zeitwert
- 9. So ändern Sie den Paketzielordner in CPack?
- 10. So ändern Sie den Variablenwert in EntityFramework
- 11. Ändern Sie den Schlüssel in C#
- 12. Ändern Sie den Tabellenansichtsstil searchDisplayController in gruppiert?
- 13. Android - Ändern Sie den Wert in strings.xml
- 14. Ändern Sie den Benutzernamen in MVC 5
- 15. Sequelize: Ändern Sie den Spaltentyp in ENUM
- 16. Wie Sie den Legendentyp in Excel ändern?
- 17. Ändern Sie den Spieler in swift
- 18. Liquibase: Ändern Sie den Spaltentyp in Java
- 19. So ändern Sie den Webordner in public_html
- 20. Ändern Sie den Bildnamen in PHP
- 21. So ändern Sie den Stammelternselektor in Sass
- 22. So ändern Sie den Dateityp in Textmate
- 23. So ändern Sie den Server in DNF
- 24. Ändern Sie den Prozessnamen in C#?
- 25. Ändern Sie den Feldnamen in django admin
- 26. So ändern Sie den Zeilenabstand in TextBlock
- 27. Ändern Sie den Speicherpfad in Laravel 5
- 28. Ändern Sie den Stamm in öffentliche Unterordner
- 29. Ändern Sie den Satz in einzelne Wörter
- 30. Ändern Sie den Stil dynamisch.