2010-10-21 21 views
13

que puedo decir hbase desactivar y eliminar tablas particulares usando:Un script que borra todas las tablas de hbase

disable 'tablename' 
drop 'tablename' 

Pero quiero borrar todas las tablas de la base de datos sin codificar los nombres de cualquiera de las tablas . ¿Hay alguna forma de hacer esto? Quiero hacer esto a través de la utilidad de línea de comandos ./hbase shell, no a través de Java o Thrift.

Respuesta

18

disable_all y drop_all se han añadido como comandos en el shell HBase rubí. Estos comandos se agregaron en jira HBASE-3506 Estos comandos toman una expresión regular de tablas para deshabilitar/descartar. Y pedirán confirmación antes de continuar. Eso debería hacer que dropear muchas tablas sea bastante fácil y no requiera bibliotecas externas o secuencias de comandos.

+4

Tenga en cuenta que 'disable_all '*. *'' es el comando apropiado para deshabilitar todas las tablas de HBase. Al usar 'disable_all '*'', recibirá una confirmación de deshabilitación incorrecta de HBase; este es un [problema conocido] (https://issues.apache.org/jira/browse/HBASE-6642) corregido en HBase 0.94.4 en adelante. –

+0

Gracias Emaad por ese consejo. Puedo confirmar que todavía no está arreglado en 0.94.5. –

+2

'disable_all '. *'' Funciona –

6

Puede canalizar comandos al comando bin/hbase shell. A partir de ahí, puede utilizar algunos scripts para obtener los nombres de las tablas y canalizar los comandos disable/delete hacia hbase.

es decir

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 
+0

Sí, pero eso depende de qué salida proporcione el shell hbase. Esperaba que hbase tuviera algo incorporado. –

+0

No encontrará esa funcionalidad del shell y el método de baja es lo más parecido que obtendrá. No creo que haya mucho en el camino de los planes para mejorar el shell actual (que es bastante malo). Soy consciente de que quieres evitar el ahorro/java, pero tal vez si puedes publicar tus razones para evitarlos, ¿se podría sugerir otra alternativa? – juhanic

0

No estoy borrando las tablas a través de la cáscara hbase pero su eliminación de la línea de comandos,
- borrar mi directorio de sistema de archivos distribuido Hadoop, a continuación,
- la creación de un nuevo directorio de sistema de archivos distribuido hadoop limpia, entonces,
- hadoop formato a mi sistema de archivos distribuido con '-format hadoop NameNode', entonces,
- start-all.sh y start-hbase.sh

Referencia:
http://hadoop.apache.org/common/docs/r0.20.1/api/overview-summary.html#overview_description

9

que tiene un guión muy útil que hace exactamente esto, el uso de la biblioteca de Python Happybase:

import happybase 

c = happybase.Connection() 

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

Tendrá Happybase instalado para utilizar este script, y se puede instalar como :

sudo easy_install happybase 
+1

happybase es realmente genial ... de hecho, lo estoy usando para monitorear los propósitos de hbase ... –

+1

Esto también se puede hacer de una vez: connection.delete_table ('table-name', disable = True) http: // happybase. readthedocs.org/en/latest/api.html#happybase.Connection.delete_table –

1

Hay un truco. Abra el archivo $ HBASE_HOME/lib/ruby ​​/ shell/commands/list.rb y agregue debajo de la línea en la parte inferior del método de comando.

return list 

Después de eso, el comando list devuelve una matriz de nombres de todas las tablas. Y luego haz así.

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

Si usted está buscando algo que va a hacer esto en un 'one-liner' a través de un script que puede utilizar este método:

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

NOTA: Lo anterior se ha ejecutado desde el indicador de Bash shell. Hace eco de los comandos en hbase shell y realiza un ciclo por todas las tablas que se devuelven desde el comando list, y luego deshabilita & coloca cada tabla a medida que recorre la matriz que list devolvió. Una vez hecho, se cierra.

Cuestiones relacionadas