Скрипт, который удаляет все таблицы в Hbase - PullRequest
14 голосов
/ 21 октября 2010

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

disable 'tablename'
drop 'tablename'

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

Ответы [ 6 ]

20 голосов
/ 15 ноября 2012

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

10 голосов
/ 06 июня 2012

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

import happybase

c = happybase.Connection()

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

Для использования этого сценария вам потребуется установить Happybase, и вы можете установить его как:

sudo easy_install happybase
6 голосов
/ 22 октября 2010

Вы можете передавать команды в команду bin/hbase shell.Оттуда вы можете использовать некоторые скрипты для получения имен таблиц и передачи команд отключения / удаления обратно в 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 
1 голос
/ 12 июня 2013

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

return list

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

list.each {|t| disable t;drop t}
0 голосов
/ 24 октября 2015

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

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

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

0 голосов
/ 29 декабря 2010

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

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

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