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
. После этого он завершает работу.