2014-09-03 1 views
3

Для вызова оболочки снова требуется время, я хочу выполнить несколько команд, вызвав оболочку hbase once.Below code запускает только один запрос.Запуск многократного запроса на оболочку Hbase без вызова оболочки hbase снова

cmd="echo \"put 'test', 'row1', 'cf:a', 'value1'\"| hbase shell" 

Я хочу запустить несколько запросов в одном вызове оболочки hbase.

put 'test', 'row1', 'cf:a', 'value1' 
put 'test', 'row2', 'cf:b', 'value2' 
put 'test', 'row3', 'cf:c', 'value3' 

как я могу это достичь?

ответ

4

Есть 4 варианта я знаю

Вариант 1: точка с запятой

echo "put 'test','row1','cf:a','value1'; put 'test','row2','cf:b','value2'; put 'test','row3','cf:c','value3'" | hbase shell -n 

Вариант 2: новые строки

echo -e "put 'test','row1','cf:a','value1'\nput 'test','row2','cf:b','value2'\nput 'test','row3','cf:c','value3'" | hbase shell -n 

Вариант 3: EXEC

exec hbase shell -n << EOF 
put 'test', 'row1', 'cf:a', 'value1' 
put 'test', 'row2', 'cf:b', 'value2' 
put 'test', 'row3', 'cf:c', 'value3' 
EOF 

Вариант 4: внешний файл

echo "put 'test', 'row1', 'cf:a', 'value1'" > tmpFile 
echo "put 'test', 'row2', 'cf:b', 'value2'" >> tmpFile 
echo "put 'test', 'row3', 'cf:c', 'value3'" >> tmpFile 
hbase shell -n tmpFile 
# obviously this also works: cat tmpFile | hbase shell -n 
rm tmpFile 

ли включать -n аргумент до вас и вашего случая использования , Он инструктирует оболочку прекратить выполнение после первой неудачной команды и выйти с ненулевым кодом выхода. Он был добавлен с HBASE-11658.

Я лично предпочитаю вариант 3, так как он доступен для чтения и без использования временного файла.

3

Попробуйте использовать -e для echo:

echo -e "put ...\n put ...\n" 
+0

где я могу найти информацию о опции '-e'. Он отлично работает, но об этом ничего не говорится в man-странице. – akmal

+0

Не знаю о вашей man-странице, но у меня она есть. Также [die.net] (http://linux.die.net/man/1/echo). Это «разрешает [s] интерпретацию обратных слэшей». – Keegan

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