2013-05-29 1 views
0

하이브 CLI에서 발생하는 메시지를 표준 오류로 플러시 할 수 있는지 궁금합니다. 현재 내가 다단계 쿼리를 실행하려고 (단지 샘플이 아닌 실제) :파이썬에서 stderr로 다단계 작업을 플러시 오류가 발생합니다.

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 작업을 시작합니다 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()'는 서브 프로세스가 종료 될 때까지 발생하는 stdout을 닫을 때까지 차단합니다. [스레드, select.select 또는 fctnl 등] (http://stackoverflow.com/q/375427/4279)을 사용하여 구현할 수있는 비 차단 읽기가 필요합니다. 또한 [블록 버퍼링 문제] (http://stackoverflow.com/a/12471855/4279)가 발생할 수 있습니다. – jfs

답변

0

쿼리 단계가 병렬로 실행되고있는 것으로 생각됩니다. 그들이 순차적으로 실행되고 있다면, 실패하면 전체 작업이 실패하게됩니다.

검색어에 hive.exec.parallel=false을 설정하십시오.

+0

아니, 작동하지 않았다, 같은 문제. 그것이 작동하더라도 쿼리가 병렬로 실행되기를 원하기 때문에 장기적인 수정이 아닐 것입니다. 난 그냥 표준 오류로 플러시 오류 싶습니다. 하이브의 Jira에 관한 문제를 여기에서 열었습니다 : https://issues.apache.org/jira/browse/HIVE-4631 –

관련 문제