2016-08-29 1 views
0

Sqoop 유틸리티를 사용하여 MySQL 데이터베이스에서 하이브로 데이터를 가져 오려고했습니다. 나는 테이블을 생성하고 가져온 크기를 10으로 줄였습니다. 명령을 실행할 때마다 자바 힙 크기 오류가 발생하고 작업이 4 회 시도 후에 종료됩니다. 이 문제를 어떻게 해결할 수 있습니까?Sqoop에서 Java 힙 크기 오류 가져 오기

sqoop import --connect jdbc:mysql://my_local_ip/mydatabase --fetch-size 10 --username root -P --table table_name --hive-import --compression-codec=snappy --as-parquetfile -m 1 

을 나는 점점 오전 : 다음과 같이

내 Sqoop을 명령은

16/08/29 07:06:24 INFO mapreduce.Job: The url to track the job: http://quickstart.cloudera:8088/proxy/application_1472465929944_0013/ 
16/08/29 07:06:24 INFO mapreduce.Job: Running job: job_1472465929944_0013 
16/08/29 07:06:47 INFO mapreduce.Job: Job job_1472465929944_0013 running in uber mode : false 
16/08/29 07:06:47 INFO mapreduce.Job: map 0% reduce 0% 
16/08/29 07:07:16 INFO mapreduce.Job: Task Id : attempt_1472465929944_0013_m_000000_0, Status : FAILED 
Error: Java heap space 
16/08/29 07:07:37 INFO mapreduce.Job: Task Id : attempt_1472465929944_0013_m_000000_1, Status : FAILED 
Error: Java heap space 
16/08/29 07:07:59 INFO mapreduce.Job: Task Id : attempt_1472465929944_0013_m_000000_2, Status : FAILED 
Error: Java heap space 
16/08/29 07:08:21 INFO mapreduce.Job: map 100% reduce 0% 
16/08/29 07:08:23 INFO mapreduce.Job: Job job_1472465929944_0013 failed with state FAILED due to: Task failed task_1472465929944_0013_m_000000 
+0

맵퍼 크기가 커지면 'mapreduce.map.java.opts' 및'mapreduce.map.memory.mb'가 도움이되는지 확인하십시오. 내 환경에서는 YARN 컨테이너 크기 제한이 32GB이므로'mapreduce.map.java.opts = -Xmx30000m'과'mapreduce.map.memory.mb = 32000'을 각각 설정했습니다. – abhiieor

+0

나는 Cloudera만을 사용하고 있습니다. 이 구성 변경을 어떻게 내릴 수 있는지 알려주십시오. –

+0

당신은'sqoop import -Dmapreduce.map.java.opts = -Xmx30000m -Dmapreduce.map.memory.mb = 32000 -connect jdbc : mysql : // my_local_ip/mydatabase --fetch-size 10 --username을 할 필요가있다. 루트 -P 테이블 table_name -hive-import -compression-codec = snappy -as-parquetfile -m 1'하지만 YARN 컨테이너 최대 크기를 확인하십시오. 'mapreduce.map.memory.mb'에 조금 더 적게 넣고'mapreduce.map.java.opts'에 넣지 마십시오. – abhiieor

답변

0

는 처음

sqoop import -Dmapreduce.map.memory.mb=1024 -Dmapreduce.map.java.opts=-Xmx7200m -Dmapreduce.task.io.sort.mb=2400 --connect jdbc:mysql://local.ip/database_name --username root -P --hive-import --table table_name --as-parquetfile --warehouse-dir=/home/cloudera/hadoop --split-by 'id' -m 100 

로 시도, 나는 10를 처리하기 위해 10 매퍼를 사용하고있다 백만 개의 레코드와 각 청크의 크기는 1 백만 레코드입니다. 이것은 오류의 원인이었으며 100 개의 매핑 작업을 해고하면서 성공적으로 데이터를 처리했습니다. 내가 알아 차 렸던 유일한 일은 일을 끝내는 데 걸리는 시간입니다. 100 개의 매퍼 작업을 모두 실행하는 데 거의 1 시간이 걸렸습니다.

+0

은 의미가 없습니다. 그것은 분명히 당신의 과정을 느리게 할 것입니다. 단일 노드 hadoop 및 최대 매퍼를 사용하는 경우 병렬로 실행할 수있는 것보다 10이 작은 경우입니다. 각 매퍼마다 1 백만 레코드는 소량입니다. 'Dmapreduce.map.memory.mb = 1024 -Dmapreduce.map.java.opts = -Xmx7200m'을 사용하면이 작업을 4 개의 매퍼로 쉽게 수행 할 수 있습니다. 작업을 크게 빠르게 할 수 있습니다. 노드 클러스터가 1 개인 것처럼 4 개 이상의 맵퍼를 사용하지 마십시오. 메모리 매개 변수 관리 작업 –