증상 EMR을 이용하여 데이터 처리 중 갑자기 각 데이터 노드의 Non DFS Used 용량이 늘어나서 실제 데이터를 저장할 용량이 부족해졌습니다. # hdfs dfsadmin -report로 확인 Decommission Status : Normal Configured Capacity: 165810782208 (154.42 GB) DFS Used: 32090261515 (29.89 GB) Non DFS Used: 45128228853 (42.03 GB) # Non DFS Used 용량의 증가 DFS Remaining: 88592291840 (82.51 GB) DFS Used%: 19.35% DFS Remaining%: 53.43%원인 데이터 노드를 확인하니 /mnt/yarn 아래 partion*.tmp,..
엘라스틱 서치에 대해서 알아보겠습니다. 엘라스틱서치(Elasticsearch) 2012년 샤이 배논에 의해 개발된 아파치 루씬(Lucene)기반의 분산 검색 엔진 엘라스틱서치는 단독으로 사용되기 보다는 로그스태쉬(Logstash: 로그수집), 키바나(Kibana: 시각화. 모니터링)와 함께 ELK 스택으로 구성 됨 큰 데이터를 실시간으로 분석 가능 특징 스케일 아웃 지원 오류에 대비한 고가용성 구조 지원 샤드, 레플리카를 이용하여 데이터 분산 저장 REST API를 지원. JSON 형태의 데이터 지원 주요 용어 일반 용어 RDB와 엘라스틱 서치의 용어는 아래처럼 바꿔서 이해할 수 있습니다. 테이블 = 인덱스 인덱스는 샤드 단위로 파티션 샤드는 복제를 가짐 로우 = 도큐먼트 칼럼 = 필드 스키마 = 매핑 ..
Caused by: java.sql.SQLException: [Amazon](500310) Invalid operation: VACUUM is running; at com.amazon.redshift.client.messages.inbound.ErrorResponse.toErrorException(Unknown Source) at com.amazon.redshift.client.PGMessagingContext.handleErrorResponse(Unknown Source) at com.amazon.redshift.client.PGMessagingContext.handleMessage(Unknown Source) at com.amazon.jdbc.communications.InboundMessagesPi..
AWS-EMR은 여러가지 기본적으로 실행되는 서비스 프로그램들이 있습니다. 이 서비스 목록을 확인하는 방법은 다음과 같습니다. AWS EMR의 주요 서비스의 경우 ps -e f 명령으로 프로세스 아이디를 찾아서 kill 명령으로 강제로 죽여도 EMR 내부적으로 서비스를 감시하는 프로세스가 자동으로 다시 실행합니다. https://aws.amazon.com/ko/premiumsupport/knowledge-center/restart-service-emr/ Amazon EMR에서 서비스 다시 시작 3. 몇 초 기다린 후 다음과 비슷한 명령을 실행하여 서비스를 시작합니다. aws.amazon.com
IntelliJ를 이용할 때 영문 스펠링을 인식해서 아래에 녹색 줄을 보여주는 기능을 기본으로 제공합니다. 에러는 아니지만 코드를 작성할 때 신경이 쓰이기 때문에 이를 없애는 방법은 다음과 같습니다. File -> Settiongs으로 설정 화면을 열고, Editor -> Inspections -> Spelling -> Typo의 체크를 꺼주면 됩니다. 아니면 문제가 발생한 위치에서 Alt + Enter로 확장 기능을 실행하고, Typo: Change to... -> Edit Inspection profile setting에 가서 Typo의 체크를 꺼주면 됩니다. https://www.jetbrains.com/help/pycharm/spellchecking.html Spellchecking - Help ..
AWS EMR에서 EMR FS 를 이용해서 버켓에 디렉토리를 생성할 때 XML 파싱 오류가 발생하는 경우가 있습니다. 이는 경로 중간에 특수문자나 깨진 문자가 있어서 파싱오류가 발생하기 때문입니다. s3://[]/a/b/c 디렉토리를 생성할 때, s3://[]/a&c/ 와 같은 형식으로 중간에 특수 문자가 들어가면 XML 파싱을 하지 못해서 오류가 발생합니다. 해당 폴더를 삭제하거나, 수정해야 합니다. $ hadoop fs -mkdir s3://[]/a/b/c mkdir: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.AmazonClientException: Failed to parse XML document with handler class com.amazon...
JVM 자바 가상 머신(Java Virtual Machine) 자바 바이트 코드를 실행하는 주체 Linux, Window, Mac 등 OS에 맞게 구현 JVM Spec에 맞춰 구현 Oracle, Eclipse, IBM 등 여러 회사에서 구현 HotSpot, OpenJ9 JVM Language JVM에서 실행가능한 언어 Clojure, Groovy, JRuby, Jython, Kotlin, Scala 자바 바이트 코드 자바 바이트 코드 = 클래스 파일 = .class 컴파일러가 .java 파일을 .class 파일로 해석 자바 컴파일러, 스칼라 컴파일러, 코틀린 컴파일러 등 JVM은 자바 바이트 코드를 해석해서 실행 Write Once, Run Everywhere JVM 주요 모듈 클래스 로더(Class L..
하이브 TEZ작업 중 발생하는 다음의 GC오류는 수행시간의 많은 부분(98%)이 GC에 들어가고, GC를 수행하여도 사용할 수 있는 메모리가 부족(2%가 복구)할 때 발생하는 오류입니다. -XX:-UseGCOverheadLimit 옵션을 이용하여 이 오류가 발생하지 않도록 설정 할 수 있습니다. 자바 프로그램에서는 -Xmx 옵션으로 힙의 용량을 늘여서 해결할 수 있습니다. 하이브에서는 컨테이너의 메모리 용량과 힙의 용량을 늘여서 해결할 수 있습니다. Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded at java.util.Arrays.copyOf(Arrays.java:3181) TEZ 컨테이너의 메모리 증설 방법은 다음과 같습니다. 또한..
쉘스크립트 프로그래밍에서 인터럽트 시그널이 입력될 때 어떤 처리를 해야 하는 경우 사용하는 명령어가 trap 입니다. 리눅스 운영체제마다 다양한 시그널을 가지고 있고, 현 운영체제의 시그널은 kill명령어로 확인할 수 있습니다. 운영체제의 인터럽트 시그널 종류 및 번호 확인 $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SI..
tput 명령어는 터미널에서 화면을 제어할 수 있습니다. 커서의 위치, 화면의 배경색, 문자의 색상 등을 변경할 수 있습니다. 여기서는 간단한 사용법에 대해서 알아보겠습니다. * tput을 이용하여 화면을 clear 하고 내용을 출력하는 것을 반복하면 화면이 깜빡이는 것 처럼 보일 수 있습니다. 이는 화면 전체를 지우고 다시 처리하는 과정에서 발생하는 현상이기 때문에 화면 전체를 지우지 않고 필요한 부분으로 커서를 옮겨서 새로 출력하는 것이 좋습니다. (참고) 다음의 사이트에서 상세한 내용과 좋은 예제들을 확인할 수 있습니다. http://korea.gnu.org/manual/release/termutils/ 스크립트로 만든 휴대용 터미널 제어기 스크립트로 만든 휴대용 터미널 제어기 tput과 tabs ..
프로그래밍에서 메모리 누수현상(Memory Leak)은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다. 자바의 메모리 누수 자바에서 메모리 누수는 더이상 사용하지 않는 객체가 가비지 컬렉션(GC)에 의해서 회수되지 않고 계속 누적되는 현상입니다. Old 영역에 누적된 객체로 인해서 메이저 GC가 빈번하게 발생하게 되고, 프로그램의 응답속도가 늦어지다 결국 OOM(OutOfMemory) 오류로 프로그램이 종료됩니다. 주로 빈번한 전역변수의 선언이나, 리스트나 해쉬맵 같은 콜렉션에 저장한 객체를 해제하지 않고 계속 유지하게 되면서 주로 발생합니다. 다음의 dzone 기사를 보면 Java 에서 메모리릭이 일어는 경우를 5가지 예를 들어서 코드와 함께 설명하고 있습니다. https://dzon..
최근 hive 작업을 진행하면서 하이브 메타스토어의 연결이 자주 끊어지는 현상이 발생하였습니다. 이 문제를 확인하기 위해서 로그를 확인하였는데 다음과 같은 메시지를 확인할 수 있었습니다. 이 메시지는 어떤 이유(보틍은 GC작업)에 의해서 JVM이 멈췄다는 것을 이야기 하고 있습니다. 2019-05-20T08:20:23,695 INFO [org.apache.hadoop.hive.common.JvmPauseMonitor$Monitor@503a5861([])]: common.JvmPauseMonitor (JvmPauseMonitor.java:run(194)) - Detected pause in JVM or host machine (eg GC): pause of approximately 1727ms 2019-0..
배쉬쉘은 기본적으로 정수(integer) 연산만 사용할 수 있습니다. 실수 연산을 사용하기 위해서는 bc 명령어를 이용해야 합니다. 실수 표현을 위해서는 -l 옵션을 이용해야 합니다. x=9 y=12 # 기본 설정은 정수 계산 $ echo "$x / $y" | bc 0 # -l 옵션으로 실수 표현 $ echo "$x / $y" | bc -l .75000000000000000000 # scale 설정으로 소수점 이하 출력 설정 $ echo "scale=3;$x / $y" | bc -l .750 # 소수점 이하 처리는 버림 $ echo "scale=1;$x / $y" | bc -l .7
파이썬의 urllib 라이브러리를 이용하여 개발하는 중 다음의 오류가 발생하였습니다. 파이썬3 부터는 PEP 476 규약에 따라 HTTPS 프로토콜을 이용하는 경우 인증서를 이용하여 유효성 체크를 하도록 되어 있는데, 로컬의 인증서를 가져오지 못하기 때문에 발생하는 현상입니다. [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate 인증서의 위치를 전달하 거나, PEP 476 문서에서 알려주는 방법처럼 인증서를 확인하는 절차를 무시하게 하면 됩니다. 수정한 쿼리는 다음과 같습니다.
하둡 맵리듀스 잡을 실행할 때 발생하는 이 오류는 AM의 staging 디렉토리를 변경하여 주면 됩니다. yarn.app.mapreduce.am.staging-dir /tmp/hadoop-yarn/staging The staging dir used while submitting jobs. 이 설정값을 다른 값으로 변경하고 실행하면 회피할 수 있습니다. 19/06/18 01:28:12 INFO client.RMProxy: Connecting to ResourceManager at host:8032 java.io.IOException: The ownership on the staging directory /tmp/hadoop-yarn/staging/root/.staging is not as expected...
파이썬에서 프로그레스바를 처리하는 방법은 문자를 출력하고, 캐리지 리턴(/r) 문자를 이용하여 출력 커서를 다시 첫번째 라인으로 옮겨서 다시 출력하게 하는 것입니다. * 이 소스는 터미널 환경에 따라서 개행이 될 수도 있습니다. 실제 환경에서 테스트를 해보시는 것이 좋습니다. 이클립스에서 실행하면 개행이 되고, 로컬 터미널에서 하면 개행이 되지 않습니다. 원본 소스코드는 다음 페이지에서 확인이 가능합니다. 추가적으로 tqdm 라이브러리를 이용하면 좀 더 편리하게 프로그레스바를 출력할 수 있습니다. https://stackoverflow.com/questions/3173320/text-progress-bar-in-the-console/34325723#34325723 Text Progress Bar in t..
TestDFSIO는 하둡에서 HDFS의 성능을 체크하기 위해서 제공하는 기능입니다. 파일 개수와 사이즈를 지정하여 HDFS의 대역폭과 read, write 시간을 확인할 수 있습니다. 소스코드 하둡 GIT(바로가기)에서 확인할 수 있습니다. apache/hadoop Apache Hadoop. Contribute to apache/hadoop development by creating an account on GitHub. github.com 자신이 다운로드 받은 라이브러리 중에서 examples나 test jar 파일에 해당 소스코드가 들어 있습니다. jar파일은 메이븐에서 다운로드 할 수 있습니다. hadoop-mapreduce-client.jobclient*.jar 로 검색하면 됩니다. mvnrepo..
비쥬얼 스튜디오 코드 다운로드는 다음의 홈페이지에서 하면 됩니다. https://code.visualstudio.com/ Visual Studio Code - Code Editing. Redefined Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. code.visualstudio.com 한글화는 왼쪽의 확장 탭에서 korean을 검색하고, 설치하면 됩니다.
프로그래밍에서 메모리 누수현상(Memory Leak)은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다. 자바의 메모리 누수 현상은 이전글을 참고 바랍니다. 2019/07/02 - [개념] - [개념] 메모리 누수(Memory Leak) 현상 [개념] 메모리 누수(Memory Leak) 현상 프로그래밍에서 메모리 누수현상(Memory Leak)은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다. 자바의 메모리 누수 자바에서 메모리 누수는 더이상 사용하지 않는 객체가 가비지 컬렉션(GC).. 118k.tistory.com 힙 덤프 생성 메모리 누수 문제가 발생하면 JVM의 힙 덤프를 이용하여 메모리에 어떤 객체가 생성되어 있는지를 확인할 수 있습니다. JDK와 함께 제공되는..
자바는 가비지 콜렉션 기능을 이용해 메모리 관리의 효율성을 제공합니다. 자바의 가비지 콜렉션은 'weak generational hypothesis' 이론에 기반합니다. 이는 신규로 생성한 객체의 대부분은 금방 사용하지 않는 상태가 되고, 오래된 객체에서 신규 객체로의 참조는 매우 적게 존재한다는 것입니다. 이 이론에 기반하여 자바는 Young 영역과 Old 영역으로 메모리를 분할하고, 신규로 생성되는 객체는 Young 영역에 보관하고, 오래동안 살아남은 객체는 Old 영역에 보관합니다. Young 영역은 Eden, S0, S1 영역으로 구분됩니다. 신규로 생성되는 객체는 Eden에 보관되고, Eden 영역이 100% 차게 되면 사용하지 않는 객체는 제거하고 사용되는 객체는 S0 영역으로 이동합니다. 이..
JVM의 메모리 구조를 알아보겠습니다. 메모리 공간 메모리 공간은 크게 힙영역과 힙영역이 아닌 공간으로 구분할 수 있습니다. 힙영역은 사용자가 크기를 정할 수 있는 공간입니다. Method : 클래스, 변수, 함수, 정적 변수, 상수 정보 등이 저장되는 영역. 프로그램 전체에서 공유 Stack : 함수 내에서 사용되는 매개변수, 지역변수, 리턴값 등이 저장되는 구역. PC Register: CPU의 Register와 역할이 비슷하고, 현재 수행중인 JVM 명령의 주소값이 저장 Native Method Stack: 네이티브 메소드 호출을 위해 할당되는 구역 Heap : new 명령어로 생성된 객체가 저장되는 영역. GC의 대상이 되는 영역 힙 영역 구조 힙영역은 가비지 콜렉션(GC)의 대상이 되는 영역입니..
JVM은 자바 파일(.java)을 컴파일하여 생성한 자바 바이트 코드(.class)를 해석하여 실행하는 인스턴스입니다. 자바는 한번 쓰고, 여러곳에서 사용하는 것을 목표로 하기 때문에 플랫폼에 독립적인 자바 바이트 코드를 생성하여 실행합니다. JVM은 각 플랫폼에 맞게 구현되고, 자바 바이트 코드가 각 플랫폼의 JVM위에서 동작합니다. JVM은 정해진 규격에 맞게 구현되기 때문에 바이트 코드가 같은 결과를 내는 것은 보장합니다. 하지만 처리 속도는 보장하지 않습니다. 각 제조사마다 세부적인 구현은 다르기 때문입니다. JVM의 종류는 다음의 위키에서 확인할 수 있습니다. 그 중에서 오라클의 HotSpot과 IBM JVM이 유명합니다. https://en.wikipedia.org/wiki/List_of_Ja..
하둡 YARN의 REST API를 이용할 수 있는 python2용 라이브러리를 소개합니다. 하둡 YARN의 REST API중 일부를 구현하였습니다. Cluster Writeable APIs 부터는 알파 버전이기 때문에 구현하지 않았고, YARN의 정보를 확인하는 용도로 사용하면 될 것 같습니다. 구현 목록은 다음과 같습니다. - Cluster Information API - Cluster Metrics API - Cluster Scheduler API - Cluster Applications API - Cluster Application Statistics API - Cluster Application API - Cluster Application Attempts API - Cluster Nodes AP..
인텔리j(Intellij)에서는 자주 사용하는 코드의 축약형을 제공하는 라이브 템플릿 기능을 제공합니다. 이클립스에도 에디터에서 템플릿 기능으로 제공합니다. 이클립스를 사용하다 인텔리j로 넘어와서 템플릿 이름이 변경되서 헷갈려서 정리합니다. 템플릿 위치 인텔리j: Settings -> Editor -> Live Template 이클립스: Preference -> Java -> Editor -> Template 템플릿은 다음과 같습니다. 에디터에서 축약어를 입력하면 명령어를 자동으로 보여줍니다. 축약어까지만 입력한 후 인텔리센스 단축키를 입력하면 원본을 출력합니다. 자주 사용하는 명령어는 익혀두면 수고로움을 줄여주기 때문에 생산성이 높아집니다. 원본 인텔리j 이클립스 System.err.println() ..
지난 시간에 이어서 간단한 플러그인을 개발하고 등록하는 방법에 대해서 알아보겠습니다. 지금 개발하는 플러그인은 프로퍼티 xml을 읽어서 표준 프로퍼티 파일로 변경하는 예제입니다. 예제 개발 다음의 xml 파일을 읽어서 프로퍼티 파일로 생성합니다. 작업 순서는 다음과 같습니다. 플러그인 작성 플러그인 저장 키 바인딩 다음의 xml을 읽어서 property 형태로 변경합니다. 설정 파일 xml을 읽어서 어떤 값들이 설정되어 있는지 비교할 때 유용합니다. xml mapred.reduce.tasks -1 property $ cat mapred.properties mapred.reduce.tasks=-1 플러그인 작성 플러그인은 다음과 같습니다. 현재창의 문자열을 읽어서 프로퍼티 문자열로 변경하고, 새창을 열어서..
하이브에서 테이블을 조회할 때 where 조건에 파티션 정보를 이용하면 하이브 메타스토어에서는 테이블의 파티션 정보를 가져와서 데이터를 조회할 로케이션을 설정합니다. 이때 MetaStoreDirectSql.java 에서 다음의쿼리를 이용하여 파티션 정보를 가져옵니다. 그런데 이때 파티션의 구간을 길게 잡아서 조회하는 파티션 개수가 많아지면 버퍼 오류가 발생하게 됩니다. select PARTITIONS.PART_ID from PARTITIONS inner join TBLS on PARTITIONS.TBL_ID = TBLS.TBL_ID and TBLS.TBL_NAME = "테이블명" inner join DBS on TBLS.DB_ID = DBS.DB_ID and DBS.NAME = "데이터베이스명" wher..
- Total
- Today
- Yesterday
- S3
- Tez
- airflow
- 알고리즘
- 하이브
- HIVE
- 오류
- SPARK
- 하둡
- nodejs
- mysql
- bash
- SQL
- build
- error
- emr
- java
- Hadoop
- 다이나믹
- ubuntu
- 파이썬
- HDFS
- 정올
- AWS
- Python
- Linux
- hbase
- oozie
- 백준
- 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 |