MiniDFSCluster: неверное расширение схемы тройной косой черты HDFS - PullRequest
0 голосов
/ 03 января 2019

Я использую настройку defaultFS в конфигурации HDFS. Я создаю конфигурацию и затем устанавливаю ее явно.

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

  val config = new Configuration()
  config.set("fs.defaultFS", "hdfs://localhost:8020")
  val fs = FileSystem.get(new URI(filePath), config)

В большинстве случаев код работает нормально, но для filePath с тройной косой чертой я получаю сообщение об ошибке только на нескольких машинах :

 Wrong FS: hdfs:/tmp/hdfstest, expected: hdfs://localhost:8020

Одна косая черта появляется только в сообщении об исключении.

Повсюду в системе я вижу тройную косую черту: hdfs:///tmp/hdfstest. Также для путей типа /tmp/hdfstest без тройной косой черты отлично работает defaultFS.

Буду признателен за любой совет. Заранее спасибо!

UPD: Исключение было замечено в тестах, запущенных на MiniDFSCluster. Во время тестов я использовал один и тот же MiniDFSCluster с разными конфигурациями.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Оказалось, что это была не проблема HDFS, а проблема тестирования MiniDFSCluster. В тестовом наборе я создавал тестовый кластер, а затем проверял различные defaultFS сценарии на нем.

У MiniDFSCluster есть некоторые проблемы из-за совместного использования конфигурации, и определенные варианты использования могут привести к непредвиденным результатам и ложному сбою или прохождению модульных тестов.

Для получения дополнительной информации в Apache есть билет .

0 голосов
/ 04 января 2019

Если вы хотите использовать fs.defaultFS, вам не следует указывать какую-либо схему или полномочия, поэтому ваши пути должны выглядеть как /path/to/file.Использование URI со схемой, такой как hdfs://localhost:port/path/to/file, будет игнорировать FS по умолчанию.Вы никогда не должны использовать схему HDFS без хоста / порта, например hdfs:/// - вместо этого вы должны либо полагаться на стандартную FS, либо явно указывать комбинацию хост / порт.

...