Средство просмотра файлов HDFS

Могу ли я иметь средство просмотра файлов на HDFS?

Сценарий: файлы постоянно загружаются в HDFS. Я хочу запустить задание Spark, как только число файлов достигнет порогового значения (это может быть количество файлов или размер файлов).

Можно ли реализовать средство просмотра файлов на HDFS для достижения этой цели. Если да, то кто-нибудь может предложить способ сделать это? Какие варианты доступны? Может ли Zookeeper или Oozie сделать это?

Любая помощь будет оценена. Спасибо.

3 ответа

Решение

Представлен Hadoop 2.6 DFSInotifyEventInputStream что вы можете использовать для этого. Вы можете получить экземпляр этого от HdfsAdmin а потом просто позвони .take() или же .poll() чтобы получить все события. Типы событий включают удаление, добавление и создание, которые должны охватывать то, что вы ищете.

Вот основной пример. Убедитесь, что вы запускаете его как hdfs Пользователь в качестве интерфейса администратора требует наличия HDFS root.

public static void main( String[] args ) throws IOException, InterruptedException, MissingEventsException
{
    HdfsAdmin admin = new HdfsAdmin( URI.create( args[0] ), new Configuration() );
    DFSInotifyEventInputStream eventStream = admin.getInotifyEventStream();
    while( true ) {
        EventBatch events = eventStream.take();
        for( Event event : events.getEvents() ) {
            System.out.println( "event type = " + event.getEventType() );
            switch( event.getEventType() ) {
                case CREATE:
                    CreateEvent createEvent = (CreateEvent) event;
                    System.out.println( "  path = " + createEvent.getPath() );
                    break;
                default:
                    break;
            }
        }
    }
}

Вот пост в блоге, который освещает это более подробно:

http://johnjianfang.blogspot.com/2015/03/hdfs-6634-inotify-in-hdfs.html?m=1

Оози координатор может сделать это. Действия координатора Oozie могут быть инициированы в зависимости от доступности данных. Напишите данные, вызванные координатором. Действия координатора запускаются на основе флага done. флаг done-flag - это пустой файл. Поэтому, когда ваш порог будет достигнут, напишите пустой файл в каталог.

Старая ветка... На случай, если кто-то захочет сделать это в Scala

import java.net.URI

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hdfs.client.HdfsAdmin
import org.apache.hadoop.hdfs.inotify.Event.{AppendEvent, CreateEvent, RenameEvent}


object HDFSTest extends App {
  val admin = new HdfsAdmin( URI.create( "hdfs://namenode:port" ), new Configuration() )
  val eventStream = admin.getInotifyEventStream()

  while( true ) {
    val events =  eventStream.poll(2l, java.util.concurrent.TimeUnit.SECONDS)
    events.getEvents.toList.foreach { event ⇒
      println(s"event type = ${event.getEventType}")
      event match {
        case create: CreateEvent ⇒
          println("CREATE: " + create.getPath)

        case rename: RenameEvent ⇒
          println("RENAME: " + rename.getSrcPath + " => " + rename.getDstPath)

        case append: AppendEvent ⇒
          println("APPEND: " + append.getPath)

        case other ⇒
          println("other: " + other)
      }
    }
  }
}

В случае, если кто-то хочет использовать олицетворенного пользователя... установите env var: HADOOP_USER_NAME=user-name

Да, вы можете сделать это с помощью Inotification. Вам просто нужно получить подробную информацию о транзакции HDFS через inotifyier, чтобы лучше понять эту ссылку.

Другие вопросы по тегам