2015-06-29 3 views
3

Я хочу удалить все таблицы в HBase. Я использую команды оболочки HBase для выполнения этой операции:Сценарий оболочки для выполнения команд hbase - Удаление всех таблиц hbase

$ hbase shell 
> disable_all .* 
> drop_all .* 

Как написать сценарий оболочки для выполнения этих операций?

Примечание: при выполнении вышеуказанных команд он запрашивает подтверждение пользователя i.e y/n перед отключением и удалением всех таблиц.

+1

Есть ли способ удалить эти таблицы силой? т.е. без запроса подтверждения? –

+2

Похоже на то, что это было раньше: http://stackoverflow.com/questions/3990952/a-script-that-deletes-all-tables-in-hbase – Shyam

+0

Да, но скрипт находится в Python. Я хотел написать сценарий оболочки. –

ответ

5

Shell Script: deleteHbaseTables.sh

#!/bin/sh 
echo "disable_all .* " | hbase shell 
echo "drop_all .* " | hbase shell 
+2

это не работает, потому что он запрашивает подтверждение перед отключением и отбрасывая таблицы. –

1

Этот сценарий будет получать все таблицы из HBase и выполнить отключение операции перетаскивания на 1 стол одновременно.

#Creating a temp file to store the output of "list" command. 
echo "list" | hbase shell > tableListSummary.txt 

#fetch only the list of tables and store it in an another temp file. 
tail -1 tableListSummary.txt > tableList.txt 

#Separate tables by commas and iterate to perform disable and drop commands. 
cat tableList.txt | sed -n 1'p' | tr ',' '\n' | while read word; do 
    com=$(echo "$word" | sed 's/[][]//g') 
    table="${com#\"}" 
    table="${table%\"}" 
    echo $table 
    echo "disable '$table'" | hbase shell 
    echo "drop '$table'" | hbase shell 
done 

#removing temporary files 
rm tableListSummary.txt tableList.txt 

Спасибо.

5

Я использую следующие:

#!/bin/sh 
echo -e "disable_all '.*'\ny" | hbase shell -n 
echo -e "drop_all '.*'\ny" | hbase shell -n 

-e флаг эхо заставляет его обрабатывать управляющие последовательности, так что вы можете построить подтверждение в него. -n сообщает оболочке hbase, это неинтерактивный сеанс.

+0

Флаг '-n' очень полезен, поскольку запускать команды из файла и перенаправлять вывод в другой файл будет блокировать оболочку hbase без этого флага. – AnnabellChan

2

Если вы используете версию Hbase с "--non-интерактивный/-п" вариант, например, из Cloudera:

#!/bin/bash 
echo 'list' | hbase shell -n 
status=$? 
if [$status -ne 0]; then 
    echo "The command may have failed." 
fi 

Если вы используете HBase 1.0.0 без «--non-интерактивный ", вы можете загружать команды из файла. Пример от HBase documentation:

echo "create 'test', 'cf'" > ./sample_commands.txt 
hbase shell ./sample_commands.txt 
+0

Привет, Angelcervera. Этот« статус »не работает, потому что статус, о котором вы упоминали, действительно проверяет успешное выполнение команды unix не фактическое выполнение hbase. Любое заданное время $? проверяет выполнение команды unix. Пожалуйста, исправьте, если я ошибаюсь – Karthi

+0

Привет @karthi Я использовал его, и я не помню, чтобы у меня были проблемы. Фактически, этот код из документации Cloudera. Ссылка на источник находится в ответе непосредственно перед фрагментом кода. – angelcervera

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