본문 바로가기

java

맵리듀스에서 RDBMS로 인서트 시 GC overhead limit exceeded Issue 맵리듀스에서 리듀스 출력결과를 RDBMS로 저장 시 GC overhead limit exceeded Issue가 발생한다.해당 Issue는 리듀스 출력결과가 즉 RDBMS로 저장되어야 하는 데이터가 많은 경우 발생하게 된다. 맵리듀스에서 RDBMS로 Insert하기 위해 org.apache.hadoop.mapreduce.lib.db.DBOutputFormat(링크)를 사용한다. 해당 소스를 까보면 리듀스 출력결과로 Insert문자열을 생성하여 addBatch()로 보관 후 DB Connection이 close될때 executeBatch()가 실행되고 commit()이 실행된다. 즉 대량의 데이터가 한번에 Insert되는 것이다.해당 Issue와 관련해서 Cloudera블로그에도 관련 글이 존재한다. (링.. 더보기
AWS JAVA SDK를 이용한 EMR(Elastic MapReduce) Job Flow 생성 및 실행 AWS JAVA SDK를 이용하여 개발한 MapReduce를 EMR Custom Jar로 등록하여 Job Flow를 생성 및 실행하는 방법이다. private static final String EMR_SETUP_NAME = "Setup hadoop debugging"; private static final String HADOOP_SETUP_JAR = "s3://elasticmapreduce/libs/script-runner/script-runner.jar"; private static final List HADOOP_SETUP_ARGS_AS_LIST = Arrays.asList("s3://elasticmapreduce/libs/state-pusher/0.1/fetch"); private static .. 더보기
S3 전체 파일 리스트 가져오기 S3 특정 bucket에 저장된 Object 파일리스트 목록을 가져올때 아래와 같이 코딩을 할 수 있다. AWSCredentials crd = new BasicAWSCredentials(accessKey, secretKey); AmazonS3 s3 = new AmazonS3Client(crd); ObjectListing objects = s3.listObjects(bucketName, folderName); do { //1000개 단위로 읽음 for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) { } objects = s3.listNextBatchOfObjects(objects); 더보기
[Effective Java] private 생성자를 사용해서 인스턴스 생성을 못하게 하자 이번에 정리하고자하는 내용은 챕터 2의 4항목인 "private 생성자를 사용해서 인스턴스 생성을 못하게 하자"이다.블로그 작성 목적은 복습과 이 책을 다 읽고자하는 다짐으로 시작한다. 1. 문제점 프로젝트 진행 시 산술연산이나 배열작업 등의 유틸리티 클래스 류를 많이 만들어 사용한다. 해당 클래스들은 static 메소드와 static 필드로 흔히 구성되어져 있으며 이 클래스들은 인스턴스를 생성하지 못하게 설계되어 있다. 인스턴스 생성이 무의미 하기 때문이다. 하지만 컴파일러는 생성자가 없는 클래스라도 디폴트(default) 생성자를 만들어준다. 여기서 문제점은 javadoc 프로그램으로 생성하는 API 문서에 해당 생성자가 나타나므로 인스턴스가 생성 가능한 클래스로 오인될 수 있다. 2. 해결방법 인스.. 더보기
[Effective Java] private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자 이번에 정리하고자하는 내용은 챕터 2의 3항목인 "private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자"이다. 블로그 작성 목적은 복습과 이 책을 다 읽고자하는 다짐으로 시작한다. 1. 싱글톤 디자인 패턴 중 가장 간단하면서도 자주 사용하는 패턴 중 하나이며 하나의 인스턴스만 생성되는 클래스이다. 2. 싱글톤 사용방법 나는 이책에서 예로 설명하는 싱글톤 패턴 중 static 팩토리 메소드 패턴을 자주 사용하고 있으며 이책에서는 세가지의 싱글톤 패턴 방법을 소개하고 있다. 가. public final 필드를 갖는 싱글톤 public class Y2kpooh { public static final Y2kpooh INSTANCE = new Y2kpooh(); private Y2kpooh().. 더보기
[Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자 이번에 정리하고자하는 내용은 챕터 2의 2항목인 "생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자"이다. 블로그 작성 목적은 복습과 이 책을 다 읽고자하는 다짐으로 시작한다. 1. 생성자와 Static 팩토리 메소드의 제약 매개변수가 많아질 경우 해당 클래스의 객체를 생성하려면 신축성 있게 처리하지 못한다. 2. 해결방법 가. 텔리스코핑 생성자 패턴 고전적인 방법으로 텔리스코핑 생성자(telescoping constructor) 패턴이 있다. 생성자를 오버로딩하여 사용하는 방법으로 코드로 표현해보면 아래와 같다. public class Rects { private final int width; private final int height; private final int margin; pr.. 더보기
[Effective Java] 생성자 대신 static 팩토리(factory) 메소드 사용을 고려하자 Effective Java를 구매하여 매일 한 항목씩 읽으리라 다짐하며 공부하기 시작하였다. 항목은 총 78항목(2판 기준)으로 큰 챕터는 아래와 같다. 1. 개요 2. 객체의 생성과 소멸 3. 모든 객체에 공통적인 메소드 4. 클래스와 인터페이스 5. 제네릭 6. 열거형과 주석 7. 메소드 8. 프로그래밍 일반 9. 예외 10. 동시성 11. 직렬화 이번에 정리하고자하는 내용은 챕터 2의 1항목인 "생성자 대신 static 팩토리(factory) 메소드 사용을 고려하자"이다. 블로그 작성 목적은 복습과 이 책을 다 읽고자하는 다짐으로 시작한다. 생성자 객체 기반의 프로그래밍을 하다보면 객체를 생성하여야 한다. 객체를 생성한다를 다른 표현으로 인스턴스를 생성한다라고 하며 해당 클래스의 객체를 생성하기 위.. 더보기
Eclipse Tomcat 추가 시 Server Name blank 현상 Eclipse에서 Tomcat을 추가하려는데 아래와 같이 Server Name 입력 란에 키 입력이 되지 않는 현상이 발생하였다. 검색해보니 Eclipse 설정 파일을 몇개 삭제 해주면 문제해결 가능하더라. 1. 우선 Eclipse 을 종료한다.2. Eclipse Workspace 아래의 설정폴더 내의 2개의 파일을 삭제한다. - {Workspace}/.metadata/.plugins/org.eclipse.core.runtime/.settings 폴더 내 org.eclipse.wst.server.core.prefs org.eclipse.jst.server.tomcat.core.prefs3. 삭제 후 Eclipse를 재시작하면 정상적으로 Tomcat을 추가 가능하다. 참고자료 더보기
apache.commons.io.FileUtils 프로젝트를 진행하게되면 File Utils성 클래스를 만들어야 한다. 직접 만들기 보단 이전 프로젝트에서 가져오거나 인터넷 검색을 해서 이것저것 섞어 놓는 짜파게티 소스일 가능성이 크다.이전 프로젝트에서 사용했던 소스라면 모르지만 인터넷 검색을 통해 얻은 검증되지 않은 코드를 사용하다보면 성능저하 및 에러의 원인이 되고는 한다. 물론 나도 현재 진행하는 프로젝트에서 위와 같은 방법으로 접근하였다.어느정도 작업을 진행하던 중 Apache Commons IO라는 녀석을 알게되었다. Commons IO는 아파치 소프트웨어 재단에서 제공하는 자바 기반의 IO관련 오픈소스이다.(Apache Commons Wiki) 아... 지금까지 코딩 및 인터넷 검색으로 이것저것 붙여넣기 하던 소스 휴지통으로 보내버리고 Com.. 더보기
JUnit을 이용한 단위 테스트 1. JUnit 이란 JUnit은 자바용 단위 테스트 작성을 위한 산업 표준 프레임워크다. 2. JUnit 환경 세팅 JUnit개발 가이드는 이클립스 + springMVC + maven 개발환경 기반으로 작성하였다. 혹 위 환경기반으로 프로젝트를 작성하지 않았다면 아래 개발환경 구축 내용을 확인하기 바람 이클립스 + 톰캣 스프링MVC + maven 개발환경 구축 1장 이클립스 + 톰캣 스프링MVC + maven 개발환경 구축 2장 이클립스 + 톰캣 스프링MVC + maven 개발환경 구축 3장 2.1 JUnit 라이브러리 추가 JUnit을 사용하려면 프로젝트에 JUnit 라이브러리가 필요하다. Maven프로젝트는 의존관계 설정이 쉽게 되어 기존 프로젝트에서 처럼 개발자가 해당 라이브러리를 찾는 수고를 덜.. 더보기