
스파크쉘의 마스터를 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..
GCP의 빅쿼리를 간단하게 알아보고, 빅쿼리 CLI를 이용하는 방법을 알아보겠습니다. 빅쿼리(BigQuery)란? 구글 클라우드(GCP)에서 제공하는 완전 관리형 데이터 분석 플랫폼 서버관리 없음, 쿼리로 데이터를 조회하는 서비스형 솔루션 저장비용과 조회비용이 있음 구글 클라우드 저장소와 다른 빅쿼리 저장소 비용있음 웹UI, CLI 환경에서 이용 가능 칼럼 기반으로 데이터를 저장 키나, 인덱스 개념 없음 갱신, 삭제 불가 데이터 복제를 통해 장애 복구에 대비함 BigQuery 문서 BigQuery 문서 | Google Cloud 대규모 데이터세트를 양방향으로 분석합니다. cloud.google.com 빅쿼리 구성 빅쿼리 데이터는 관계형 데이터베이스와 유사한 형태로 프로젝트, 데이터셋트, 테이블로 구성 프..
에어플로우 컨셉 에어플로우 공식 컨셉 문서를 통해 작업을 실행하고, 모니터링 하는 방법을 알아보겠습니다. 핵심 구상 DAG 파이썬으로 정의한 작업의 모음 작업 = Task = Operator 동작의 실행순서, 동작 시간, 공통 파라미터 등을 정의 에어플로우의 DAG_FOLDER에 파이썬 파일을 생성하면 에어플로우가 주기적으로 해당 폴더를 스캔하여 인식함 Scope 에어플로우는 파이썬 파일에 선언된 DAG를 모두 로딩 DAG는 글로벌 영역으로 선언되어야 함 자주 사용하는 패턴등을 SubDagOperator로 구현할 수도 있음 기본 파라미터 default_args는 모든 오퍼레이터에 적용 됨 공통 파라미터를 모든 오퍼레이터에 전달 default_args = { 'start_date': date..
gsutil 명령 중에서 acl ch, acl set, cp, mv, rm, rsync, setmeta 명령은 병렬로 수행하여 처리 속도를 높일 수 있습니다. -m옵션을 이용하면, 멀티 프로세싱과 멀티 스레딩을 이용하여 처리 속도를 높입니다. 네트워크 속도가 적절하지 않으면 처리 속도가 늦을 수도 있습니다. 상황에 맞게 적절하게 사용하는 것이 좋습니다. .boto파일에 옵션을 추가하여 성능을 조절할 수 있습니다. -m 사용 옵션 gsutil -m cp gs://bucket-name/dir1/* gs://bucket-name/dir2/* gsutil -m rsync gs://bucket-name/dir1/ gs://bucket-name/dir2/ .boto 파일 설정 .boto 병렬 처리에 사용하는 옵션은..
GCP에서 구글 스토리지에 파일을 복사할 때 아래와 같이 권한 부족으로 파일 복사가 되지 않을 때가 있습니다. 이 경우 해당 서버에 설정된 구글 클라우드 계정에 해당 버켓의 권한이 없기 때문입니다. $ gsutil cp ./sample.file gs://sample-raw-bucket/sample.file Copying file://./sample.file [Content-Type=application/octet-stream]... AccessDeniedException: 403 Insufficient Permission 현재 서버의 계정 확인 현재 서버에 설정된 계정은 gcloud auth list 명령으로 확인할 수 있습니다. 저의 경우는 계정이 설정되어 있지 않아서 오류가 발생하였습니다. 계정이 설..
하이브에서 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..
gsutil을 이용하여 s3에 접근할 때 다음의 AuthorizationHeaderMalformed 오류가 발생하는 경우가 있습니다. REST API를 이용한 호출에서 HTTP헤더의 정보에 오류가 있을 때 발생합니다. 아래의 오류는 S3의 region을 확인하지 못해서 발생하는 오류입니다. us-east-2에 접근해야 하는데 us-east-1에 접근하여 해당 오류가 발생하였습니다. $ gsutil ls s3://sample-bucket/ BadRequestException: 400 AuthorizationHeaderMalformed AuthorizationHeaderMalformedThe authorization header is malformed; the region 'us-east-1' is wron..

맥을 사용하다보면 사용자 캐쉬, 임시 파일등이 저장되면서 '기타'로 분류되는 용량이 늘어나서 디스크의 용량을 많이 차지하게 됩니다. 이때는 OmniDiskSweeper를 이용하여 용량이 많은 파일을 검색하고 삭제하면 됩니다. https://www.omnigroup.com/more OmniDiskSweeper, OmniWeb, and OmniPresence - The Omni Group Creators of Mac, iPad, and iPhone productivity software. Proud to bring you OmniFocus, OmniOutliner, OmniGraffle, and OmniPlan. www.omnigroup.com 기타 용량을 확인하면 아래와 같이 20G정도를 차지하고 있습니다..
EMR에서 hadoop fs 명령을 이용할 때 다음과 같은 경고 문구가 출력되는 경우가 있습니다. 작업에는 문제가 없지만, 작업 로그가 지저분해 질 수 있습니다. 이 경고는 ~/.aws의 aws 명령어의 프로파일에 profile 문구가 추가 되어서 발생합니다. ~/.aws/config, ~/.aws/credentials 파일을 확인하여 프로파일명을 수정하면 됩니다. 20/06/12 01:40:02 WARN internal.BasicProfileConfigLoader: Your profile name includes a 'profile ' prefix. This is considered part of the profile name in the Java SDK, so you will need to inclu..
맵 조인은 작은 크기의 테이블을 메모리에 적재하여 조인을 처리합니다. 이 때 테이블 데이터의 크기는 자바 객체의 사이즈입니다. 실제 파일의 사이즈와 다릅니다. 예를 들어 다음의 테이블 table_orc, table_txt는 동일한 데이터를 보관하고 있는 테이블입니다. 65,454개의 데이터를 저장 형식만 다르게 하여 저장한 것입니다. 맵 조인에는 객체 사이즈(rawDataSize)를 이용하기 때문에 hive.auto.convert.join.noconditionaltask.size를 설정할 때 객체 사이즈 기준으로 설정해야 합니다. 기본 설정이 10MB 일때 table_orc는 셔플 조인으로 처리되고, table_txt는 맵 조인으로 처리됩니다. table_orc를 맵조인으로 처리하기 위해서는 hive.a..
프로세스의 CPU, 메모리 사용 정보를 확인하는 방법은 ps, top 명령을 이용하는 것입니다. 프로세스의 메모리를 확인할 때는 프로세스의 PID를 알고 있어야 합니다. PS ps 명령의 -o, -p 옵션을 이용합니다. # 18299 프로세스의 정보를 확인 # pid: 프로세스 ID # pcpu: CPU 사용률 # pmem: 메모리 사용률 # rss: 물리 메모리 사용량 # vsz: 가상 메모리 사용량 # cmd: 커맨드 $ ps -o pid,pcpu,pmem,rss,vsz,cmd -p 18299 PID %CPU %MEM RSS VSZ CMD 18299 0.0 3.7 599432 3023072 /usr/lib/jvm/java 18299 프로세스의 정보를 확인해 보면 현재 3.7%의 CPU 점유율을 가지고..
CLI 환경에서 현재 사용중인 시스템의 CPU와 메모리 사용량을 알아보겠습니다. CPU 사용량 CPU 사용량을 top 명령으로 확인하는 방법을 알아보겠습니다. top 명령을 실행하면 아래와 같이 시스템의 전체 정보와 현재 실행 중인 프로세스의 정보를 확인할 수 있습니다. $ top top - 02:18:58 up 208 days, 15:21, 2 users, load average: 0.04, 0.08, 0.08 Tasks: 209 total, 1 running, 138 sleeping, 0 stopped, 0 zombie Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 15837320k total, 12287800..

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..
EMR을 장기간 운영하면 HDFS edits 파일이 로컬에 계속 쌓이게 됩니다. EMR은 기본적으로 세컨더리 네임노드를 실행하지 않기 때문에 HDFS를 빈번하게 사용하면 무시할 수 없는 속도로 파일이 생성됩니다. 운영중에 세컨더리네임노드를 실행하면 edits 파일을 복사해서 정리하기 때문에 10G의 edits 파일을 로컬에 복사하여 20G가 되게 되고 로컬 디스크에 용량이 충분하지 않다면 정리를 할 수 없습니다. 네임노드를 재 실행할 때 복구를 하지 않고, 신규로 생성할 것이라면 로컬의 edits 파일을 삭제 하면 됩니다. 삭제 명령은 다음과 같습니다. # 수정일자 확인후 6일전 파일은 삭제 sudo find /mnt/namenode/current/ -type f -name "edits_0*" -mtim..
NumPy에서 랜덤한 값을 생성하는 random에 대해서 알아보겠습니다. random에서 랜덤한 값을 생성하는 함수는 아래와 같습니다. https://numpy.org/doc/1.16/reference/routines.random.html Random sampling (numpy.random) — NumPy v1.16 Manual randint(low[, high, size, dtype]) Return random integers from low (inclusive) to high (exclusive). numpy.org 함수 설명 rand(d0, d1, …, dn) 주어진 차원으로 임의의 값을 반환 randn(d0, d1, …, dn) "표준 정규"분포에서 주어진 차원으로 임의의 값을 반환 randin..
하이브는 매크로를 이용할 수 있습니다. 생성 기본 문법은 아래와 같습니다. 칼럼 이름을 표현식에 사용할 수 있습니다. 기본 빌트인 함수를 이용하여 매크로를 생성할 수도 있습니다. 매크로는 현재 세션에만 유지됩니다. 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..
- Total
- Today
- Yesterday
- Hadoop
- Linux
- Tez
- emr
- nodejs
- yarn
- build
- 하이브
- 오류
- HIVE
- 정올
- hbase
- SPARK
- error
- mysql
- 다이나믹
- airflow
- AWS
- Python
- 알고리즘
- java
- ubuntu
- 파이썬
- 하둡
- oozie
- 백준
- HDFS
- bash
- SQL
- S3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |