2013-05-29 2 views
0

Мне было интересно, можно ли сбросить сообщения из CLI Hive в stderr по мере их возникновения. В настоящее время я пытаюсь выполнить запрос многоступенчатого (только образец не фактический):Ошибки слияния в отношении многоуровневых задач для stderr в Python

SELECT COUNT(*) FROM ( 
SELECT user from users 
where datetime = 05-10-2013 
UNION ALL 
SELECT user from users 
where datetime = 05-10-2013 
) a 

Это запустит 3 рабочих места, однако, если работа 1 терпит неудачу, потому что он был убит, я не хочу работать job 2. В настоящее время мой код похож на следующий, однако куст не записывается в stderr, пока все подзапросы не закончатся, а затем он возвращает ошибку.

def execute_hive_query(query): 
    return_code = None 
    cmd = ["hive", "-e", query] 
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    while return_code is None: 
     out = proc.stdout.read() 
     error = proc.stderr.read() 
     handle_hive_exception(out,error) 
     time.sleep(10) 
     return_code = proc.poll() 

def handle_hive_exception(stdout,stderr): 
     if stderr != '': 
     raise Exception(stderr) 

Спасибо!

+0

'.stdout.read()' будет блокироваться до тех пор, пока подпроцесс не завершит свою стандартную остановку, которая обычно возникает, когда подпроцесс завершается. Вам нужно неблокирующее чтение, которое может быть реализовано с помощью [threads, select.select, или fctnl и т. Д.] (Http://stackoverflow.com/q/375427/4279). Кроме того, вы можете столкнуться с проблемой буферизации блоков (http://stackoverflow.com/a/12471855/4279). – jfs

ответ

0

Я подозреваю, что этапы запроса выполняются параллельно. Если они выполняются серийно, то отказ одного из них приведет к сбою всей работы.

Попробуйте установить hive.exec.parallel=false в ваш запрос.

+0

Нет, что не работает, такой же выпуск. Даже если это сработает, это не будет долговременным решением, потому что я хочу, чтобы запросы выполнялись параллельно. Я просто хочу, чтобы ошибки были сброшены до стандартной ошибки. Я открыл вопрос о Jive Hive здесь: https://issues.apache.org/jira/browse/HIVE-4631 –