A script, который удаляет все таблицы в Hbase

Я могу сказать, что hbase отключает и удаляет определенные таблицы, используя:

disable 'tablename'
drop 'tablename'

Но я хочу удалить все таблицы в базе данных без жесткого кодирования имен любой из таблиц. Есть ли способ сделать это? Я хочу сделать это с помощью утилиты командной строки ./hbase shell, а не через Java или Thrift.

Ответ 1

disable_all и drop_all были добавлены как команды в оболочке Ruby HBase. Эти команды были добавлены в jira HBASE-3506 Эти команды используют регулярное выражение таблиц для отключения/удаления. И они попросят подтверждения, прежде чем продолжить. Это должно сделать довольно простое удаление таблиц и не требует внешних библиотек или сценариев.

Ответ 2

У меня есть удобный script, который делает именно это, используя библиотеку Python Happybase:

import happybase

c = happybase.Connection()

for table in c.tables():
  c.disable_table(table)
  c.delete_table(table)
  print "Deleted: " + table

Вам понадобится Happybase, чтобы использовать этот script, и вы можете установить его как:

sudo easy_install happybase

Ответ 3

Вы можете передать команды команде bin/hbase shell. Оттуда вы можете использовать некоторые скрипты, чтобы захватить имена таблиц и передать команды disable/delete обратно в hbase.

то есть.

echo "list" | bin/hbase shell | ./filter_table_names.pl > table_names.txt
./turn_table_names_into_disable_delete_commands.pl table_names.txt | bin/hbase shell 

Ответ 4

Есть взлома. Откройте файл $HBASE_HOME/lib/ruby ​​/shell/commands/list.rb и добавьте ниже строку внизу метода команды.

return list

После этого команда list возвращает массив имен всех таблиц. И тогда сделайте так.

list.each {|t| disable t;drop t}

Ответ 5

Я не удаляю таблицы через оболочку hbase, но я удаляю их из командной строки,
- удалив мой каталог распределенной файловой системы adoop, затем,
- создание нового чистого распределенного каталога файловой системы,
- форматирование распределенной файловой системы myoop с помощью 'hadoop namenode -format', затем,
- start-all.sh и start-hbase.sh

Ссылка:
http://hadoop.apache.org/common/docs/r0.20.1/api/overview-summary.html#overview_description

Ответ 6

Если вы ищете что-то, что сделает это в "одном слое" через оболочку script, вы можете использовать этот метод:

$ echo 'list.each {|t| disable t; drop t}; quit;' | hbase shell

ПРИМЕЧАНИЕ. Вышеупомянутый был запущен из приглашения оболочки Bash. Он перекликается с командами в hbase shell и выполняет цикл через все таблицы, которые возвращаются из команды list, а затем отключает и удаляет каждую таблицу, когда она итерации через массив, возвращаемый list. После этого он завершает работу.