Как подключить go Google Storage с oop по Java API? - PullRequest
0 голосов
/ 21 апреля 2020

Я изо всех сил пытаюсь получить свою конфигурацию прямо. Всякий раз, когда я пытаюсь найти файл (например, gs: //lab/project/input/data.csv), хранящийся в хранилище Google, он говорит:

Исключение в потоке "main" java .lang.IllegalArgumentException: Неправильная FS: gs: //lab/project/input/data.csv, ожидается: file: ///

Я пробовал некоторые решения из Inte rnet, но я не мог понять это. Теперь у меня небольшой беспорядок в моем решении, и я схожу с ума. Пожалуйста, помогите!

import java.util.Scanner;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class Preparation {
    //hdfs
    static Configuration config = null;
    static FileSystem dfs = null;
    //local
    static Configuration conf = null;
    // static FileSystem localFileSystem = null;
    static FileSystem gaFileSystem = null;

    public Preparation() throws IOException {
        //hdfs conf
        config = new Configuration();
        config.addResource(new Path("/usr/local/hadoop/etc/hadoop/core-site.xml"));
        config.addResource(new Path("/usr/local/hadoop/etc/hadoop/hdfs-site.xml"));
        config.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
        config.set("fs.file.impl",
                org.apache.hadoop.fs.LocalFileSystem.class.getName());
        dfs = FileSystem.get(config);
        //local conf
        conf = new Configuration();
        Path p = new Path("gs://lab/project/");
        FileSystem gaFileSystem = p.getFileSystem(conf);
        gaFileSystem.exists(p);
        // localFileSystem = FileSystem.get(conf);
    }

    public static Configuration getConfiguration() throws IOException {
        //hdfs conf
        config = new Configuration();
        config.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
        config.addResource(new Path("/usr/local/hadoop/conf/hdfs-site.xml"));
        config.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
        config.set("fs.file.impl",
                org.apache.hadoop.fs.LocalFileSystem.class.getName());
        return config;
    }

    public static void main(String... a) throws IOException {
        new Preparation();
        Scanner user_input = new Scanner(System.in);
        System.out.println("Provide your new project name: ");
        String project_name = user_input.next();
        System.out.println("Provide files to upload names: ");
        String files_names = user_input.next();
        copyFromLocalToHdfs(files_names, project_name + "/input/");
    }
    public static boolean copyFromLocalToHdfs(String sourceFile, String hdfsfile)
            throws IOException {
        //local
        Configuration conf = new Configuration();
        conf.addResource(new Path("/home/user/hadoop/conf/core-site.xml"));
        conf.addResource(new Path("/home/user/hadoop/conf/hdfs-site.xml"));
        Path p = new Path("gs://lab/project/");
        FileSystem gaFileSystem = p.getFileSystem(conf);
        gaFileSystem.exists(p);
        // FileSystem localFileSystem = FileSystem.getLocal(conf);
        Path src = gaFileSystem.makeQualified(new Path(sourceFile));
        //hdfs
        FileSystem dfs = FileSystem.get(config);
        if (dfs.exists(new Path(hdfsfile))) {
            dfs.delete(new Path(hdfsfile),true);
        }
        if (gaFileSystem.exists(src)) {
            Path dst = new Path(hdfsfile);
            dfs.copyFromLocalFile(src, dst);
            return true;
        } else{
            System.out.println("The local directory or the file doesn't exists - " + sourceFile);
            return false;
        }
    }
}
...