2017-05-30 8 views
1

Was ich im Grunde tue wird einige Shell-Befehle Automatisierung (Thesen Befehle einschließlich hadoop Shell-Befehle) Java-Code verwenden, jetzt habe ich die follwoing Befehle auf bash tue:„chmod“ hadoop Weg von Java

hadoop fs -mkdir path//tp//folder 
hadoop fs -chmod a+w path//to//folder 

alles adaequat, jetzt, wenn sie versuchen, die gleichen Aktionen Java-Code zu verwenden, um auszuführen:

org.apache.hadoop.fs.FileSystem.mkdir(new Path("path//to//folder"),new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.ALL)) 

leider diese Methode:

public void setPermission(Path p, FsPermission permission) throws IOException 
{ 
} 

ist nicht implementiert (jeweils: leer) mit hadoop v 2.6.0 ~ 2.8.0

Meine Frage, wie kann ich Lese-/Schreibberechtigung hinzufügen Java-Code Hadoop Pfad?

+0

Ist nicht die Methode 'mkdirs'? –

+0

'FileSystem' ist abstrakt, hier ist seine Implementierung für hdfs: https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org /apache/hadoop/hdfs/DistributedFileSystem.java Haben Sie versucht, diese Methode zu verwenden? Hast du Fehler bekommen? – fi11er

Antwort

1

Zuallererst möchten Sie vielleicht die Ergebnisse Ihrer Analyse überprüfen. Wenn Sie zum Beispiel here suchen, finden Sie, dass FileSystem tatsächlich eine abstrakte Klasse ist. So würde es mich nicht überraschen, wenn die spezifische Unterklasse, die tatsächlich instanziiert wird an einem Punkt diese leere Methode setPermissions() - basierend auf dem zugrunde liegenden Betriebssystem zum Beispiel.

In jedem Fall ist es eine einfache, aber hässliche Abhilfe: ProcessBuilder verwenden und

hadoop fs -chmod a+w path//to//folder 

aus Java. Und notieren Sie sich:

// TODO: check with next version of hadoop if fs.FileSystem.setPermission() is now implemented 
+0

Es fällt mir schwer zu glauben, dass der mkdirs-Befehl nicht die Dateiberechtigungen gemäß JavaDoc –

+0

@ cricket_007 einstellt. Ich habe etwas auf grepcode gesucht ... und auch ich habe nur eine leere setPermissions() -Methode gefunden. Und die Unterklasse, die ich überprüfte, übersteuerte auch nicht ... – GhostCat

+0

Sehr merkwürdig ... https://github.com/apache/hadoop/blob/release-2.7.1/hadoop-common-project/hadoop-common/src/ main/java/org/apache/hadoop/fs/DateiSystem.java # L2337. Macht mich neugierig, wie die "-chmod" -Flagge tatsächlich funktioniert, dann –