2014-11-18 3 views
2

У нас есть экземпляр Accumulo, и в некоторых таблицах есть данные, которые были написаны с помощью токенов видимости, которые не имеют ни один из наших текущих пользователей. По разным причинам мы не знаем, что все строки/токены видимости находятся внутри таблиц. Из-за этого у нас есть осиротевшие данные. Является ли их способом для пользователя или другого пользователя Accumulo определить, какие строки видимости для данных в данной таблице не имеют те, которые уже назначены им?Как определить личность таблицы Accumulo?

ответ

1

Существует несколько способов, и большинство из них связано с написанием кода.

  1. Вы можете изменить Accumulo, чтобы отключить фильтрацию видимости (требуется модификация VisibilityFilter, встроенного и обязательного итератора).
  2. Вы можете написать собственный главный итератор уплотнения, который преобразует видимость всех записей в нечто вроде «SUPERUSER | OLDLABEL», а затем предоставит авторизацию «SUPERUSER» пользователю, который вы хотите проверить данные. Вы также можете написать крупный итератор уплотнения, который просто сообщает, какие видимости он видит в отдельном журнале или что-то еще, что может быть проверено позже. (требуется разрешение alter-table и возможность добавить ваш итератор в путь к классам).
  3. Вы можете напрямую прочитать содержимое файлов (требуется прямой доступ к базовой распределенной файловой системе, см. RFile Reader и связанные классы или this other answer).
+0

Вы можете уточнить, что вы имели в виду, когда вы сказали «встроенный и обязательный итератор»? Является ли VisibilityFilter всегда примененным Accumulo, по умолчанию? В частности, если я использовал оболочку Accumulo и запускал сканирование в таблице (например, сделал «scan -t testtable»), включился ли VisibilityFilter? Я добавлял некоторый код в VisibilityFilter, чтобы попытаться понять, что он делает, и протестировал его с помощью оболочки и выполнил сканирование, и это не выглядело так, как вызывается InvibilityFilter. – user555303

+0

Файл VisibilityFilter всегда применяется Accumulo. Вам нужно будет отредактировать исходный код, чтобы изменить это поведение. Есть два VisibilityFilters. Существует встроенный «системный», который строго обеспечивает защиту данных, а затем существует «пользовательская» версия, которая может быть применена для вторичной фильтрации пользователем в стеке итератора. Вероятно, вы, вероятно, изменили последнее. Тем не менее, также возможно, что кто-то может наблюдать такое же поведение даже после редактирования правильного, если им не удалось надлежащим образом распространить обновленный код на путь класса компонентов сервера и перезапустить их. – Christopher

+0

Я действительно нашел о двух классах в эти выходные (я думал, что представляю)! И да, теперь, когда я добавил код в систему VisibilityFilter, я могу получить вывод журнала. Спасибо за ваш ответ, хотя, как он объясняет, почему есть два из них! – user555303

3

Вам нужно будет прочитать базовые RFiles непосредственно, чтобы это сделать. Один из способов сделать это - использовать включенную утилиту администрирования PrintInfo. Так как пользователь, который может читать файлы для отказа от HDFS, запустите:

accumulo org.apache.accumulo.core.file.rfile.PrintInfo --dump [hdfs:///path/to/files/xxx.rf] 

Вы должны найти файлы, которые соответствуют вашей таблице, возможный путем сканирования таблицы метаданных для столбца «файл» семьи. Однако специфика будет зависеть от того, какая версия Accumulo вы используете.

Смежные вопросы