Замена файла HDFS, когда другие приложения обращаются к данным - PullRequest
0 голосов
/ 09 декабря 2018

Я работаю над подходом к обновлению файлов HDFS, в то время как другие потребители / приложения получают доступ к данным.У меня есть каталог HDFS, в котором есть файл, доступный для пользователей, который мне нужно каждый день заменять последними входящими данными, мой процесс обновления всего несколько секунд / миллисекунд.Но все же проблема заключается в том, что задания, которые уже считывают эти данные для аналитики, выполняются благодаря этому процессу обновления.Мой подход к обновлению файлов состоит в том, чтобы вместо записи полученных результатов заданий в фактические местоположения данных, к которым имеют доступ пользователи, я сначала записываю данные во временное местоположение, а затем заменяю их на API замены файла hdfs.Но все же моя проблема не решена.Пожалуйста, предложите какое-либо решение или обходной путь для замены файлов HDFS без влияния на последующие.

      val conf: Configuration = new Configuration()
      val fs: FileSystem = FileSystem.get(conf)
      val currentDate = java.time.LocalDate.now
      val destPath = outputPath + "/data"
      val archivePath = outputPath + "/archive/" + currentDate

      val dataTempPath = new Path(destPath + "_temp")
      val dataPath = new Path(destPath)
      if(fs.exists(dataPath)){
        fs.delete(dataPath, true)
      }
      if(fs.exists(dataTempPath)){
        fs.rename(dataTempPath, dataPath)
      }

      val archiveTempData = new Path(archivePath+"_temp")
      val archive = new Path(archivePath)
      if(fs.exists(archive)){
        fs.delete(archive,true)
      }
      if(fs.exists(archiveTempData)){
        fs.rename(archiveTempData, archive)
      }

1 Ответ

0 голосов
/ 10 декабря 2018

Более простой подход

Используйте 2 местоположения HDFS циклически для каждого источника или цели для загрузки с таблицами def t1_x и t2_x соответственно, и используйте view_x для переключения между t1_x и t2_x аналогичным образом.

Запросы всегда должны использовать view_x.

Вы можете своевременно очистить более неиспользуемые местоположения HDFS до следующего цикла.

Подсказка - оставить на некоторое время новые и старые данные.

Комментарий для создания Единственный недостаток - это когда набор запросов должен работать со старыми версиями данных.Если измененные данные имеют тип «добавлено», то нет проблем, но если они могут быть перезаписаны, возникает проблема.

Более сложный подход

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

, которое предназначено для версии данных (с помощью разделения) с некоторым значением.

И имейте контрольную таблицу с current_version и подберите это значение и используйте его во всех связанных запросах, пока вы не сможете использовать новый current_version.

А потом сделай свое обслуживание.

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