2016-08-24 1 views
0

Also ich probiere das Cascading Framework aus und konnte Apps lokal ausführen. Als nächsten Schritt möchte ich Cascading verwenden, um Dateien von S3 auf das lokale Dateisystem herunterzuladen. Ich plane, FileTap zu verwenden. Als ich googlen habe ich S3FS gefunden und sieht aus wie es ist veraltet. Kann mir jemand in die richtige Richtung zeigen? Mit anderen Worten, was ist der richtige Weg, um ein FileTap für Amazon S3 mit Zugriffs-ID und geheimen Schlüssel wie Zeug zu erstellen.Cascading Tap Konfiguration für Amazon S3 zu lokalem Dateisystem

+0

https://github.com/s3fs-fuse/s3fs-fuse ist noch in aktiver Entwicklung. –

Antwort

1

Obwohl dieser Code für den HadoopFlowConnector gilt, funktioniert dies mit dem Local Flow-Connector, wenn Sie FileTap verwenden.

public class Main { 
       public void run(String[] args) { 
        Properties properties = new Properties(); 
        String accessKey = args[0]; 
        String secretKey = args[1]; 
        // better put these keys to hadoop xml file 
        // for block file system 
        properties.setProperty("fs.s3.awsAccessKeyId", accessKey); 
        properties.setProperty("fs.s3.awsSecretAccessKey", secretKey); 
        // for s3 native file system 
        // properties.setProperty("fs.s3n.awsAccessKeyId", accessKey); 
        // properties.setProperty("fs.s3n.awsSecretAccessKey", secretKey); 
        // properties.setProperty("fs.defaultFS", "hdfs://localhost:8020/"); 
        // properties.setProperty("fs.permissions.umask-mode", "007"); 
        AppProps.setApplicationJarClass(properties, Main.class); 
        HadoopFlowConnector flowConnector = new HadoopFlowConnector(
         properties); 
        String input = "s3://my-bucket/my-log.csv"; 
        // If using the native S3 
        // String input = "s3n://my-bucket/my-log.csv"; 

        Tap inTap = new Hfs(new TextDelimited(false, ";"), input); 
        Pipe copyPipe = new Pipe("copy"); 
        Tap outTap = new Hfs(new TextDelimited(false, ";"), 
         "data/output"); 
        FlowDef flowDef = FlowDef.flowDef() 
         .addSource(copyPipe, inTap) 
         .addTailSink(copyPipe, outTap); 
        flowConnector.connect(flowDef).complete(); 
       } 

       public static void main(String[] args) { 
        new Main().run(args); 
       } 
      } 

Code mit freundlicher Genehmigung http://whiteboxdeveloper.blogspot.com/2015/01/processing-data-from-aws-s3-using.html.

Ich habe gerade die S3N String Input kommentierte Zeile hinzugefügt. Da ich S3N basierend auf dem Zugriff verwendet habe, habe ich die S3N-Funktionen auskommentiert und benutzt.