Библиотека Hadoop импортирована, но не может установить метод "get" в FyleSystem - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь настроить вызов HDFS, чтобы получить файл из него, используя FileSystem, чтобы сделать это:
FileSystem fs = new FileSystem.get(new URI.create(uri), conf);

Но я получаю эти две ошибки, несмотря на то, что я вызвал всебиблиотеки

    Error:(46, 39) java: cannot find symbol
    symbol:   class get
    location: class org.apache.hadoop.fs.FileSystem

    Error:(46, 47) java: cannot find symbol
    symbol:   method create(java.lang.String)
    location: class org.apache.commons.httpclient.URI

Это для версии hadoop 2.7.7.Я уже пытался импортировать библиотеку отверстий org.apache.hadoop.fs.*;, но метод get и create все еще отсутствует, когда я пытаюсь использовать их в строке следующим образом: FileSystem fs = new FileSystem.get(URI.create(usi), conf)

import org.apache.commons.httpclient.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;   

public class Test { 
  public static void main(String []args) {

    String uri = "hdfs://localhost:9000/data.json";
    Configuration conf = new Configuration();

    //cannot find symbol get
    //Cannot find symbol create
    FileSystem fs = new FileSystem.get(new URI.create(uri), conf);

    InputStream in = null;

    try {
        in = fs.open(new Path(uri));
        IOUtils.copyBytes(in, System.out, 4096, false);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        IOUtils.closeStream(in);
    }
  }
}

А вот мой файл POM.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.boeing.bedl</groupId>
<artifactId>IngestionData</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.7</version>
    </dependency>

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-yarn-common</artifactId>
        <version>2.7.7</version>
    </dependency>

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-core</artifactId>
        <version>2.7.7</version>
    </dependency>

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-common</artifactId>
        <version>2.7.7</version>
    </dependency>

   </dependencies>
</project>

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

У вас две проблемы.Исходя из ответа @Веселина Давыдова, вы должны изменить импорт на java.net.URI:

import org.apache.commons.httpclient.URI;

на

import java.net.URI;

Во-вторых, вы используете как новый оператор, так и статическую фабрику.Метод:

FileSystem fs = new FileSystem.get(new URI.create(uri), conf);

, поэтому вы должны использовать фабрику вместо:

FileSystem fs = FileSystem.get(URI.create(uri), conf);
0 голосов
/ 12 февраля 2019

Я бы сказал, что проблема в том, что вы импортировали import org.apache.commons.httpclient.URI; вместо java.net.URI

Вот почему вы получаете ошибку за отсутствующий метод .create , который является частью Java.net.URI, и вы получаете ошибку в методе .get , поскольку вы передаете неверный тип URI.

(я бы догадался, какой-нибудь автоматический импорт IDE? :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...