Я изо всех сил пытаюсь получить свою конфигурацию прямо. Всякий раз, когда я пытаюсь найти файл (например, 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;
}
}
}