목록분류 전체보기 (11)
Stack Empty
올 겨울 내가 참가하는 마지막 달리기 대회인 노르딕 레이스!이제껏 참가한 모든 대회의 코스 길이가 10km 였던 것과 달리 이번 코스는 7km.서울 살면서 서울 대공원 한번도 안 가봤는데 덕분에 구경도 잘하고 무엇보다 뉴트로지나에서 연 첫 대회였음에도 준비를 꽤나 성의것 잘해 좋았다.하지만 만만하게 생각하고 갔다가 코스 절반이 오르막이라 꽤나 힘들었다. 아래는 기록! 이름, 배번호는 편집처리~~
하둡의 각 데몬 및 역할NameNode 하둡은 master / slave 구조 하둡에서 어떻게 파일이 블록 단위로 나뉘어져 있는지, 어느 노드가 해당 블록을 가지고 있는지와 분산 파일 시스템의 전반적인 상태를 알고 있음, 즉 파일의 메타데이터 정보 보관DataNode 로컬 파일 시스템에 위치한 파일에 HDFS 블록을 기록하거나 해당 파일을 읽는 등의 단순 기능 수행, 지속적으로 현재 시점의 메타데이터를 가질 수 있도록 NameNode에게 보고Secondary NameNode NameNode는 하둡에서 단일 실패 지점을 가지는데 NameNode에서 장애가 발생할 경우를 대비하여 주기적으로 NameNode metadate의 Snapshot을 기록하며 NameNode 장애 발생 시SNN은 NameNode로 사..
하둡 설치 (우분투 12.04 LTS 기준)JDK6 설치 sudo apt-get install openjdk-6-jdk하둡 다운로드 : wget "http://archive.apache.org/dist/hadoop/core/hadoop-1.0.3/hadoop-1.0.3.tar.gz" (이 글 작성 기준 최신 stable version 1.2.1)하둡 압축 해제 tar xvfz hadoop-1.0.3.tar.gzJDK 설치 경로 및 하둡 패스 환경번수에 등록 cd ~ vi .hashrc 아래의 문구 추가 JAVA_HOME=JDK 설치 경로 (보통 /usr/lib/jvm/java-6-openjdk-amd64) HADOOP_HOME=HADOOP 압축 해제 경로 PATH=$PATH:$HADOOP_HOME/bin..
공식 홈페이지에서 Spring-Batch를 다음과 같이 설명하고 있다. '스프링 배치는 엔터프라이즈 어플리케이션 운영에 필요한 반복적인 작업을 위해 개발된 경량화 되고 종합적인 일괄 처리 프레임워크입니다.' 해당 설명대로 이를 위해 아래와 같은 기능등을 제공하고 있다. 주기적인 Commit 배치 프로세스동시 배치 처리 : Job 병행 처리엔터프라이즈 메세지 지향 처리대규모의 병행 배치 처리작업 실패 후의 수동 혹은 스케쥴을 적용한 재시작독립적 스탭(스프링 배치의 가장 작은 작업 단위)을 순차적으로 처리부분적 처리 -> 이미 처리한 부분 skip전체적으로 적용되는 배치 트랜잭션 또한 Spring-Batch를 도입해야 하는 이유에 대해서도 아래와 같이 설명을 하고 있다. 배치 개발시에 Spring의 프로그래..
검색 서비스를 수행하다보면 기존의 색인 내용을 변경해야 할 때가 있다. 상품의 가격이 변경되었다던지 하는 경우가 좋은 예라고 하겠다. 이럴 때는 루씬의 IndexWriter가 제공해주는 updateDocument() 메서드를 사용하면 쉽게 해당 작업을 수행할 수 있다. package com.tistory.outofmemoryerror.lucene.indexing; import static org.junit.Assert.assertEquals; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apac..
대부분의 검색 프로그램은 색인 저장소에서 사용자가 입력한 키워드에 맞는 정보를 검색하여 반환하는 것이 대부분이지만 때로는 색인 저장소의 데이터를 삭제해야 될 필요가 있다. 예를 들어 단종된 상품 정보를 더 이상 표시하지 않거나, 금지어가 포함된 모든 문서를 삭제하려는 경우다. 색인 저장소에서 Document를 삭제하려면 Term(루씬 색인에서 단어를 나타내는 가장 기본적 요소) 객체를 이용하여 색인한 Field ID와 내용을 입력한 후 IndexWriter의 deleteDocuments()메서드에 매개변수로 넘겨 호출하면 된다. 하지만 해당 메서드를 호출한다고 색인에서 곧바로 지정한 문서가 삭제 되는 것이 아니라 마치 DBMS의 그것 처럼 삭제 되어야 하는 대상이라는 표시만 해둔다. 이후 IndexWri..
루씬의 색인 작업은 크게 다음 3가지 순서로 볼 수 있다. 텍스트 변환 (추출)분석 (Token화)색인 데이터 생성 1. 텍스트 변환 루씬은 Full-Text 기반의 IR 라이브러리이므로 오로지 String만을 색인화 할 수 있다. 하지만 우리는 PDF 파일, MS 워드, 파워포인트 등의 문서로 정보를 제공하기도 한다. 이것은 Java에서 표현할 수 있는 일반적인 String이 아니므로 이들 정보에서 텍스트 본문을 추출해 낼 수 있는 무엇인가가 필요하게 된다. 그리고 HTML이나 XML은 그것 자체로 텍스트이지만 태그나 엘리먼트를 제거하여 실제 본문의 내용만을 추출할 수 있는 방법이 필요하다. 2. 분석 루씬에서 문서는 Document 객체로 다뤄지는데 IndexWriter의 addDocument를 호출..
OLTP 기반의 업무가 대부분인 요즘은 Front End-User와 Application의 소통이 중요한만큼 대부분의 개발자들의 관심이 UI, Business Logic, DB 설계등에 집중되어 있다. 개발 경력이 얼마 되지 않은 나조차도 신입 때 자주 볼 수 없던 각종 디자인 패턴등을 이용하여 프로그래밍 하는건 당연한 것이 되었고 FrontController를 필두로 한 MVC 기반의 웹 Application 개발은 마치 원래부터 그랬던 것 처럼 자연스럽게 내재화 되었다. 개발자가 Business Logic에만 집중할 수 있도록 이런 디자인 패턴을 제공해주는 각종 Framework가 많이 나오고 있고 이를 원할하게 사용하는 것 자체가 개발자의 능력을 가늠하는 중요한 잣대가 되고 있는 것도 사실이다. 하..
루씬은 색인 대상이 되는 문서의 색인 단어수에 제한을 두는 기능을 제공하고 있다. 2.x 버전에서는 IndexWriter Class에 직접적으로 색인이 되는 문서의 색인 대상 총 단어수를 제한할 수 있는 기능을 제공하는데 이 때 사용했던 것이 IndexWriter.setMaxFieldLength(int maxFieldLength)였다. 이 값은 기본적으로 10,000개로 설정이 되어 있으며 의미는 첫 10,000개의 단어만 색인 대상이 되며 만약 10,000개보다 단어 수가 많다면 이후 단어는 색인 대상에서 제외 됨을 의미한다. 위에서 '사용했던' 이라는 단어를 봐도 알 수 있겠지만 이 메서드는 Deprecated 되었으며 LimitTokenCountAnalyzer Class로 분석기를 Wrapping ..
루씬은 필드의 값을 변환하기 위해 토큰의 스트림으로 마킹되는 분석기를 채용했다. 색인 시점에 루씬은 분석기를 지정하게 되어 있고, 이 때 지정된 분석기는 필드와 텍스트로 이뤄진 TokenStream 으로 매핑 작업을 한다. 오늘은 이 TokenStream의 간단한 사용법을 보여주는 Class를 짜보자. package com.tistory.outofmemoryerror.lucene; import java.io.Reader; import java.io.StringReader; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucen..