• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    해결됨

Query시 메모리 문제

22.03.19 20:17 작성 조회수 326

1

안녕하세요. 

소중한 지식을 나눠주셔서 감사합니다. 

select * from smartcar_status_info limit 5;

이 쿼리는 정상실행되는데.

 

 

select car_number, avg(battery) as battery_avg

from smartcar_status_info

where battery < 60

group by car_number;

 

이 Query를 실행하니 아래와 같이 메모리관련 문제가 생긴 것 같습니다. 강사님 영상을 보면 log파일이 2개인데. 저의 경우는 31개라서 hdfs에서 파일은 29개 옮겨놓고 2개만 남기고 쿼리를 실행해도 아래와 같은 메시지가  반복되네요.

두가지 질문입니다.

1. external location에 위치한 파일을 move시키면...

move한 파일 개수만큼 hive테이블의 값이 자동으로 변경되는지?

internal과 달리 external 은 관리가 되지 않는데... 그럼 refresh 같은 기능을 따로 적용시켜야 하는지?

메타정보를 변경?해야 하는지 

 

2. cm에서 hive 관련 쿼리가 가능하도록 memory를 설정하는 방법을 알려주시면 감사하겠습니다.

 

Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException: Invalid resource request! Cannot allocate containers as requested resource is greater than maximum allowed allocation. Requested resource type=[memory-mb], Requested resource=<memory:5120, vCores:1>, maximum allowed allocation=<memory:1024, vCores:1>, please note that maximum allowed allocation is calculated by scheduler based on maximum resource of registered NodeManagers, which might be less than configured maximum allocation=<memory:1536, vCores:1> 

 

답변 1

답변을 작성해보세요.

1

안녕하세요! 빅디 입니다.

2개 질문을 주셔는데요, 첫번째 질문은 잘 이해가 되지 않습니다. ^^;;

좀더 상세하게 부탁드리고요~

 

두번째 질문에선요..

"cho" 님이 말씀데로,

Hive 쿼리를 실행하면,  멥리듀스로 변환되어 Yarn 컨테이터 위에서 생성/실행이 되는데,

이때 메모리 부족 현상이 발생한게 맞습니다.

우선 YARN 스케줄러와 리소스매니저의 메모리 설정이 잘 되었는지 체크해 봐 주세요. 

관련 강의는 "5.빅데이터 클러스터 구성 3 - DataNode 추가 및 환경설정" 를 참고해 주세요.

■ YARN 스케줄러 메모리 변경: 1 → 1.5

■ 리소스매니저 메모리 변경: 1 → 5

 

만약 위 설정이 정상적으로 되어 있다면, "cho" 님 PC의 물리적인 메모리 부족 문제일 수 있습니다.

이땐 최대한 가용 메모리를 확보해야 합니다. 

OS에서 불필요한 응용 프로그램들을 최대한 종료해 주시고요,

파일럿 프로젝트에서도 현 실습단계에서 사용하지 않는 기능/서비스도 최대한 종료 시켜 놓으셔야 합니다.

다음 기능은 종료해 놓고 테스트해 보시기 바랍니다.

CM 홈에서,  flume/Hbase/Kafka/Cloudera Management Service 등은 정지

- 빅디 드림

 

 

Cho님의 프로필

Cho

질문자

2022.03.20

빠르고 친절한 답변 감사합니다. 

2번째는 메모리 설정은 강의대로 되어있었고,  Virtual Box 의 메모리 설정을 좀 높였습니다.

그랬더니 질문의 현상은 해결이 되었는데 노트북의 한계인지  정상적인 작동은 안되는 것 같습니다. ㅠ

INFO  : Compiling command(queryId=hive_20220320161305_b254b15e-67aa-40bd-940f-8e12025474f3): select car_number, avg(battery) as battery_avg
from smartcar_status_info
where battery < 60
group by car_number
INFO  : Semantic Analysis Completed
INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:car_number, type:string, comment:null), FieldSchema(name:battery_avg, type:double, comment:null)], properties:null)
INFO  : Completed compiling command(queryId=hive_20220320161305_b254b15e-67aa-40bd-940f-8e12025474f3); Time taken: 0.39 seconds
INFO  : Executing command(queryId=hive_20220320161305_b254b15e-67aa-40bd-940f-8e12025474f3): select car_number, avg(battery) as battery_avg
from smartcar_status_info
where battery < 60
group by car_number
WARN  : 
INFO  : Query ID = hive_20220320161305_b254b15e-67aa-40bd-940f-8e12025474f3
INFO  : Total jobs = 1
INFO  : Launching Job 1 out of 1
INFO  : Starting task [Stage-1:MAPRED] in serial mode
INFO  : Number of reduce tasks not specified. Estimated from input data size: 1
INFO  : In order to change the average load for a reducer (in bytes):
INFO  :   set hive.exec.reducers.bytes.per.reducer=<number>
INFO  : In order to limit the maximum number of reducers:
INFO  :   set hive.exec.reducers.max=<number>
INFO  : In order to set a constant number of reducers:
INFO  :   set mapreduce.job.reduces=<number>
INFO  : number of splits:1
INFO  : Submitting tokens for job: job_1647758481132_0008
INFO  : Executing with tokens: []
INFO  : The url to track the job: http://server01.hadoop.com:8088/proxy/application_1647758481132_0008/
INFO  : Starting Job = job_1647758481132_0008, Tracking URL = http://server01.hadoop.com:8088/proxy/application_1647758481132_0008/
INFO  : Kill Command = /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hadoop/bin/hadoop job  -kill job_1647758481132_0008

 

어제 두서없이 드린 첫번째 질문을 다시 드리면.

1) hdfs경로 ( /pilot-pjt/collect/car-batch-log/wrk_date=20220320 ) 에 car-batch-log.~~.log 파일이 2개 존재.

2) Hue에서 (/pilot-pjt/collect/car-batch-log/) 이 경로로 external 테이블 생성

3) Hue에서 ALTER TABLE SmartCar_Status_Info ADD PARTITION(wrk_date='20220320') 로 파티션 설정

4) 파일 1개당 10만개씩 총 20만개의 데이터가  확인되었다고 가정했을 때.

 

위의 상태에서 1) hdfs경로의 2개 파일중 1개 파일을 임의로 삭제시켰을 때 .

hdfs mv / rm / get 등으로... 물리적 디스크에서 파일을 이동시킴.

질문 : 파일 하나가 삭제되었으므로 20만개의 데이터가 아니라 자동으로 10만개의 데이터로 인식을 하는지?

제가 직접 돌리면서 테스트를 해보고 싶었는데... 제 환경에서count도 안되서 질문을 드리네요.
자동으로 인식이 안되면 물리적 hdfs 디렉토리의 파일이 변경되면 다시 drop partition을 하고 add partition을 해야 되는건지 아니면 다른 방법이 있는지 아니면 자동으로 인식하기에 이런 단계가 필요없는지가 질문이었습니다.

 

바쁘신데 시간 내 주셔서 감사합니다.

 

 

안녕하세요! "Cho"님

주말 파일럿 프로젝트 수행에..파이팅! 입니다. ^^*

 

질문 : 파일 하나가 삭제되었으므로 20만개의 데이터가 아니라 자동으로 10만개의 데이터로 인식을 하는지? 

답변: 네~ 당연히 10만개만 인식이 됩니다. 그리고 파티션은 정책을 정해서, 드랍 할지 유지 할지 정하시면 됩니다. 참고로 하둡은 "스키마 온 리드" 입니다. (RDBMS는 스키마 온 라이트)
데이터를 삭제/변경 하더라도, 읽어 들일때 얼마든지 스키마를 재구성해 데이터를 정상 리드 할 수 있습니다.

 

앞서 문의주신 실패한 Hive 쿼리 관련해선...가용 메모리를 최대한 확보 하는 방법을 찾아 보셔야 할 것 같습니다. 추가로 현재 파일럿 VM은 물리적 메모리 부족시, 디스크를 메모리 스왑해 사용 하도록 설정 되어 있어 Server01/02의 Disk 여유 공간이 적으면, 메모리 부족 현상이 발생 할 수 있습니다. df -m 명령으로 꼭 체크해 보시기 바랍니다. 

- 빅디 드림