Я пытаюсь получить доступ к своей HDFS с помощью кода Java, но не могу заставить его работать... после 2 дней борьбы я думаю, что пришло время обратиться за помощью.
Это мой код:
Configuration conf = new Configuration();
conf.addResource(new Path("/HADOOP_HOME/conf/core-site.xml"));
conf.addResource(new Path("/HADOOP_HOME/conf/hdfs-site.xml"));
FileSystem hdfs = FileSystem.get(conf);
boolean success = hdfs.mkdirs(new Path("/user/cloudera/testdirectory"));
System.out.println(success);
Я получил этот код из здесь и здесь. К сожалению, объект hdfs — это всего лишь объект LocalFileSystem, так что что-то должно быть не так. Похоже, это именно то, что написал Реджив. на его сайте:
[...] Если вы не назначите конфигурации объекту conf (используя файл hadoop xml), ваша операция HDFS будет выполняться в локальной файловой системе, а не в HDFS. [...]
С абсолютными путями я получаю тот же результат.
conf.addResource(new Path("/etc/hadoop/conf/core-site.xml"))
Это библиотека, которую я сейчас использую:
hadoop-core-2.0.0-mr1-cdh4.4.0.jar
Я слышал, что ядро Hadoop было разделено на несколько библиотек, поэтому я также попробовал следующие библиотеки:
hadoop-common-2.0.0-alpha.jar
hadoop-mapreduce-client-core-2.0.2-alpha.jar
Я использую Cloudera-CDH4.4.0, поэтому Hadoop уже установлен. Через консоль все работает нормально. Например:
hadoop fs -mkdir testdirectory
Так что все должно быть настроено правильно по умолчанию.
Я надеюсь, что вы, ребята, можете мне помочь... эта штука сводит меня с ума! Крайне обидно не справиться с такой простой задачей.
Заранее большое спасибо за любую помощь.