스파크의 클러스터 타입은 4가지가 있다. standalone스파크에 포함된 클러스터 관리자 YARNHadoop2의 관리자 https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.htmlMesosHadoop MapReduce와 다른 응용 서비스를 실행할 수 있는 범용 클러스터 관리자 http://mesos.apache.org/Kubernetes컨테이너화된 응용프로그램의 배치, 실행을 관리하는 클러스터 관리자 https://kubernetes.io/ 그리고 이 클러스터에 대한 배포 모드(deploy mode)는 2가지가 있다. client실행을 호출한 곳에서 드라이버가 생성cluster클러스터 내부에서 드라이버가 생성 https://..
셔플단계는 Map task와 Reduce task 단계에서 데이터를 전달하는 과정이다. 맵리듀스는 다음의 단계를 거치는데, 3~7 단계가 셔플 과정에 있다고 볼 수 있다. 1. 스플릿 생성2. 맵3. 스필4. 병합5. 복사6. 정렬7. 리듀스 이 셔플 단계에서 설정할 수 있는 설정값은 다음과 같다. mapred.reduce.shuffle.parallelcopiescopy phase 에서 데이터를 병렬로 전송하는 thread의 수 (default 5)reduce task는 클러스터 내에 퍼져 있는 많은 map task로부터 특정 파티션에 해당하는 output을 필요로 하여 map task의 출력이 끝나는 즉시 복사하기 시작함. 그 때 데이터를 전송하는 thread 수를 조정하는 설정값mapreduce.re..
hive 수행중 USING 문을 이용하여 스크립트 파일을 실행할 때 다음의 오류가 발생하는 경우가 있다. Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: [Error 20003]: An error occurred when trying to close the Operator running your custom script.at org.apache.hadoop.hive.ql.exec.ScriptOperator.close(ScriptOperator.java:585)at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:696) 이럴경우 ADD FILE 구문을 이용해서 파일을 추가해주고 진행하면..
하이브 테이블의 파티션별 로케이션을 확인하는 명령은 다음과 같다. DESC FORMATTED 테이블_명 PARTITIONS (part_col=1, part_col=2); ...# Detailed Partition Information Partition Value: [1, 2] Database: 데이터베이스Table: 테이블CreateTime: Tue Dec 05 02:51:17 UTC 2017 LastAccessTime: UNKNOWN Location: hdfs://locationPartition Parameters: 이렇게 로케이션을 확인 할 수 도 있지만, 하이브 메타스토어에 접속하여 로케이션을 확인 할 수 도 있다. 하이브 메타스토어의 데이터를 저장하고 있는 DB에 직접 접속하여 다음의 쿼리로 확인..
테이블 drop 중 OutOfMemory 오류가 발생하는 경우가 있다. 이럴때는 파티션을 먼저 지워주고 drop 하면 된다. java.lang.OutOfMemoryError: GC overhead limit exceeded orjava.lang.OutOfMemoryError: Java heap space 다음과 같이 파티션을 지우고 테이블을 drop 하면 된다. alter table [테이블명] drop partition (파티션명=값);alter table [테이블명] drop partition (파티션명 > 값);
하이브에 hive.exec.dynamic.partition.mode 옵션은 다음과 같이 다이나믹 파티션으로 모든 데이터를 입력해야 할 때 nonstrict 모드로 설정해야 할 때 사용한다. hive.exec.dynamic.partition.modeDefault Value: strictAdded In: Hive 0.6.0In strict mode, the user must specify at least one static partition in case the user accidentally overwrites all partitions. In nonstrict mode all partitions are allowed to be dynamic.Set to nonstrict to support INSERT ..
하둡은 작은 크기의 파일이 많으면 성능에 안좋은 영향을 주게 된다. 파일이 많다. -> 네임노드가 관리해야할 파일이 많아진다. -> 성능이 느려진다. 작은 사이즈의 파일이 많다. -> 네임노드가 관리해야 하는 블록의 개수가 많아진다. -> 성능이 느려진다. 따라서 하이브 작업의 결과를 합쳐서 비슷한 크기로 만드는 것이 좋다. 아래의 설정을 이용하여 결과를 합쳐준다. set hive.merge.mapfiles=true; - map only 잡의 결과 파일을 합친다. set hive.merge.mapredfiles=true; - 맵리듀스 잡의 결과 파일을 합친다. set hive.merge.tezfiles=true; - tez 엔진 작업의 결과를 합친다. set hive.merge.smallfiles.avg..
스파크 실행중 메모리 부족으로 다음과 같은 오류가 발생하는 경우가 있다. Diagnostics: Container [pid=1,containerID=container_000001] is running beyond physical memory limits. Current usage: 1.4 GB of 1.4 GB physical memory used; 3.1 GB of 13.8 GB virtual memory used. Killing container. 이런 경우 다음과 같이 드라이버와 executor의 메모리 설정을 해주면 해결할 수 있다. spark.yarn.am.memory=3072Mspark.driver.memory=3072Mspark.executor.memory=4736Mspark.executor..
하이브 테이블 생성시에 예약어를 칼럼 명으로 사용해야 하는 경우가 있을 수 있다. 이럴때는 역 따옴표(`)를 이용하여 칼럼명을 감싸주면 생성할 수 있다. * hive 0.13 이후부터 적용 CREATE EXTERNAL TABLE IF NOT EXISTS test_table ( `timestamp` string, ); https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableCreate/Drop/TruncateTable
코디네이터 재작업 우지의 코디네이터와 워크플로우는 에러가 발생여 KILL, FAIL 상태이거나, 어떤이유로 재작업이 필요할 때 rerun 명령어를 이용하여 재작업을 할 수 있다. 이때 코디네이터는 다음과 같이 코디네이터 아이디와 액션 번호를 이용하여 재작업을 할 수 있다. $oozie job -rerun [-nocleanup] [-refresh] [-action 1, 3-4, 7-40] (-action or -date is required to rerun.) [-date 2009-01-01T01:00Z::2009-05-31T23:59Z, 2009-11-10T01:00Z, 2009-12-31T22:00Z] (if neither -action nor -date is given, the exception wi..
Yarn 아키텍처는 하둡2에서 도입되었다. 하둡1의 병목지점인 잡트래커(jobTracker)의 기능을 리소스 관리, 잡 관리로 나누어서 노드 매니저(리소스 관리), 애플리케이션 마스터(잡 관리)에거 권한을 나누어 주었다. 리소스 매니저- 어플리케이션마다 자원을 할당하고, 애플리케이션 마스터를 관리한다. - 클러스터당 1개 노드 매니저 - 노드의 컨테이너를 관리하고 자원 상태를 리소스 매니저에 통지한다. - 노드당 1개 애플리케이셔 마스터- 어플리케이션의 실행을 관리하고 상태를 RM에 통지한다. - 어플리케이션당 1개 컨테이너- 애플리케이션을 실행- 제한된 자원을 가지고, 상태를 AM에 통지한다. http://skccblog.tistory.com/1883
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..
하이브 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: ..
그룹별로 상위 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 --------- ------..
하이브의 성능 향상을 위한 방안은 다음과 같다. 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 구문을 추가하면 된다. 압축방식도 프로퍼티를 이용하여 설정할 수..
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..
우지의 워크플로우 액션에서 오류가 발생하면 자동으로 재작업 하게 하는 기능은 다음과 같이 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..
Haodoop 1클러스터당 최대 4000개의 노드를 등록 가능 MR 잡을 수행할 수 있음작업 처리를 슬롯 단위로 수행 Hadoop 2클러스터 당 10000개 이상의 노드가 가능MR 잡외에 Spark, Hama, Giraph 등 다른 분산 처리 모델도 수행 가능Hadoop1의 잡트래커가 리소스 관리, 잡 스케줄링을 동시에 처리하여 병목 지점이 되어 YARN 추가YARN은 리소스매니저, 애플리케이션 마스터가 리소스 관리, 잡 스케줄링을 담당 Hadoop 3 HDFS erasure coding 추가 기존의 Replication 을 대체하는 방식으로 복제를 하지 않고 오류에 대응YARN 타임라인 서비스 v2 기존 타임라인 서비스보다 많은 정보 확인 가능쉘스크립트 재작성오래된 쉘스크립트를 재작성하여 버그 수정 J..
빅데이터란? : 큰 사이즈의 데이터로부터 유의미한 지표를 분석해내는 것 데이터의 규모에 초점을 맞춘 정의 기존 데이터 베이스 관리도구의 데이터 수집, 저장, 관리, 분석하는 역량을 넘어서는 데이터업무 수행 방식에 초점을 맞춘 정의다양한 종류의 대규모 데이터로부터 저렴한 비용으로 가치를 추출하고, 데이터의 빠른 수집, 발굴, 분석을 지원하도록 고안된 기술 및 아키텍처Volume(양)수십 테라바이트에서 수 페타바이트에 이르는 크기의 데이터 Variety(다양성)정형(DB), 반정형(XML, HTML), 비정형(텍스트, 사진) 형태의 데이터Velocity(속도)실시간, 빠른 처리를 통한 유의미한 결론 도출Value(가치)어떠한 가치를 지니는 유의미한 데이터를 도출Veracity(진실성)이 데이터가 어느정도의 ..
하이브의 데이터를 처리하다가 보면 문자열이 깨져서 오류가 발생하는 경우가 있다. 이런 경우 원인과 상관없는 오류를 알리면서 죽기 때문에 원인을 확인하기 힘들 경우가 많다. 주로 파티션을 결정하는 칼럼의 데이터가 깨지거나, 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..
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..
하이브의 CBO, StatDEV를 이용하면 통계형 데이터(count, sum)의 데이터를 확인하는데 큰 성과를 볼 수 있다. 우선 하이브 위키의 StatDev(바로가기)와 Statics 관련 설정(바로가기)을 확인하면 좀더 많은 정보를 확인할 수 있다. 요약하면 하이브는 통계성 지표의 성능을 높이기 위해 메타데이터에 관련 정보를 저장하고 있다. desc extended 명령으로 확인하면 row 개수, 파일 개수, 파일 사이즈 등의 정보를 메타에 보관하고 있는 것을 볼 수 있다. 관련된 주요 설정은 다음과 같다. # 메타 정보를 이용하여 통계지표를 확인할 수 있게 함set hive.compute.query.using.stats=true; # 하이브가 자동으로 메타 정보를 수집하게 함(기본값 true)set..
HCatalog는 하이브 0.11.0 버전에 통합되었습니다. [바로가기] HCatalog Server는 Hive Metastore와 같습니다. 따라서 EMR의 경우 hive-hcatalog-server 로 실행되는 프로세스가 하이브 메타스토어 입니다. 개요 HCatalog는 하둡 에코 시스템의 데이터 처리 도구(Pig, MR, Hive)들 간의 테이블, 저장공간 관리 계층을 제공한다. HDFS 상의 파일들에 대한 추상계층을 제공하여, 사용자가 데이터의 위치, 저장 형태에 대하여 신경쓰지 않아도 되도록 제공한다. HCatalog는 파일을 읽고, 쓰기 위한 SerDe 를 제공한다. RCFile, CSV, JSON, SequenceFile, ORC 포맷을 지원한다. 사용자가 커스텀 포맷을 생성하여 처리할 수도..
하이브에서 다이나믹 파티션을 이용할 때 리듀서가 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..
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..
Apache Tez – Present and Future from DataWorks Summit MR은 일반적으로 다음과 같은 단계를 거칩니다. 1. 파일에서 데이터를 읽음 2. 매퍼작업 - 임시 결과를 출력 3. 셔플과 정렬 - 맵의 임시 결과를 읽고, 이동하고, 다시 씀 4. 리듀서작업 - 임시 결과를 읽음 5. 결과 출력 테즈는 이 모든 작업을 메모리 상에서 처리합니다. 임시 데이터는 메모리에서 처리합니다. 따라서 MR에 비해 디스크 IO가 줄어들어서 속도가 빨라집니다.
작업중 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..
- Total
- Today
- Yesterday
- Tez
- oozie
- AWS
- Linux
- yarn
- 알고리즘
- 정올
- SQL
- java
- bash
- 파이썬
- 백준
- 하둡
- nodejs
- 다이나믹
- Hadoop
- ubuntu
- hbase
- 하이브
- mysql
- error
- S3
- emr
- SPARK
- build
- Python
- airflow
- HDFS
- 오류
- HIVE
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |