본문 바로가기

빅데이터405

[hadoop] yarn 아키텍처 Yarn 아키텍처는 하둡2에서 도입되었다. 하둡1의 병목지점인 잡트래커(jobTracker)의 기능을 리소스 관리, 잡 관리로 나누어서 노드 매니저(리소스 관리), 애플리케이션 마스터(잡 관리)에거 권한을 나누어 주었다. 리소스 매니저- 어플리케이션마다 자원을 할당하고, 애플리케이션 마스터를 관리한다. - 클러스터당 1개 노드 매니저 - 노드의 컨테이너를 관리하고 자원 상태를 리소스 매니저에 통지한다. - 노드당 1개 애플리케이셔 마스터- 어플리케이션의 실행을 관리하고 상태를 RM에 통지한다. - 어플리케이션당 1개 컨테이너- 애플리케이션을 실행- 제한된 자원을 가지고, 상태를 AM에 통지한다. http://skccblog.tistory.com/1883 2018. 1. 16.
[spark] NoSuchElement 오류 해결 방법 spark 처리중 다음과 같은 오류가 발생하는 경우가 있다. 아마도 shuffle 처리중 메모리가 부족해서 발생하는 것으로 추정된다. 이럴때는 spark.sql.shuffle.partitions 설정을 추가하면 된다. 다음 설정을 추가하여 처리하였다. spark.sql.shuffle.partitions=300spark.default.parallelism=300 diagnostics: User class threw exception: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 2.0 failed 4 times, most recent failure: Lost task 1.3 in stage 2.0 (TI.. 2018. 1. 8.
[hive] java.lang.OutOfMemoryError: Java heap space 오류 수정 하이브 tez 엔진 처리중 발생하는 java.lang.OutOfMemoryError: Java heap space오류는 다음과 같이 설정하여 수정할 수 있다. 이번 경우는 OpenCSVSerde 에서 발생하였는데 다음과 같이 container size 를 수정하여 처리하였다. set hive.tez.container.size=4096;set hive.tez.java.opts=-Xmx3280m; ], TaskAttempt 3 failed, info=[Error: Error while running task ( failure ) : attempt_1513225774189_104839_1_00_000002_3:java.lang.RuntimeException: java.lang.OutOfMemoryError: .. 2018. 1. 3.
[hive][db] rank() 함수를 이용하여 그룹별로 상위 n개의 결과만 출력하는 방법 그룹별로 상위 n개의 데이터만 출력하는 방법은 윈도우 함수(window function) 중에서 RANK() 함수를 이용한다. RANK 함수는 ORDER BY를 포함한 쿼리에서 특정 칼럼의 순위를 구하는 함수이다. 아래와 같이 PARTITION BY, ORDER BY 를 함께 이용하여 그룹별로 순위를 구할 수 있고,이 순위를 이용하여 상위 n개의 결과만 출력이 가능하다. SQL> SELECT JOB, ENAME, SAL, RANK( ) OVER (ORDER BY SAL DESC) ALL_RANK, RANK( ) OVER (PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK FROM EMP; JOB ENAME SAL ALL_RANK JOB_RANK --------- ------.. 2017. 12. 27.
[hive] 하이브 성능 최적화 방안 하이브의 성능 향상을 위한 방안은 다음과 같다. TEZ 엔진 사용hive 의 기본엔진은 mr 이었으나 2.x로 넘어오면서 tez를 사용하게 되었다. mr 엔진은 맵리듀스 연산중 중간 파일을 로컬 디스크에 쓰면서 진행한다. 이로 인한 IO 비용으로 늦어지게 되는데 tez 엔진은 이 임시 파일을 메모리에 저장하여 처리 속도를 높인다. : 엔진 설정 및 큐 설정set hive.execution.engine=tez;set tez.queue.name=queue; ORC 파일 사용데이터 저장에 ORC 파일 포맷을 이용한다. ORC 파일 포맷은 데이터를 컬럼별로 저장하기 때문에 검색 속도와 압축률이 좋다. 아래와 같이 CREATE 문에 STORED AS 구문을 추가하면 된다. 압축방식도 프로퍼티를 이용하여 설정할 수.. 2017. 12. 26.
[hive] explode, lateral view 사용 예제 hive 에서 array, map 타입의 데이터를 처리하기 편리하게 하기 위해서 1행의 데이터를 여러행의 데이터로 펼쳐주는 explode UDTF 함수가 존재한다. 이 함수와 lateral view 명령어를 이용하면 array, map을 쉽게 처리할 수 있다. 사용 방법은 다음과 같다. select mapcolumn from table1;> {"key1" : "value1", "key2" : "value2"} select key, value from table1 lateral view explode(mapcolumn) k as key, value limit 10 ; key1 value1key2 value2 https://cwiki.apache.org/confluence/display/Hive/Langua.. 2017. 12. 26.
[oozie] 워크플로우의 액션에 오류가 발생하면 retry 하게 설정 하기 우지의 워크플로우 액션에서 오류가 발생하면 자동으로 재작업 하게 하는 기능은 다음과 같이 retry-max, retry-interval을 이용하여 설정한다. runDate=${runDate} 워크플로우의 태그에서는 어디에서나 동작하지만 oozie-site.xml 에 설정된 오류에 대해서만 동작한다. (oozie-default.xml 참고) oozie.service.LiteWorkflowStoreService.user.retry.error.code = JA008, JA009, JA017, JA018, JA019, FS009, FS008 따라서 액션 내부적으로 발생하는 오류에 대해서는 동작하지 않을 수도 있다. 이럴때는 다음의 설정에 오류코드를 추가하면 우지가 자동으로 retry 를 수행한다. oozie.s.. 2017. 12. 22.
[hive] drop table partitions 의 null 오류 hive에서 테이블의 파티션 드랍시에 비교 연산자를 이용 할 수 있는데,이때 DDLTask Exception null 오류가 발생하는 경우가 있다. ALTER TABLE table1 DROP PARTITION (partCol 2017. 12. 21.
[hadoop] hadoop1, 2, 3의 특징 및 장단점 Haodoop 1클러스터당 최대 4000개의 노드를 등록 가능 MR 잡을 수행할 수 있음작업 처리를 슬롯 단위로 수행 Hadoop 2클러스터 당 10000개 이상의 노드가 가능MR 잡외에 Spark, Hama, Giraph 등 다른 분산 처리 모델도 수행 가능Hadoop1의 잡트래커가 리소스 관리, 잡 스케줄링을 동시에 처리하여 병목 지점이 되어 YARN 추가YARN은 리소스매니저, 애플리케이션 마스터가 리소스 관리, 잡 스케줄링을 담당 Hadoop 3 HDFS erasure coding 추가 기존의 Replication 을 대체하는 방식으로 복제를 하지 않고 오류에 대응YARN 타임라인 서비스 v2 기존 타임라인 서비스보다 많은 정보 확인 가능쉘스크립트 재작성오래된 쉘스크립트를 재작성하여 버그 수정 J.. 2017. 12. 21.
[개념] 빅데이터 빅데이터란? : 큰 사이즈의 데이터로부터 유의미한 지표를 분석해내는 것 데이터의 규모에 초점을 맞춘 정의 기존 데이터 베이스 관리도구의 데이터 수집, 저장, 관리, 분석하는 역량을 넘어서는 데이터업무 수행 방식에 초점을 맞춘 정의다양한 종류의 대규모 데이터로부터 저렴한 비용으로 가치를 추출하고, 데이터의 빠른 수집, 발굴, 분석을 지원하도록 고안된 기술 및 아키텍처Volume(양)수십 테라바이트에서 수 페타바이트에 이르는 크기의 데이터 Variety(다양성)정형(DB), 반정형(XML, HTML), 비정형(텍스트, 사진) 형태의 데이터Velocity(속도)실시간, 빠른 처리를 통한 유의미한 결론 도출Value(가치)어떠한 가치를 지니는 유의미한 데이터를 도출Veracity(진실성)이 데이터가 어느정도의 .. 2017. 12. 20.
[hive] 정규식을 이용하여 문자열 검색 하이브의 데이터를 처리하다가 보면 문자열이 깨져서 오류가 발생하는 경우가 있다. 이런 경우 원인과 상관없는 오류를 알리면서 죽기 때문에 원인을 확인하기 힘들 경우가 많다. 주로 파티션을 결정하는 칼럼의 데이터가 깨지거나, where 조건문에 = 비교를 하는 데이터가 깨져서 발생하는 경우가 많다. 이런 경우 정규식을 이용하여 오류 데이터를 먼저 검증하여 오류를 해결할 수 있다. 정규식을 이용한 검증은 다음과 같다. hive> SELECT 'abc' RLIKE '^[a-zA-Z0-9]*$';OKtrueTime taken: 0.034 seconds, Fetched: 1 row(s) hive> SELECT '�bc' RLIKE '^[a-zA-Z0-9]*$';OKfalseTime taken: 0.026 secon.. 2017. 12. 14.
[hive] JSON 문자열을 맵으로 변환(json string to map) hive 에서 json 문자열을 map으로 변환하는 방법은 다음과 같다. SELECT substring("{'a':'1','b':'2'}", 2, length("{'a':'1','b':'2'}")-2); SELECT str_to_map(substring("{'a':'1','b':'2'}", 2, length("{'a':'1','b':'2'}")-2), ",", ":"); SELECT explode(str_to_map(substring("{'a':'1','b':'2'}", 2, length("{'a':'1','b':'2'}")-2), ",", ":")) as (key,value); hive> SELECT substring("{'a':'1','b':'2'}", 2, length("{'a':'1','b':'2.. 2017. 12. 12.
[hive] 하이브 성능 개선#1 - CBO, Stat 를 이용하여 통계 쿼리 성능 개선 하이브의 CBO, StatDEV를 이용하면 통계형 데이터(count, sum)의 데이터를 확인하는데 큰 성과를 볼 수 있다. 우선 하이브 위키의 StatDev(바로가기)와 Statics 관련 설정(바로가기)을 확인하면 좀더 많은 정보를 확인할 수 있다. 요약하면 하이브는 통계성 지표의 성능을 높이기 위해 메타데이터에 관련 정보를 저장하고 있다. desc extended 명령으로 확인하면 row 개수, 파일 개수, 파일 사이즈 등의 정보를 메타에 보관하고 있는 것을 볼 수 있다. 관련된 주요 설정은 다음과 같다. # 메타 정보를 이용하여 통계지표를 확인할 수 있게 함set hive.compute.query.using.stats=true; # 하이브가 자동으로 메타 정보를 수집하게 함(기본값 true)set.. 2017. 11. 29.
[개념] HCatalog, HCatalog Server HCatalog는 하이브 0.11.0 버전에 통합되었습니다. [바로가기] HCatalog Server는 Hive Metastore와 같습니다. 따라서 EMR의 경우 hive-hcatalog-server 로 실행되는 프로세스가 하이브 메타스토어 입니다. 개요 HCatalog는 하둡 에코 시스템의 데이터 처리 도구(Pig, MR, Hive)들 간의 테이블, 저장공간 관리 계층을 제공한다. HDFS 상의 파일들에 대한 추상계층을 제공하여, 사용자가 데이터의 위치, 저장 형태에 대하여 신경쓰지 않아도 되도록 제공한다. HCatalog는 파일을 읽고, 쓰기 위한 SerDe 를 제공한다. RCFile, CSV, JSON, SequenceFile, ORC 포맷을 지원한다. 사용자가 커스텀 포맷을 생성하여 처리할 수도.. 2017. 11. 28.
[hive] dynamic partition 에서 리듀서를 하나만 사용하는 오류 수정 하이브에서 다이나믹 파티션을 이용할 때 리듀서가 100개가 생겨도 하나의 리듀서만 이용하여 데이터를 생성하여 작업이 오래 걸리는 경우가 있다. 예를 들어 작업중 다음과 같은 쿼리를 이용하여 데이터를 적재하면 dynamic_partition 칼럼의 값을 이용하여 파티션을 생성하고 값을 입력하게 된다. INSERT INTO TABLE target_table PARTITION (dynamic_partition_col)SELECT col1, col2, dynamic_partition FROM source_table; 이때 dynamic_partition 칼럼의 값이 2개여서 파티션이 2개만 생성되게 되는데 리듀서가 100개 생성되어도 마지막 리듀서 2개만 사용하여 데이터를 쓰는 문제가 발생하였다. 이때 stat.. 2017. 11. 15.
[Hive][Tez] TEZ에서 파일머지를 처리하는 중 App master already running a DAG 오류 처리 방법 TEZ를 이용하면서 파일 머지를 사용하면 다음과 같은 오류가 발생할 경우가 있다. 2017-11-10 05:21:48,998 INFO [Thread-140] org.apache.hadoop.hive.ql.exec.Task: Dag submit failed due to App master already running a DAGat org.apache.tez.dag.app.DAGAppMaster.submitDAGToAppMaster(DAGAppMaster.java:1368)at org.apache.tez.dag.api.client.DAGClientHandler.submitDAG(DAGClientHandler.java:140)at org.apache.tez.dag.api.client.rpc.DAGClientA.. 2017. 11. 10.
[hive] 다이나믹 파티션 처리시 0 byte 파일이 생성될 때 설정 다이나믹 파티션 처리시 매퍼 only 잡으로 처리중 0 byte 파일이 생성되는 경우가 있다. 이럴 경우 다음의 설정을 false 로 설정하면 문제를 해결 할 수 있다. set hive.optimize.sort.dynamic.partition=false; 2017. 10. 27.
[hadoop] MR과 TEZ의 차이 Apache Tez – Present and Future from DataWorks Summit MR은 일반적으로 다음과 같은 단계를 거칩니다. 1. 파일에서 데이터를 읽음 2. 매퍼작업 - 임시 결과를 출력 3. 셔플과 정렬 - 맵의 임시 결과를 읽고, 이동하고, 다시 씀 4. 리듀서작업 - 임시 결과를 읽음 5. 결과 출력 테즈는 이 모든 작업을 메모리 상에서 처리합니다. 임시 데이터는 메모리에서 처리합니다. 따라서 MR에 비해 디스크 IO가 줄어들어서 속도가 빨라집니다. 2017. 10. 24.
[hive] tez로 처리중 File Merge 부분에서 오류 작업중 hive에서 tez 엔진으로 처리중 파일 머지를 실행하면 다음과 같은 오류가 발생하는 것을 확인하였다. 2017-10-24 01:26:03,407 INFO [Thread-152] SessionState: File Merge: 0/12017-10-24 01:26:03,412 INFO [Thread-153] org.apache.hadoop.hive.ql.exec.Task: Dag submit failed due to App master already running a DAG at org.apache.tez.dag.app.DAGAppMaster.submitDAGToAppMaster(DAGAppMaster.java:1368) at org.apache.tez.dag.api.client.DAGClientHa.. 2017. 10. 24.
[hadoop] 하둡 커패시티 스케줄러(capacity-scheduler) 하둡의 스케줄러중 하나인 커패시티 스케줄러는 큐별로 사용할 수 있는 자원의 총량을 정해놓고 처리하는 방식이다. 하둡설정의 capacity-scheduler.xml 파일을 이용하여 설정할 수 있다. * 운영중에 큐의 추가는 가능하다. * capacity-scheduler.xml 을 수정하고, yarn rmadmin -refreshQueues 를 입력한다. ** 운영중에 큐의 삭제는 불가능하다. ** capacity-scheduler.xml 을 수정하고, 리소스 매니저를 재시작하면 된다. YARN overview from SeongHyun Jeong https://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html 2017. 10. 18.
[hadoop] 맵리듀스의 맵퍼 리듀서 개수 설정하기 하둡의 매퍼 리듀서 개수는 입력사이즈에 의해서 설정하는 방법과 사용자가 개수를 설정하는 방법이있다. set mapreduce.input.fileinputformat.split.maxsize=268435456;set mapreduce.input.fileinputformat.split.minsize=134217728; set mapred.reduce.tasks=-1;set hive.exec.reducers.bytes.per.reducer=134217728; set mapreduce.job.maps=100; set mapreduce.job.reduces=100; * 하둡 위키에 따르면 매퍼의 개수는 하둡이 계산한 매퍼의 개수 이하로는 설정할 수 없다고 한다. 하둡이 매퍼의 개수를 500개로 계산했는데 100개.. 2017. 9. 21.
[hive] tez 실행중 메모리 오류 발생 하이브에서 tez 엔진을 이용하여 작업중 다음과 같은 오류가 발생하는 경우이는 tez의 AM 기본메모리가 1G로 설정되어서 발생하는 오류이다. 기본메모리 이상으로 메모리를 설정하여 진행하면 된다. FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Application application_*** failed 2 times due to AM Container for appattempt_*** exited with exitCode: - ***Current usage: 1.1 GB of 1 GB physical memory used;*** 다음의 옵션을 이용하여 AM의 메모리를 늘려서 처리하면 오류가 해.. 2017. 9. 20.
[하둡]HDFS의 헬스 체크 및 커럽트 블럭 삭제하기 HDFS의 블록에 오류가 발생해서 커럽트 블록이 발생하면 이 부분을 hdfs 쉘을 이용하여 확인할 수 있다. hdfs fsck /hdfs fsck /user/- fsck 다음에 경로를 꼭 입력해야 한다. hdfs fsck -list-corruptfileblocks- 커럽트 블록 목록 확인 hdfs fsck -delete- 커럽트 블록을 삭제한다. hdfs fsck -move- 커럽트 블록을 lost+found 로 이동한다. HDFS의 상태가 이상해서 fsck 명령으로 확인하여 아래와 같이 커럽트 블록을 확인하면, -list-corruptfileblocks 명령으로 블록을 확인하고, -delete 명령으로 삭제후, 새로 배포하면 된다. - 시스템 상태가 정상The filesystem under path '.. 2017. 9. 18.
[hadoop] HDFS 관련 주요 면접 질문 -HDFS의 주요 특징은?블록단위 파일 보관파일을 사용자가 지정한 단위의 블록으로 분할 하여 저장분할하여 저장하기 때문에 큰사이즈의 데이터도 저장이 가능700G 디스크가 2개 있을때 1T파일을 저장하려고 한다면 1T 디스크를 사지 않고, 파일을 분할하여 저장 가능 분산 저장 파일 시스템클러스터의 노드에 분산하여 저장이 가능레플리케이션하나의 블록을 기본 복제 단위 만큼 복사하여 저장범용장비 사용특정 장비가 아니라 일반적인 장비에서 사용이 가능 - HDFS의 구조네임노드디렉토리, 파일 정보 관리블록과 디렉토리간 매핑 정보 관리파일 시스템의 관리를 위애 fsimage와 edits를 이용데이타노드파일을 블록단위로 나누어서 저장체크포인트 노드, 세컨더리 네임노드fsimage와 edits를 주기적으로 체크하여 체크.. 2017. 9. 11.
[hadoop] 빅데이터 면접 질문 빅데이터 관련해서 정보를 찾던 중에 빅데이터 관련 면접에서 알아두면 좋을 내용이 있어서 스크랩해 보았다. 공부해 두면 좋은 내용들이어서 정리 해 보았다. 1. 하둡과 전통적인 RDBMS의 차이점은? 데이터 타입: 하둡은 정형, 반정형, 비정형 데이터: RDBMS는 정형 데이터 스키마: 하둡 - Schema on Read: RDBMS - Schema on Write: 데이터를 읽을 때 스키마를 적용하느냐, 데이터를 적재할 때 스키마를 적용하느냐: https://goo.gl/images/dQiQCJ 좋은 사용법: 하둡은 대용량 데이터 처리: RDBMS는 OLTP 데이터 처리나 복잡한 ACID 트랜잭션에 적용 속도: 하둡은 쓸 때 빠르고 : RDBMS는 읽을 때 빠르다. 2. 빅데이터에서 4V는 무엇을 말하나.. 2017. 9. 10.
[oozie] 우지 쉐어라이브러리(sharelib) 설정 및 갱신 우지 쉐어라이브러리는 oozie-site.xml 파일에 위치를 설정한다. 다음의 설정을 이용하여 위치를 설정하면 된다. oozie.service.WorkflowAppService.system.libpath hdfs://location/share/lib System library path to use for workflow applications. This path is added to workflow application if their job properties sets the property 'oozie.use.system.libpath' to true. 우지가 실행중에 우지 쉐어 라이브러리를 추가하면 갱신이 안될 수 가 있다. 이럴때는 다음의 명령을 이용하여 갱신하면 된다. oozie admin -.. 2017. 9. 1.
[hive][error] TEZ 사용시 Caused by: java.lang.ArrayIndexOutOfBoundsException: 1024 오류 hive 2.1.0 에서 ORC 파일 포맷 이용중 다음의 오류가 발생하는 경우가 있다. Caused by: java.lang.ArrayIndexOutOfBoundsException: 1024 이 경우 다음의 지라와 같이 Hive 버그일 가능성이 높다. 이럴때는 이런 해결방법이 있다. hive 버전업 또는 패치 적용ORC 말고 다른 포맷으로 데이터를 저장 후 다시 ORC 포맷으로 저장파일 머지중 오류가 발생했다면 머지 기능을 잠시 off 리듀서를 1개로 설정하여 처리 https://issues.apache.org/jira/browse/HIVE-14483 2017. 8. 24.
[hdfs] 하둡 hdfs의 휴지통 설정하기 hdfs에는 사용자의 실수로 인한 파일의 삭제를 방지하기 위해서 휴지통 기능이 존재한다. fs.trash.interval- 0 으로 설정하면 휴지통 기능을 사용하지 않음- 설정한 분(minute) 간격으로 체크해서 시간이 지난 파일 삭제 fs.trash.checkpoint.interval- 설정한 시간이 지난 파일 삭제 hadoop fs -expunge 명령으로 휴지통을 비움hadoop fs -rm -skipTrash /data 명령으로 휴지통을 이용하지 않고 파일을 바로 삭제 https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#File_Deletes_and_Undeleteshttps://hadoop... 2017. 7. 24.
[oozie] 우지 포크 조인 액션이 느릴때 우지 워크플로우의 포크, 조인 액션에서 경우의 수가 많아지면 모든 경우에 대한 체크를 진행하기 때문에 느려진다고 한다. 아래의 지라를 참고하면된다. 4.3버전에서 문제가 해결되었다고 한다. https://issues.apache.org/jira/browse/OOZIE-1978 2017. 7. 18.
[hive] 테이블 stat 갱신하기 하이브 테이블의 열 개수(count 정보), 파일개수, 사이즈 등이 메타스토어에 저장된다. 이를 이용하여 count 명령의 실행 속도를 높일 수 있다. 그런데 파일 정보가 갱신 된 것을 하이브가 확인하지 못할 때도 있다. 이럴때는 다음의 명령으로 테이블 정보를 갱신해 준다. ANALYZE TABLE 테이블명 COMPUTE STATISTICS; The first milestone in supporting statistics was to support table and partition level statistics. Table and partition statistics are now stored in the Hive Metastore for either newly created or existing ta.. 2017. 6. 26.