오류 HBase 리전서버 실행중 아래와 같이 Reported time is too far out of sync with master. Time difference of 52328ms > max allowed of 30000ms 오류가 발생하였습니다. 2020-12-02 14:22:15,357 INFO [regionserver/:16020] regionserver.HRegionServer: STOPPED: Unhandled: org.apache.hadoop.hbase.ClockOutOfSyncException: Server ,16020,1606886533858 has been rejected; Reported time is too far out of sync with master. Time differen..
하둡 fs 명령에서 디버깅을 위한 메세지를 출력하고 싶을 때는 하둡의 로깅 레벨을 변경하면 됩니다. 다음은 HADOOP_ROOT_LOGGER를 변경하여 fs 커맨드에서 로그를 출력하는 방법입니다. export HADOOP_ROOT_LOGGER=DEBUG,console # 로그가 출력됨 $ hadoop fs -Dfs.swift.service.kw.username= -Dfs.swift.service.kw.password= -ls swift://default.service/ 20/11/04 08:24:37 DEBUG util.Shell: setsid exited with exit code 0 20/11/04 08:24:37 DEBUG conf.Configuration: parsing URL jar:file:/..
문제 우지에서 하이브를 이용할 때 다음의 오류가 발생하는 경우가 있습니다. 이 경우는 우지의 쉐어 라이브러리(sharelib)설정을 이용하지 않을 때 로컬에서 라이브러리를 확인하지 못할 때 발생할 수 있습니다. Caused by: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.HiveMain not found at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2273) at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2367) ... 13 more 해결 방법 우지 작업 실..
Helm 차트를 이용할 때 yaml 파일에서 다음과 같은 오류가 발생하였습니다. 스펙에 존재하는 필드인데 존재하지 않는 다는 오류가 발생하는데 이런 경우 yaml 파일을 찾아보면 들여쓰기가 제대로 되지 않아서 오류가 발생하였습니다. yaml 파일으 데이터의 구분을 들여쓰기(indentation)으로 구분하기 때문에 잘 구분해서 사용해야 합니다. Error: error validating "": error validating data: ValidationError(StatefulSet.spec.template.spec): unknown field "emptyDir" in io.k8s.api.core.v1.PodSpec script returned exit code 1
문제 Hue를 빌드할 때 다음의 오류가 발생할 수 있습니다. 컴파일 된 pyc 파일과 실행환경의 파이선 버전이 달라서 데이터를 읽을 수 없을 때 발생하는 오류입니다. ValueError: bad marshal data (unknown type code) 해결 방법 Hue를 빌드 할 때. 파이선3의 환경으로 설정하라고 되어 있었지만 장고 모듈을 빌드하는 과정에서 해당 오류가 발생하여 파이썬2로 빌드하여 문제를 해결할 수 있었습니다. export PYTHON_VER=python2.7 해당 오류는 pyc 파일을 삭제하고 실행 환경의 파이썬으로 다시 빌드하면 해결할 수 있습니다. find . -name "*.pyc" 참고 marshal을 이용해서 파일을 읽는 방법은 다음과 같습니다. import marshal ..
문제 Hue를 설정할 때 하이브서버2(HiveServer2)와 연결할 때 하이브서버2의 쓰리프트 연결 모드가 http일 경우에만 동작합니다. 쓰리프트 모드가 binary일 경우 다음과 같은 오류가 발생합니다. The application won't work without a running HiveServer2 해결 방법 하이브서버2의 쓰리프트 모드 변경을 위해 hive-site.xml 파일에 설정을 변경하고 재시작합니다. hive.server2.transport.mode http
하이브 실행 엔진을 설정하고 맵리듀스, 테즈를 실행하기 위해서는 실행을 위한 라이브러리를 HDFS에 업로드 하고 설정파일에 각 라이브러리의 위치를 지정해야 실행할 수 있습니다. 다음 파일의 위치는 HDFS 상의 위치입니다. MR 엔진: mapred-site.xml mapreduce.application.framework.path /hadoop/apps/mapreduce/hadoop-version.tar.gz#mapreduce TEZ 엔진: hive-site.xml tez.lib.uris /hadoop/apps/tez/tez.tar.gz
스파크쉘으르 이용하여 작업을 실행하면 작업에 필요한 라이브러리를 묶어서 hdfs에 올리고, 이 라이브러리를 사용해서 워커노드에서 작업을 처리합니다. 따라서 hdfs연결 설정이 올바르지 않으면 해당 오류가 발생합니다. java.io.FileNotFoundException: File file:/tmp/spark-126d2844-5b37-461b-98a4-3f3de5ece91b/__spark_libs__3045590511279655158.zip does not exist at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:611)해결방법 /etc/spark/spark-env.sh에서 configura..

스파크쉘의 마스터를 yarn으로 설정하고 yarn 클러스터 외부의 클라이언트에서 실행할 때 다음의 오류가 발생하는 경우가 있습니다. 오류 $ ./spark-shell --master yarn Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 20/09/09 16:01:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 20/09/09 16:0..
hbase의 리전서버가 등록될 때 같은 서버가 호스트명(hostname)과 IP로 중복되어 등록되는 경우가 있습니다. 로그를 확인해 보면 다음과 같습니다. 정상 상태일 때는 서버의 도메인 명인 region-server.com으로 등록하고, 오류 상태일 때는 IP로 받아서 호스트명인 region-server로 등록합니다. 이 경우 동일한 서버가 중복 등록되어 오류가 발생합니다. # 정상 상태 2020-09-02 14:42:53,335 INFO [B.defaultRpcServer.handler=8,queue=2,port=16000] master.ServerManager: Registering server=region-server.com,16020,1599025371919 # 오류 상태 2020-09-02 1..
우지 4.3.0을 설정하는 중 Cannot initialize Cluster 오류가 발생하였습니다. 오류 우지 작업 중 클러스터를 초기화하지 못한다는 오류가 발생하였습니다. 오류 내용은 mapreduce.framework.name=yarn으로 설정되어 있기 때문에 고가용성(HA) 구성된 리소스 매니저의 주소를 확인하지 못하는 것으로 생각하였습니다. Caused by: java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses. at org.apache.hadoop.mapreduce.Cluster.initia..
에어플로우 컨셉 에어플로우 공식 컨셉 문서를 통해 작업을 실행하고, 모니터링 하는 방법을 알아보겠습니다. 핵심 구상 DAG 파이썬으로 정의한 작업의 모음 작업 = Task = Operator 동작의 실행순서, 동작 시간, 공통 파라미터 등을 정의 에어플로우의 DAG_FOLDER에 파이썬 파일을 생성하면 에어플로우가 주기적으로 해당 폴더를 스캔하여 인식함 Scope 에어플로우는 파이썬 파일에 선언된 DAG를 모두 로딩 DAG는 글로벌 영역으로 선언되어야 함 자주 사용하는 패턴등을 SubDagOperator로 구현할 수도 있음 기본 파라미터 default_args는 모든 오퍼레이터에 적용 됨 공통 파라미터를 모든 오퍼레이터에 전달 default_args = { 'start_date': date..
하이브에서 Gzip 파일로 작업 할 때 0byte 파일이 존재하면 아래와 같이 Unexpected end of input stream 오류가 발생합니다. Caused by: java.io.EOFException: Unexpected end of input stream at org.apache.hadoop.io.compress.DecompressorStream.decompress(DecompressorStream.java:165) at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:105) at java.io.InputStream.read(InputStream.java:101) at org.apache.hadoop..
맵 조인은 작은 크기의 테이블을 메모리에 적재하여 조인을 처리합니다. 이 때 테이블 데이터의 크기는 자바 객체의 사이즈입니다. 실제 파일의 사이즈와 다릅니다. 예를 들어 다음의 테이블 table_orc, table_txt는 동일한 데이터를 보관하고 있는 테이블입니다. 65,454개의 데이터를 저장 형식만 다르게 하여 저장한 것입니다. 맵 조인에는 객체 사이즈(rawDataSize)를 이용하기 때문에 hive.auto.convert.join.noconditionaltask.size를 설정할 때 객체 사이즈 기준으로 설정해야 합니다. 기본 설정이 10MB 일때 table_orc는 셔플 조인으로 처리되고, table_txt는 맵 조인으로 처리됩니다. table_orc를 맵조인으로 처리하기 위해서는 hive.a..

hive의 맵조인과 셔플조인의 차이를 확인해 보겠습니다. 다음의 조인 쿼리에서 table_a는 14.7G이고, table_b는 5KB입니다. 이 테이블을 조인할 때 각 조인에 따른 성능을 확인해 보면 셔플 조인일 때는 리듀서 단계가 추가되고 맵 조인에 비하여 2배의 시간이 더 걸리는 것을 확인할 수 있습니다. # table_a와 table_b를 조인하여 join_test 테이블 생성 # table_a: 14.7 GB # table_b: 5 KB CREATE TABLE join_test AS select a.deviceid, b.cnty_cd from db_a.table_a a, db_b.table_b b where a.date = '20191020' and a.code = b.code_cd ; 작업 시간..
pyspark에서 UDF를 이용하는 방법을 알아보겠습니다.
pyspark와 Hive 서버와 연동하는 방법을 알아보겠습니다.
Line에서 하둡 클러스터를 운영하면서 발생한 장애 상황을 정리한 것입니다. 데이터 엔지니어링 관련 소프트웨어 장애 대응 사례 에서 상세한 내용을 확인할 수 있습니다. 짧게 요약하면 다음과 같습니다. hadoop.registry.rm.enabled=false로 설정 HDFS의 휴지통 설정을 켜놓으면 삭제 데이터가 많을 때는 HDFS에 부담이 될 수 있으므로 삭제 간격을 잘 조절 Zeepline의 버그에 의한 오류가 발생할 수 있으니 버전업, 버그 리포트를 잘 확인 하이브 테이블의 파티션이 많으면 스파크 드라이버가 힘들 수 있으니 파티션을 잘 설정 Apache Hadoop YARN 리소스 매니저 failover 발생 문제와 해결 방안 현상 하둡 클러스터에서 동작하는 애플리케이션의 수가 늘어나면서 리소스 매..
KAFKA에 대해서 알아보자 카카오는 각 서버가 시스템 적으로 묶여 있어서 장애가 발생하면 동시에 다운되어 카프카를 이용하여 커플링을 줄여줌. 파티션은 8~20개로 설정하고 처리 속도에 따라 적절하게 설정하는 것이 중요함 Kafka 기본 개념잡기 Kafka 운영자가 말하는 처음 접하는 Kafka 파티션 순서에 따른 메시지 순서: 파티션의 개수가 여러개 일때 메시지는 파티션의 여러 위치에 저장되어 구독자가 메시지를 가져올 때 메시지의 발생 순서와 구독자가 받은 메시지의 순서가 꼭 일치하지는 않음. 메시지 처리 순서가 중요한 서비스는 Kafka를 이용하지 않는 것이 좋을 것 같고, 이용해야 한다면 파티션을 1개로 설정하던지 다른 방법을 통해 메시지의 순서를 정렬할 수 있는 방법을 찾아야 함 Kafka 운영자..
Flume 에이전트는 HTTP를 이용한 REST API로 플룸 작업 모니터링을 위한 방법을 제공합니다. 기본적으로 JMX, Ganglia, JSON 모니터링과 사용자 커스텀 모니터링 방법을 제공합니다. 여기서는 JSON 모니터링 방법을 알아보겠습니다. HTTP 모니터링 설정 JSON 모니터링은 에이전트를 실행할 때 flume.monitoring.type, flume.monitoring.port를 설정하는 것으로 간단하게 설정할 수 있습니다. 에이전트를 실행할 때 모니터링 옵션을 설정하여 실행하고, 아래와 같이 curl 명령으로 현재 플룸 에이전트의 상태를 간단하게 모니터링 할 수 있습니다. # 모니터링 설정 $ bin/flume-ng agent --conf-file conf/example.conf --n..
플룸 메모리 채널을 이용할 때 ChannelFullException이 발생하는 경우가 있습니다. 보통 메모리 채널과 연결된 싱크에서 데이터가 쌓이는 속도보다 빠르게 데이터를 처리하지 못하여 발생합니다. 메모리 채널과 파일 싱크를 연결했을 때 메모리 채널에 데이터가 쌓이는 속도보다 파일을 쓰는 속도가 느릴때 발생할 수 있습니다. Caused by: org.apache.flume.ChannelFullException: Space for commit to queue couldn't be acquired. Sinks are likely not keeping up with sources, or the buffer size is too tight at org.apache.flume.channel.MemoryChan..
하이브 기본 UDAF를 사용하는 중에 Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded 오류가 발생하는 경우가 있습니다. collect_list(), collect_set()을 이용하는 경우 발생할 수 있는데 너무 많은 데이터가 집계되어 JVM의 힙사이즈를 넘어설 때 많이 발생합니다. 이럴 때는 하나의 맵에서 처리하는 데이터를 줄이고, 컨테이너의 메모리를 늘려서 문제를 해결할 수 있습니다. -- 매퍼 개수 조정 set mapreduce.input.fileinputformat.split.maxsize=8000000; set mapreduce.input.fileinputformat.split.minsize=4000000; set tez.gr..
하이브는 매크로를 이용할 수 있습니다. 생성 기본 문법은 아래와 같습니다. 칼럼 이름을 표현식에 사용할 수 있습니다. 기본 빌트인 함수를 이용하여 매크로를 생성할 수도 있습니다. 매크로는 현재 세션에만 유지됩니다. CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression; 매크로를 생성하는 방법은 아래와 같습니다. CREATE TEMPORARY MACRO fixed_number() 42; CREATE TEMPORARY MACRO string_len_plus_two(x string) length(x) + 2; CREATE TEMPORARY MACRO simple_add (x int, y int) x + y; CREATE TEMPORARY..
네이버에서 발표한 자료를 통해 하둡 클러스터를 운영하면서 주의해야 할 사항에 대해서 알아보겠습니다. 네임노드 네임노드는 힙메모리에 HDFS에 존재하는 모든 파일의 메타정보를 저장하고 있습니다. 네임노드 JVM의 힙메모리 사이즈(만 블록당 1G의 메모리가 사용)에 따라 전체 파일, 블록의 개수가 제한됩니다. 파일, 블록이 많이 생성되어 메모리의 한계치에 도달하면 JVM의 힙메모리를 늘려야 합니다. 하지만 메모리 설정을 변경하려면 네임노드를 재기동해야 하고, 네임노드는 재기동 할 때 블록 정보를 재구축하기 위해 fsimage, edits 파일을 읽어서 블록정보를 재구축합니다. 또한 데이터노드로 부터 블록 정보를 받아서 결과를 연동합니다. 이 과정에서 파일 개수가 많을수록 재기동에 걸리는 시간이 길어지고, 이..
우지에서 기본 EL 함수를 이용하여 문자열을 치환(replace)하는 방법을 알아보겠습니다. 문자열을 치환하는 함수는 replaceAll입니다. 이 함수와 정규식을 이용하여 문자열을 치환할 수 있습니다. replaceAll(String src, String regex, String replacement) 정규식을 이용할 수 있기 때문에 대소문자 구분없이 변경을 위해서 (?i)를 넣어주면 됩니다. mapred.job.queue.name ${replaceAll(param, 'AA', 'aa')} ${replaceAll(param, '(?i)AA', 'aa') eq 'aa') Basic_EL_Constants
하이브 트랜잭션 테이블을 조회할 때 발생하는 오류는 아래 두 가지 입니다. 트랜잭션 테이블은 현재 세션이 트랜잭션 세션이어야 하고, hive.support.concurrency=true일 때만 조회할 수 있습니다. This command is not allowed on an ACID table default.table_name with a non-ACID transaction manager FAILED: RuntimeException [Error 10264]: To use DbTxnManager you must set hive.support.concurrency=true -- 설정을 하지 않은 상태에서 ACID 테이블인 table_name을 조회할 때 오류 발생 hive (default)> select ..

waggle-dance는 여러 개의 하이브 메타스토어를 통합하여 하나의 메타스토어처럼 처리할 수 있게 해주는 서비스입니다. 아래의 쿼리에서 x, y테이블은 다른 메타스토어에 존재하는데 waggle-dance가 이 메타스토어를 통합하여 하나의 메타스토어에 요청하는 것처럼 처리할 수 있게 도와줍니다. hive> SELECT * FROM local.x, remote.y WHERE x.id = y.id AND x.foo > 1 AND y.bar = 2; 특징 호텔스 닷컴에서 개발하여 오픈 소스로 변경 여러 곳에 배포된 하이브 메타스토어를 통합하여 조회할 수 있는 기능을 제공 다중 하이브 메타스토어 환경에서 통합된 정보를 제공할 수 있는 장점 테이블의 select, join 처리를 위한 통합 엔드 포인트 제공 아..

Apache livy는 REST Aapi를 이용해서 스파크 작업을 요청할 수 있는 서비스입니다. REST Api와 자바, 스칼라 라이브러리를 이용해서 작업을 요청할 수 있습니다. 다음의 특징을 가집니다. 멀티 클라이언트에서 여러 개의 스파크 작업을 요청할 수 있음 작업 간 RDD와 데이터 프레임 공유가 가능 여러 개의 스파크 컨텍스트를 관리할 수 있고, 스파크 컨텍스트는 얀이나 메조스 같은 클러스터에서 실행(Livy 서버에서 실행되지 않음) 스파크 작업은 JAR, 자바/스칼라 API, 코드 조각을 통해 요청 보안 통신을 이용해 안정성 제공 REST API 요청 방법 # POST 방식으로 작업 실행 # curl 옵션 -X: 전송방식, -H: 헤더정보추가 -d: POST 파라미터(json 형식) # file..
- Total
- Today
- Yesterday
- SPARK
- 하둡
- 정올
- build
- ubuntu
- 파이썬
- SQL
- airflow
- bash
- emr
- Tez
- nodejs
- 오류
- oozie
- java
- 백준
- HIVE
- HDFS
- AWS
- error
- Hadoop
- 알고리즘
- S3
- 하이브
- Linux
- mysql
- Python
- hbase
- 다이나믹
- yarn
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |