[HADOOP] 쉘 스크립트를 사용하여 HiveQL 쿼리의 결과를 CSV로 출력하려면 어떻게합니까?
HADOOP쉘 스크립트를 사용하여 HiveQL 쿼리의 결과를 CSV로 출력하려면 어떻게합니까?
가급적 순차적으로보다는 병렬로 여러 개의 하이브 쿼리를 실행하고 각 쿼리의 출력을 CSV 파일에 저장하고 싶습니다. 예를 들어, csv1에서 query1을 출력하고, csv2에서 query2를 출력합니다. 다음 영업일 동안 분석 할 출력을 갖는 작업을 끝낸 후에 이러한 쿼리를 실행합니다. 나는 bash 쉘 스크립트를 사용하는데 관심이있다. 그 이유는 cron 태스크를 설정하여 특정 시간대에 실행할 수 있기 때문이다.
HiveQL 쿼리의 결과를 한 번에 하나의 쿼리로 CSV 파일에 저장하는 방법을 알고 있습니다. 나는 다음과 같은 것으로 그렇게한다.
hive -e
"SELECT * FROM db.table;"
" | tr "\t" "," > example.csv;
위의 문제는 프로세스가 완료되고 수동으로 다음 쿼리를 시작할 때를 모니터링해야한다는 것입니다. 여러 개의 쿼리를 순서대로 실행하는 방법도 알고 있습니다.
hive -f hivequeries.hql
이 두 가지 방법을 결합 할 수있는 방법이 있습니까? 내 목표를 달성하는 더 똑똑한 방법이 있습니까?
처음부터 코드를 작성하기에 충분히 배쉬를 알지 못하기 때문에 코드 응답이 선호됩니다.
이 질문은 또 다른 질문의 변형입니다 : HiveQL 쿼리의 결과를 CSV로 어떻게 출력합니까?
해결법
-
==============================
1.쉘 스크립트에서 병렬 작업을 실행하고 모니터 할 수 있습니다.
쉘 스크립트에서 병렬 작업을 실행하고 모니터 할 수 있습니다.
#!/bin/bash #Run parallel processes and wait for their completion #Add loop here or add more calls hive -e "SELECT * FROM db.table1;" | tr "\t" "," > example1.csv & hive -e "SELECT * FROM db.table2;" | tr "\t" "," > example2.csv & hive -e "SELECT * FROM db.table3;" | tr "\t" "," > example3.csv & #Note the ampersand in above commands says to create parallel process #You can wrap hive call in a function an do some logging in it, etc #And call a function as parallel process in the same way #Modify this script to fit your needs #Now wait for all processes to complete #Failed processes count FAILED=0 for job in `jobs -p` do echo "job=$job" wait $job || let "FAILED+=1" done #Final status check if [ "$FAILED" != "0" ]; then echo "Execution FAILED! ($FAILED)" #Do something here, log or send messege, etc exit 1 fi #Normal exit #Do something else here exit 0
XARGS, GNU 병렬을 사용하는 다른 방법으로 쉘에서 병렬 프로세스를 실행하고 많은 리소스를 사용할 수 있습니다. https://www.slashroot.in/how-run-multiple-commands-parallel-linux 및 https://thoughtsimproved.wordpress.com/2015/05/18/parellel-processing-in-bash/도 참조하십시오.
-
==============================
2.GNU Parallel에서는 다음과 같이 보입니다 :
GNU Parallel에서는 다음과 같이 보입니다 :
doit() { id="$1" hive -e "SELECT * FROM db.table$id;" | tr "\t" "," > example"$id".csv } export -f doit parallel --bar doit ::: 1 2 3 4
검색어가 동일한 템플릿을 공유하지 않으면 다음을 수행 할 수 있습니다.
queries.txt: SELECT * FROM db.table1; SELECT id,name FROM db.person; ... other queries ... cat queries.txt | parallel --bar 'hive -e {} | tr "\t" "," > example{#}.csv'
기본 사항을 배우려면 https://doi.org/10.5281/zenodo.1146014의 1 장 + 2 장을 읽은 후 15 분을, 병렬로 더 많은 작업을 실행하는 방법에 대해서는 7 장을 읽으십시오.
from https://stackoverflow.com/questions/53755508/how-do-i-output-the-results-of-a-hiveql-query-to-csv-using-a-shell-script by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop에서 DataNode 시작 실패 (0) | 2019.06.25 |
---|---|
[HADOOP] HDFS를 종료 한 후 데이터가 손실 되었습니까? (0) | 2019.06.25 |
[HADOOP] "hadoop fs -ls."명령이 작동하지 않습니다. (0) | 2019.06.25 |
[HADOOP] 정기적 인 작업 실행 (모범 사례) (0) | 2019.06.25 |
[HADOOP] Hadoop 스트리밍 매퍼 바이트 오프셋이 생성되지 않음 (0) | 2019.06.25 |