Journal of the Korea Institute of Information and Communication Engineering 한국정보통신학회논문지 (J. Korea Inst. Inf. Commun. Eng.) Vol. 19, No. 3 : 552~557 Mar. 2015 오픈소스프레임워크를활용한검색엔진구현 송현옥 김아용 정회경 * Implement on Search Machine using Open Source Framework Hyun-Ok Song A-Yong Kim Hoe-kyung Jung * Department of Computer Engineering, Paichai University, Daejeon 302-735, Korea 요약 IT 기술발전과스마트기기들의사용증가로인해인터넷에서는많은데이터가생산되고소비된다. 이로인해정보검색기술의중요성이높아지고있지만정보검색기술은많은배경지식을요구하여접근하기어려운기술로인식되고있다. 그러나 Luene 의등장으로인해검색기술에대한배경지식이부족해도 Lucene 을사용하여검색엔진을구현할수있는배경을마련되었다. 본논문에서는 Lucene 기반으로개발된프레임워크들을사용하여검색엔진을구현하는방법에대해제안한다. 제안하는검색엔진에사용되는프레임워크들은 Hadoop 과 Nutch, Solr, Zookeeper 를사용하여분산처리와분산저장, 그리고고가용성을지원하는서버환경을보장한다. ABSTRACT IT technology development and smart appliances due to the increased use of a lot of data on production and consumption has become in the internet. Because this is why importance of information retrieval technology although the growing becoming aware of the difficult techniques to access the required of lot a background knowledge on information retrieval technology. However, the Lucene due to emerge provide to background can implement on search engine by using the Lucene of lack background knowledge for search technology. In this paper, suggest to implement on search engine by using the developed a framework on Lucene-based. Suggest a frameworks are use in the search engines on have guarantee in server environment support on distributed processing and distributed storage, and high availability by using the Hadoop and Nutch, Solr, Zookeeper. 키워드 : 하둡, 루센, 너치, 검색엔진, Solr, YARN Key word : Hadoop, Lucene, Nutch, Search Engine, Solr, YARN 접수일자 : 2015. 01. 02 심사완료일자 : 2015. 01. 28 게재확정일자 : 2015. 02. 12 * Corresponding Author Hoe-Kyung Jung(E-mail:hkjung@pcu.ac.kr, Tel:+82-42-520-5640) Department of Computer Engineering, Paichai University, Daejeon 302-735, Korea Open Access http://dx.doi.org/10.6109/jkiice.2015.19.3.552 print ISSN: 2234-4772 online ISSN: 2288-4165 This is an Open Access article distributed under the terms of the Creative Commons Attribution Non-Commercial License(http://creativecommons.org/li-censes/ by-nc/3.0/) which permits unrestricted non-commercial use, distribution, and reproduction in any medium, provided the original work is properly cited. Copyright C The Korea Institute of Information and Communication Engineering.
오픈소스프레임워크를활용한검색엔진구현 Ⅰ. 서론검색엔진은웹에존재하는사이트나문서들을검색하기위한프로그램이다 [1]. 검색엔진은기본적으로웹사이트나문서를크롤링하는웹크롤링과크롤링한데이터를인덱싱작업을담당하는인덱서, 마지막으로사용자검색요구에맞게인덱싱된데이터와비교해주는검색기로분류된다 [2, 3]. 검색엔진을구현하기위해서는많은배경지식을갖춘전문인력과많은개발비용이소모되어 IT 선도기업이나전문기관의소유물로인식되었다. 하지만 Lucene 등장으로인해배경지식없이소수의개발자도검색엔진을구현할수있는배경을마련하였다. 본논문에서는 Lucene 기반으로개발된웹크롤러인 Nutch와 Solr, Tomcat, Zookeeper, Hadoop을사용하여검색엔진을구현하는방안에대해제안한다. 제안하는검색엔진은기존의고가의서버를요구하는검색엔진과달리다수의저가서버나일반 PC 등을사용하여검색엔진을구현할수있고, 사용용도에따라단일환경과분산환경에서크롤링하고검색할수있는검색엔진이다. Ⅱ. 관련연구 2.1. Hadoop 2005년 Nutch 오픈소스검색엔진의분산확장문제에서시작한 Hadoop은 2006년야후 (Yahoo) 의전폭적인지원과많은개발자의참여로인해개발되었다 [4]. Hadoop은 2003년구글 (Google) 의구글파일시스템논문 (The Google File System) 에서영감을얻어자바언어로개발된프레임워크이며 HDFS(Hadoop Distributed File System) 와 MapReduce로구성되어있다 [5]. Hadoop은 HBase나 Spark, Storm 같은다른프레임워크들과연동하여사용할수있다. Hadoop 2는 Hadoop 1이가지고있던설계구조와노드병목현상, 제한된네임노드에서발생하던문제들을개선하기위해개발되었다 [6]. Hadoop 2를 YARN(Yet Another Resource Negotiator) 이라고불리며잡트래커의주요기능인자원관리와잡생명주기관리를새로운컴포넌트로분리하였다. 2.2. Nutch Lucene 기반으로개발된 Nutch는웹사이트나웹문서를크롤링하는오픈소스웹크롤러소프트웨어이다 [7]. Nutch는특정도메인에서크롤러를대상으로하는정규표현식기반의도메인필터를가지고있으며동적 URL 필터와내용, 형식등의다른종류와다양한플러그를지원한다. 그리고정규식과지명사전에따라새로운정보들을추출한다. Nutch의큰이점은투명성과이해하기쉽고확장성이뛰어나다. 또한, Nutch는검색엔진에서가장주요한부분인순위알고리즘이나구조들이공개되어있어다른검색엔진에비해쉽게확장할수있다. 2.3. Solr Lucene 기반으로개발된 Solr는검색엔진으로단독서버형태로동작한다 [8]. 그리고다양한 API와플러그인을할수있어확장성이뛰어나다. 문서들은 HTTP를사용하여 XML이나 JSON, CSV, 바이너리형태등으로인덱싱요청을할수있다. 또한, 검색역시 HTTP GET 으로요청할수있다. Solr는텍스트위주의검색방식을지향하며높은웹트래픽을감당할수있도록최적화를할수있다. 또한, 표준인터페이스를제공하며선형확장이나인덱스를자동복제하고자동으로복구할수있다. 그리고 Solr 환경설정은 XML 파일기반으로설정하여유연하고최적화를할수있다 [9]. 2.4. Zookeeper Zookeeper는분산코디네이터서비스를제공하는프레임워크이다 [10]. 분산환경에서는락이나네이밍서비스, 클러스터등을쉽게구현할수있는기능을제공해야하며다양한운영상황과장애발생시피해를최소해해야한다. Zookeeper는이러한문제들을쉽게해결해주는역할을하고분산처리시스템에서일과적으로관리해주는시스템이다. 주요용도는분산락킹과분산시스템의통합설정관리, 네이밍서비스, 분산시스템의단일스퀸스, 활동과대기관리, 클러스터의맴버쉽을관리한다. 또한, 분산환경에서각머신들의상태들과자원을모니터링할수있다 [11]. 553
한국정보통신학회논문지 (J. Korea Inst. Inf. Commun. Eng.) Vol. 19, No. 3 : 552~557 Mar. 2015 Ⅲ. 검색엔진설계와구현 는그림 3 과같다. 3.1. 검색엔진설계검색엔진에는일반 PC 7대를사용하여네임노드와보조네임노드, 데이터노드로구현하였다. 제안하는검색엔진의구조는그림 1과같다. 그림 1. 검색엔진의구조 Fig. 1 Search Engine Structure 네임노드는 Nutch와 Solr, Tomcat, Lucene을사용하여검색엔진을구현하고 Hadoop과 Zookeeper를사용하여분산환경을구축하였다. 보조네임노드는네임노드가효과적으로운영할수있게보조하며데이터노드는분산처리와분산저장을담당한다. 네임노드의주요구성은그림 2와같다. 그림 2. 네임노드구성도 Fig. 2 Namenode Structure 네임노드에는단일노드로크롤링하는 Nutch와 Hadoop 환경에서분산노드로크롤링하는 Nutch로구성되어있다. 그리고인덱싱을담당하는 Solr와웹서버로사용하는 Tomcat, 분산처리와분산저장을담당하는 Hadoop, 고가용성을위한 Zookeeper로구성된다. 단일노드와분산노드로실행되는 Nutch의작업순서도 그림 3. Nutch 순서도 Fig. 3 Nutch Flow Chart 실행명령어에의해단일노드와분산노드로분류되어크롤링이실행되며크롤링된데이터는 Solr에서인덱싱작업을진행한다. 사용자는 Solr에내포된 Velocity Search UI를사용하여검색할수있다. 3.2. 검색엔진구현검색엔진에사용된운영체제는 Ubuntu 12.04를사용하고네임노드와보조네임노드, 데이터노드에사용된하드웨어사양은다음과같다. 네임노드 - CPU : Intel i5-2400 - RAM : 4 GB 보조네임노드 - CPU : Intel Core2 Duo E8400 - RAM : 4 GB 데이터노드 1, 2 - CPU : Intel Core2 Duo E6550 - RAM : 3 GB 데이터노드 3, 4, 5 - CPU : Intel Pentium 4 3.20 - RAM : 2 GB 554
오픈소스프레임워크를활용한검색엔진구현 검색엔진에사용된프레임워크들은자바기반으로동작하기때문에 JVM 환경을지원해야한다. 논문에서는 Oracle JDK 7를사용하고리눅스환경변수로사용되는.bashrc 파일에 JVM과각각의프레임워크들을환경설정하였다. 분산노드로운영하는검색엔진은 SSH 기반으로다른노드들과통신하여데이터들을분산처리한뒤저장한다. SSH은 /etc/hosts 파일에 PC들의 IP 주소와호스트명을환경설정한다. 그리고각각의노드에서 SSH 키를생성한뒤네임노드의 authorized_keys 에노드들의공개키를통합하고재배포하여노드간에는비밀번호없이접속할수있도록설정한다. 그림 4는 SSH를사용하여각각의노드로환경설정파일을배포하는화면이다. 뒤압축을해제한다. 그리고 Tomcat의 tomcat-user. xml 파일과 web.xml 파일에환경변수를설정한다. Ⅳ. 실험검색엔진에서웹크롤링을담당하는 Nutch의디렉토리구조는그림 5와같다. 그림 5. Nutch 디렉토리구조 Fig. 5 Nutch Directory Structure 그림 4. Hadoop 환경설정파일배포 Fig. 4 Hadoop Configuration File Distribution 정상적으로분산노드가실행되는지확인하는방법은 jps 명령어를사용하여확인할수있다. Zookeeper는 zoo.cfg 파일에환경변수를설정한다. 그리고각각의노드로배포하고서버명에맞게 myid 파일에식별번호를부여한다. Nutch는 nutch-site.xml 파일에환경변수를설정하고 Ant를사용하여빌드를한다. 빌드가성공적으로완료되면 Runtime 폴더가생성되는데생성된폴더안에 urls 폴더를생성하고 seed.txt 를생성하여검색하고자하는웹사이트의 URL을설정한다. 그리고 Nutch와 Solr 연동을위해서는 Nutch의 schema.xml 파일을 Solr의 schema.xml 파일로복사한뒤환경변수를설정한다. Solr와 Tomcat의연동하기위해서는 Solr의 Solr. war 파일을 Tomcat의 /webapps/ 폴더안에복사한 단일노드로실행할때는 local 폴더안에서진행되고분산노드로실행할때는 depoly 폴더에서진행된다. 명령어는두가지로분류되어용도에맞게사용할수있다. 4.1. 단일노드로 Nutch 실행단일노드로크롤링하는 Nutch의실행화면은그림 6 과같다. 그리고크롤링된데이터들은그림 6과같이지정된폴더에저장된다. 그림 6. Nutch 1.8 실행화면 Fig. 6 Nutch 1.8 Run Screen 555
한국정보통신학회논문지 (J. Korea Inst. Inf. Commun. Eng.) Vol. 19, No. 3 : 552~557 Mar. 2015 4.2. 분산노드로 Nutch 실행분산노드로크롤링하는 Nutch는 Hadoop의 Map Reduce 기반으로실행되고실행하는화면은그림 7과같다. 인덱싱된데이터는 Solritas를사용하여사용자가검색할수있다. 사용자가 Solritas 기반으로검색하는화면은그림 10과같다. 그림 7. Nutch 1.7 실행화면 Fig. 7 Nutch 1.7 Run Screen MapReduce로실행된 Nutch의크롤링데이터는 HDFS에저장되며그림 8과같이웹브라우저를통해확인할수있다. 그림 10. Solr 검색화면 Fig. 10 Solr Search Screen Ⅴ. 결론 그림 8. Nutch 1.7 실행결과 Fig. 8 Nutch 1.7 Run Result 4.3. Solr 인덱싱과검색 Nutch로크롤링한데이터는 Solr를사용하여인덱싱할수있다. Solr를사용하여인덱싱을진행하는화면은그림 9와같다. 그림 9. Solr 인덱싱 Fig. 9 Solr Indexing IT 기술의발전으로인해데이터생산과소비가급격하게증가하고있다. 이로인해많은데이터속에서사용자가원하는정보를효과적으로찾을수있게해주는검색엔진의기술중요성이높아지고있다. 검색엔진은인터넷을검색하는공용검색엔진과내부인트라넷을검색하는내부검색엔진으로분류된다. 기존의검색엔진을구현하기위해서는많은개발비용이소모되어접근하기어려운기술로인식되고있었다. 하지만 Lucene 의등장으로인해적은개발비용으로검색엔진을쉽게구현할수있게배경을마련하였다. 본논문에서는 Lucene 기반으로개발된프레임워크들을사용하여대용량의데이터를검색할수있는검색엔진의구현방법과사용방법을제안하였다. 논문에서구현한검색엔진은 Lucene기반으로개발된자바프레임워크들을사용하여이식성이뛰어나고적은개발비용과소수의개발자로구현할수있다. 그리고제안하는검색엔진은분산처리환경을지원하기때문에상황에맞게하드웨어장비를추가하거나제거할수있는유연성을제공한다. 또한, 논문에서사용하는자바프레임워크들은모듈별로연동하여사용하기때문에각각의프레임워크들을독립적으로도실행할수있어사 556
오픈소스프레임워크를활용한검색엔진구현 용의유연성도제공한다. 논문에서는제안하는검색엔진의성능을검증하기위해단일노드와분산노드환경에서웹크롤링을실시하고인덱싱작업과한글키워드로검색을하여논문의적합성을입증하였다. 향후연구과제로는 Solr와 Hadoop을연동하여분산노드에서실시간으로인덱싱할수있는기능에대한연구가필요하다. REFERENCES [ 1 ] Hee-Seok Park, "Effective Travel Information Search on the Internet Search Engine" Korea Academic Society of Tourism Management, Vol. 15, No. 1, pp. 212-231, 2010. [ 2 ] Heydon, Allan, and Marc Najork, "Mercator: A scalable, extensible web crawler." World Wide Web 2.4, pp.219-229, 1999. [ 3 ] Shkapenyuk, Vladislav, and Torsten Suel, "Design and implementation of a high-performance distributed web crawler." IEEE 18th International Conference on, 2002. [ 4 ] Apache Hadoop, http://hadoop.apache.org/, 2014. [ 5 ] Dean, Jeffrey, and Ghemawat. Sanjay, "MapReduce: simplified data processing on large clusters." Communications of the ACM 51.1, pp.107-113, 2008. [ 6 ] Vavilapalli, Vinod Kumar, et al., "Apache hadoop yarn: Yet another resource negotiator." ACM Proceedings of the 4th annual Symposium on Cloud Computing, 2013. [ 7 ] Apache Nutch, http://nutch.apache.org/, 2014. [ 8 ] Apacje Lucene, http://lucene.apache.org/core/, 2014. [ 9 ] Apache Solr Reference Guide Covering Apache Solr 4.8, https://archive.apache.org/dist/lucene/solr/ref-guide/apache -solr-ref-guide-4.8.pdf, 2014. [10] Apache Zookeeper, http://zookeeper.apache.org/, 2014. [11] Hunt, Patrick, et al., "ZooKeeper: Wait-free Coordination for Internet-scale Systems." USENIX Annual Technical Conference, Vol.8, 2010. 송현옥 (hyun-ok Song) 1988 년 ~ 1992 년충남대학교불어불문학학사 1992 년 ~ 2001 년대전교차로신문사근무 1999 년 ~ 2001 년한남대학교사회복지학과석사 2001 년 ~ 2012 년다솜소프트대전지사장 2002 년 ~ 2015 년현재다솜정보대표 2015 년 ~ 현재배재대학교컴퓨터공학과박사과정 관심분야 : AR 및 VR, 3D 등 김아용 (A-Yong Kim) 2013 년배재대학교컴퓨터공학과 ( 공학사 ) 2015 년배재대학교컴퓨터공학과 ( 공학석사 ) 관심분야 : 오픈소스, 리눅스, 클라우드, 분산처리 정회경 (Hoe-Kyung Jung) 1985 년광운대학교컴퓨터공학과 ( 공학사 ) 1987 년광운대학교컴퓨터공학과 ( 공학석사 ) 1993 년광운대학교컴퓨터공학과 ( 공학박사 ) 1994 년 ~ 현재배재대학교컴퓨터공학과교수 관심분야 : 멀티미디어문서정보처리, XML, SVG, Web Services, Semantic Web, MPEG-21, Ubiquitous Computing, USN, IoT 557