Подтвердить что ты не робот

Запись данных в Hadoop

Мне нужно записать данные в Hadoop (HDFS) из внешних источников, таких как окно. Прямо сейчас я копировал данные в namenode и с помощью команды HDFS put запустил ее в кластер. В моем просмотре кода я не видел API для этого. Я надеюсь, кто-то может показать мне, что я ошибаюсь, и есть простой способ закодировать внешние клиенты против HDFS.

4b9b3361

Ответ 1

Установите Cygwin, установите Hadoop локально (вам просто нужны двоичные файлы и конфиги, указывающие на ваш NN - нет необходимости фактически запускать службы), запустите hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/

Вы также можете использовать новый рабочий стол Cloudera для загрузки файла через веб-интерфейс, хотя это не может быть хорошим вариантом для гигантских файлов.

Там также наложение WebDAV для HDFS, но я не знаю, насколько это стабильно/надежно.

Ответ 2

В Java есть API. Вы можете использовать его, включив в проект проект Hadoop. JavaDoc весьма полезен в целом, но, конечно, вы должны знать, что вы ищете * g * http://hadoop.apache.org/common/docs/

Для вашей конкретной проблемы взгляните на: http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/fs/FileSystem.html (это относится к последней версии, обратитесь к другим JavaDocs для разных версий!)

Типичным вызовом будет: Filesystem.get(new JobConf()).create(new Path("however.file")); Который возвращает вам поток, с которым вы можете обращаться с помощью обычного JavaIO.

Ответ 3

Для проблемы загрузки данных, которые мне нужно было поместить в HDFS, я решил обойти эту проблему.

Вместо того, чтобы загружать файлы в HDFS с сервера, на котором они проживали, я написал задание Java Map/Reduce, в котором картограф читал файл с файлового сервера (в этом случае через https), а затем записывал его непосредственно в HDFS ( через Java API).

Список файлов считывается с ввода. Затем у меня есть внешний script, который заполняет файл списком файлов для извлечения, загружает файл в HDFS (используя hasoop dfs -put), а затем запускает работу с картой/уменьшением с приличным количеством карт.

Это дает мне отличную производительность передачи, так как несколько файлов читаются/записываются одновременно.

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

Ответ 4

Примерно через 2 года после моего последнего ответа есть две новые альтернативы - Hoop/HttpFS и WebHDFS.

Что касается Hoop, он был впервые анонсирован в блоге Cloudera и может быть загружен с github. Мне удалось получить эту версию, чтобы успешно поговорить, по крайней мере, с Hadoop 0.20.1, возможно, она может поговорить и с более старыми версиями.

Если вы используете Hadoop 0.23.1, который на момент написания еще не освобожден, Hoop вместо этого является частью Hadoop в качестве своего собственного компонента, HttpFS. Эта работа была выполнена как часть HDFS-2178. Hoop/HttpFS может быть прокси не только для HDFS, но и для других совместимых с Hadoop файловых систем, таких как Amazon S3.

Hoop/HttpFS работает как самостоятельная служба.

Там также WebHDFS, который выполняется как часть служб NameNode и DataNode. Он также предоставляет REST API, который, если я правильно понимаю, совместим с API HttpFS. WebHDFS является частью Hadoop 1.0, и одна из его основных функций заключается в том, что он обеспечивает локальность данных - когда вы делаете запрос на чтение, вы будете перенаправлены на компонент WebHDFS в datanode, где находятся данные.

Какой компонент выбрать, зависит от вашей текущей настройки и того, что вам нужно. Если теперь вам нужен интерфейс HTTP REST для HDFS, и вы используете версию, которая не включает WebHDFS, то, начиная с Hoop из репозитория github, это самый простой вариант. Если вы используете версию, которая включает в себя WebHDFS, я бы пошел на это, если вам не нужны некоторые из функций, которые Hoop не имеет для WebHDFS (доступ к другим файловым системам, ограничение полосы пропускания и т.д.).

Ответ 5

Кажется, для этой страницы выделена специальная страница http://wiki.apache.org/hadoop/MountableHDFS:

Эти проекты (перечисленные ниже) позволяют монтировать HDFS (на большинстве вкусов Unix) в качестве стандартной файловой системы с использованием команды mount. После установки пользователь может работать с экземпляром hdfs, используя стандартные утилиты Unix, такие как "ls", "cd", "cp", "mkdir", "find", 'grep', или использовать стандартные библиотеки Posix, такие как open, write, read, close от C, С++, Python, Ruby, Perl, Java, bash и т.д.

Позже он описывает эти проекты

  • contrib/fuse-dfs построен на плавких предохранителях, некоторые C-клеи, libhdfs и hadoop-dev.jar
  • fuse-j-hdfs построен на плавких предохранителях, предохранителях для java и hasoop-dev.jar
  • hdfs-fuse - проект кода google очень похож на contrib/fuse-dfs
  • webdav - hdfs, отображаемый как ресурс webdav resourceR - содержит закрытую файловую систему, совместимую с hdfs, которая поддерживает чтение/запись Доступ к NFS
  • HDFS NFS Proxy - экспортирует HDFS как NFS без использования плавкого предохранителя. Поддерживает Kerberos и перезаписывает записи, поэтому они записываются в hdfs последовательно.

Я не пробовал ни одного из них, но я скоро обновлю ответ, поскольку у меня есть такая же потребность, как OP

Ответ 6

Теперь вы также можете использовать Talend, который включает компоненты для интеграции Hadoop.

Ответ 7

вы можете попробовать установить HDFS на свой компьютер (назовите его machine_X), где вы выполняете свой код, а machine_X должен иметь бесконечно возможное соединение с HDFS. Проверьте это, https://wiki.apache.org/hadoop/MountableHDFS

Ответ 8

Вы также можете использовать HadoopDrive (http://hadoopdrive.effisoft.eu). Это расширение оболочки Windows.