2016-08-03 34 views
1

Ich arbeite für einen Client, wo ich einige Dateien in HDFS mit Snappy Kompression legen sollte. Mein Problem ist Snappy Codec ist nicht in mapred-site.xml oder hdfs-site.xmlWie man Datei auf HDFS mit Snappy Kompression setzt

definiert Irgendwie muss ich Dateien vorzugsweise mit hdfs put Befehl setzen und sie sollten komprimiert werden. Es gibt keine Möglichkeit, Konfigurationsdateien zu ändern, da es sich um eine Produktionsmaschine und andere Personen handelt, die sie aktiv verwenden.

Eine weitere vorgeschlagene Lösung bestand darin, Dateien ohne Komprimierung in HDFS zu importieren, dann externe Hive-Tabellen mit Komprimierung zu erstellen und ihre Quelldateien zu verwenden, während die unkomprimierten Dateien gelöscht wurden. Aber das ist ein langer Weg und es ist nicht garantiert, dass es funktioniert.

Alle Vorschläge werden zur Verwendung von hdfs put mit einer Art von Parametern zum Komprimieren von Dateien geschätzt.

+0

Dies ist nicht möglich, 'Put' bewegt Daten einfach. –

Antwort

1

Ich empfehle Ihnen, map-reduce Job zu schreiben, um Ihre Daten in hdfs zu komprimieren. Ich weiß nicht, ob es eine Möglichkeit gibt, die automatische Komprimierung auf der Hadoop-Put-Operation durchzuführen, aber angenommen, sie existiert nicht. Eine Option ist die bereits komprimierte Datei:

snzip file.tar 
hdfs dfs -put file.tar.sz /user/hduser/test/ 

Eine andere Möglichkeit ist, es in mapreduce Job zu komprimieren. Als Option können Sie hadoop Streaming jar verwenden Sie Dateien innerhalb hdfs zum Komprimieren:

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-0.20.2-cdh3u2.jar \ 
-Dmapred.output.compress=true \ 
-Dmapred.compress.map.output=true \ 
-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec \ 
-Dmapred.reduce.tasks=0 \ 
-input <input-path> \ 
-output $OUTPUT \ 
0

Sagen Sie bitte eine Spark-Protokolldatei in hdfs haben, die nicht komprimiert, sondern Sie auf spark.eventLog.compress true im spark-defaults.conf und gehen Sie voran machen wollte und komprimiere die alten Logs. Die Karten reduzieren Ansatz würde am meisten Sinn machen, sondern als ein aus können Sie auch:

snzip -t hadoop-snappy local_file_will_end_in_dot_snappy 

Und dann laden Sie es direkt gestellt.

Installation snzip so aussehen kann:

sudo yum install snappy snappy-devel 
curl -O https://dl.bintray.com/kubo/generic/snzip-1.0.4.tar.gz 
tar -zxvf snzip-1.0.4.tar.gz 
cd snzip-1.0.4 
./configure 
make 
sudo make install 

Ihre Rundreise für eine einzelne Datei sein könnte:

hdfs dfs -copyToLocal /var/log/spark/apps/application_1512353561403_50748_1 . 
snzip -t hadoop-snappy application_1512353561403_50748_1 
hdfs dfs -copyFromLocal application_1512353561403_50748_1.snappy /var/log/spark/apps/application_1512353561403_50748_1.snappy 

Oder mit gohdfs:

hdfs cat /var/log/spark/apps/application_1512353561403_50748_1 \ 
| snzip -t hadoop-snappy > zzz 
hdfs put zzz /var/log/spark/apps/application_1512353561403_50748_1.snappy 
rm zzz