[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

레이블이 Hadoop인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Hadoop인 게시물을 표시합니다. 모든 게시물 표시

2016년 4월 25일 월요일

[Book] Hadoop 완벽 가이드..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

Hadoop 완벽 가이드 - 6점
톰 화이트 지음,
심탁길.김우현 옮김
한빛미디어

요즘 같아서는 왠지 관심을 가지지 않될것 같은 빅데이터를 다루는 Hadoop에 대한 책입니다. 하둡에 관심을 가진 사람들은 알겠지만 하둡이라는 기술은 무척 방대합니다. 어느 기술이든지 처음 접할때는 대게 방대하다고 느껴지지만 하둡은 특히나 더 그런것 같습니다. 마치 JSP부터 서블릿, MVC등 차례차례 배워나가는 것이 아니라 자바도 잘 모르는데 스프링 + 하이버네이트 + 타일즈까지 묶인 풀스택을 접해서 어디서부터 공부해야 하는 건지 모르는 것과 비슷하게 느껴집니다. 이 책은 Hadoop Definitive Guide라는 이름답게 Hadoop의 기술군 대부분을 다루고 있습니다. 목차에 나오다 시피 하둡의 핵심인 맥리듀스부터, Hive, Pig, Hbase, HDFS, ZooKeeper, Sqoop 등입니다.(물론 하둡에는 이 외에도 많은 것들이 있습니다.) 그리고 당연하게도 맵리듀스에 가장 많은 지면을 할애하고 있습니다.

이 책은 하둡 0.20.0을 기준으로 작성되었습니다.(참고로 2011년 다시 나온 개정판입니다.) 하둡의 공식사이트의 릴리즈정보를 참고하면 다음과 같이 나와있습니다.

  • 1.0.X - 현재 안정버전, 1.0 릴리즈
  • 1.1.X - 현재 베타버전 1.1 릴리즈
  • 2.X.X - 현재 알파버전
  • 0.22.X - 보안이 포함되어 있지 않음
  • 0.20.203.X - 레거시 안정버전
  • 0.20.X - 레거시 안정버전
처음 이 버전정보를 보았을 때 기존에 웹쪽에서 주로 사용하던 프로젝트들의 버전릴리즈와는 다른 방식이라 무척이나 헷갈렸습니다. 이 내용대로라면 0.20.0은 레가시 버전이고 1.0.X가 안정버전이구나 싶었는데 트위터를 통해서 물어보니 아직 0.20 대를 많이 쓰기 때문에 0.20.X 버전으로 공부해도 무리가 없을 듯 합니다. 실제로 클라우데라의 CDH3도 하둡 0.20.2 버전을 사용하고 있습니다. 하둡의 버전 관계를 이해하는데는 다음 그림이 좀 도움이 됩니다.

하둡의 버전
출처 : Konstantin I. Boudnik & Cos가 만든 다이어그램을 Alex Popescu가 올린 글

얘기가 좀 샜는데 다시 책 얘기를 좀 하자면 책의 번역이 형편없습니다. 좀 심하게 말하기는 했지만 번역기를 돌린 것마냥 아주 못 읽을 수준까지는 아니지만 문장을 아주 난해하고 번역이 되다만 것처럼 되어서 이해하기가 어렵습니다. 책을 읽기는 있는데 무슨 말을 하는 건지 쉽사리 이해가 가지 않아서 한문장을 2-3번은 읽어야 그럭저럭 의미가 와닿습니다. 문장이 완전히 틀린건 아니지만 난해하다는 얘깁니다. 워낙 다양하고 방대한 기술을 설명하기 때문에 안그래도 내용이 어려운데 문장까지 난해하다 보니 기술이 어려운건지 제가 이해력이 딸리는 건지 판단하기가 어렵고 하둡은 더 먼 기술로 느껴져버립니다. ㅠㅠ (현재는 하둡에 관련된 책이 하나 더 나왔는데 그 책도 평이 그렇게 좋은 것 같지는 않습니다.)

하둡의 근간인 맵리듀스부터 설명해서 HDFS와 함께 맵 리듀스가 어떻게 구성되고 어떻게 사용되는지를 설명해 주고 있고 그 뒤에는 맵리듀스위에 올라간다고 할 수 있는 피그, 하이브 등을 설명하고 있습니다. 개인적으론 부록부터 읽고 시작하는게 그나마 좋을 듯 합니다. 일단 하둡을 제대로 배우려면(저는 그렇게 못했지만) 전부는 아니더라도 책의 예제를 따라하면서 공부하는 것이 제일 좋을 듯 한데 그럴려면 부록에 있는 설치가이드와 예제에서 사용할 기상데이터에 대한 내용을 먼저 숙지하는게 좋아보입니다.(딱히 책의 흐름과는 연관이 없기 때문에 먼저 보는 것이 나을 것입니다.) 하둡같은 빅데이터기술을 처음해봐서 그런지는 모르겠지만 설치하는 광정에서 많이 해맸고 설치한 후 실제로 예제를 사용해 보는데서 더 많이 해맸습니다. 같이 공부하신 분들도 비슷하게 말씀하시는 걸로 봐서는 설치가이드는 약간 부족하다고 생각합니다. 설치에 관련헤서는 좀 삽질하면서 해볼 생각을 해봐야 할 것 같습니다.

책의 만족도가 아주 높은 정도까지는 아니지만 하둡같은 방대한 기술을 책 한번읽고 이해한다는 것은 무리이기 때문에 어느정도 수긍은 하고 있습니다. 스터디를 통해서 책을 읽었는데 진행속도가 무척 빨랐기 때문에 예제를 따라하기는 커녕 책읽기도 급급하면서 읽었습니다. 약간의 부실한 부분은 예제를 실험해 보면서 하면 꽤 많은 부분에서 도움이 되리라고 생각합니다.(최소한 구성은 괜찮아 보입니다.) 어쨌든 저로써는 각 기술이 뭘하는 건지 정도는 파악했습니다. 실제 공부는 사용해 보면서 할 때가 진짜가 될 것이긴 한데 하둡에 대해서 전혀 감을 갖고 있지 않다면 이 책이 나쁜 선택까진 아니라고 생각합니다.(선택권이 거의 없다시피하긴 하지만 영어가 된다면 원서가 더 나을수도 있겠습니다.)



2016년 3월 10일 목요일

[EP]자바 커뮤니티 공동 세미나 "자바 개발자를 위한 ‘共感(공감)’을 찾아서" #1..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

Adobe에서 진행한 "자바 개발자를 위한 ‘共感(공감)’을 찾아서"세미나에 갔다가 왔습니다. 세미나 주제들이 괜찮아 보여서 바로 신청하기는 했었지만 약간은 의외의 컨셉의 세미나였습니다. 이번행사는 OKJSP, JBoss User Group, KSUG가 공동주최하고 Adobe에서 후원하였는데 처음 세미나 공지를 보았을때 "왜? 어도비가 자바세미나를?"이라는 생각이 들더군요. BlazeDS때문인가 싶기도 했는데 딱히 그런 언급은 없었습니다. 머 의도야 어쨌든 이렇게 좋은 세미나를 무료로 진행해 주니 감사한 마음에 갔다가 왔습니다.

공감을 찾아서 세미나 홍보페이지

자바 개발자를 위한 공감을 찾아서


자바와 Flex의 만남 - Adobe Community Champion 엄진영(블로그)
부재로는 "스프링과 연동한 BlazeDS 활용"이라는 이름이 붙어 있었습니다만 실제로는 Blaze에 대한 언급은 거의 없었습니다. 개발의 기술발전의 히스토리들(주로는 엄진영님이 접하게 된 시점위주로)을 설명하면서 RIA가 플래시가 왜 필요한가에 내용이었습니다.

Flex는 이제 Flash라는 이름으로 통일이 되고 있습니다. 그동안은 Flex라는 개념의 혼동때문에 Flash와 Flex의구분을 고객들에게 설명하기 위해서 어려움들이 있었지만 이젠 모두 Flash로 통일되고 있고 Flex builder도 Flash Builder 4로 변경이 되었습니다. 서버사이드는 보통 자바가 많이 쓰이고 기술과 트랜드는 계속 바뀌고 있습니다. 과거 프로그램을 자주 변경해야 되는 상황이 생기면서 그동안 사용하던 C언어보다는 스크립트 언어를 선호하게 되었지만 곧 만들어야 하는 프로그램의 크기가 커지면서 스크립트 언어로써의 한계에 부딪히게 됩니다. 스펙을 정해놓고 사용하게 되는 엔터프라이즈로 넘어가게 되었는데 실제 개발은 서버보다는 UI를 많드는데 훨씬 많은 시간이 소비되게 되었습니다.

자바와 플래시의 만남 세션발표하시는 엄진영님 기술 흐름도

그래서 프로세스의 혁신이 필요해지게 됩니다. 프로세스의 혁신이란 것은 야근등으로 개발자의 능력치를 최대한 끌어냈으나(엄진영님은 "이미 쪽쪽 빨아서"라고 표현을ㅎㅎ) 더이상 끌어낼수 없을때 필요해 지는 것입니다. 초보개발자도(싸니까) 만들수 없을까? 하는 고민을 하면서 프레임워크로 초점이 넘어가고 그후에는 퍼시스턴스에 관심을 가지게 됩니다. 2007년부터 UI에 대한 고민을 시작하게 되고 그전에는 브라우저전쟁에서 승리한 IE에 맞춰서 개발하다가 브라우져마다 약간씩 다르기 때문에 다른 브라우저에 맞추는 추가적인 작업을 하게 됩니다. 국내시장에서는 깔끔하게 IE외의 브라우져는 포기해버렸습니다.

이 상황에 Ajax도 등장하여 서버에 직접 접근하게 되고 엔터프라이즈급 UI를 Javascript만으로 하는 것이 개발자에게 너무 힘든 일이 되어버립니다. 그래서 Needs에 따라 쓰는 방식은 그대로 유지하면서 Flash를 위한 Flex가 등장하게 됩니다.

RIA의 장점은 플랫폼이 독립적이고(자바도 목적은 그랬지만 현실적으로 그러지 못했습니다.) 기존 기술과 유사하여 배우기가 용이하면서 대규모 시스템 개발이 가능하다는 것이었습니다. 그리고 가장 중요한 것은 UI부분이 서버와 투명하게 분리가 가능하게 된 것이었습니다. Ajax덕분에 클라이언트가 서버에 직접 접속하게 되면서 서버에 종속적으로 묶여버렸습니다. 플래시앱(.swf)는 서버와 HTTP 원격객체호출을 할수 있고 HTTP 서비스, 메시징 서비스, 웹서비스를 할수 있으며 Ajax에 비해 binary 데이터를 주고 받을 수 있다는 큰 장점도 있습니다.

히스토리야 어느정도 알고 있는 내용이니 공감은 하고 있었지만 Flash Platform에 대한 당위성에 대한 공감은 좀 약하지 않았나 싶습니다. 여러 연구들과 프레임워크들의 등장으로 인하여 UI가 서버에 종속된다는 것은 공감이 잘 안되기도 했고 (기술적이든 사용상의 문제이든 간에)실제 플래시를 사용하는데에 대한 trade off가 존재하는 것은 사실이라고 생각하고 있습니다. Flash가 등장한 이래 가장 큰 위기감을 최근 느끼고 있다고 생각하는데 Flash가 통짜로 올라가면 화려하긴 진짜 화려하긴 하지만 무겁기도 하고 그렇게 화려할 필요가 있는가에 대한 고민도 하게 되죠.

Apache Hadoop으로 구현하는 상품추천서비스 - JBoss User Group 김병곤
추천검색은 은근히 여기저기 많이 쓰이고 있습니다. 메론, Amazon, 네이버 인물 검색등 알게 모르게 추천검색이 다 적용되어 있습니다. 실제로 추천검색을 적용해 보면 30%정도가 구입을 하는데 이는 엄청난 적중률입니다. 추천시스템을 구현하는 방법에는 사용자로부터 얻은 기호정보를 토대로 예측하는 협업필터링(Collaborating Filtering), 상품간의 연관성을 분석하여 다른 사용자에게 구매하지 않은 상품을 추천하는 연관규칙(Association Rule), 비슷한 대상들끼리 묶은 군집을 이용하는 클러스터링(Clustering)등이 있습니다. 

웹2.0의 많은 서비스들이 추천시스템을 사용하고 있고 우리가 하는 모든 행동은 로그가 남고 있고 우리는 엄청난 데이터 속에서 살고 있으며 이 엄청난 데이터는 Hadoop이 아니면 다룰 수가 없습니다. 데이터가 너무 엄청나기 때문에 데이터베이스로 다룰려면 데이터를 데이터베이스롤 올리는데 시간이 다 가버릴 정도입니다.

패러다임의 전환이 필요합니다.

로직이 데이터에 접근하지 말고 데이터가 있는 곳으로 로직을 옮겨라!
데이터가 쪼개지고 로직도 각 데이터로 분산된 다음에 합칩니다.

왜 데이터베이스가 적합하지 않은가 하면 대용량 파일은 Import하는 것도 어렵고 리소스소비가 심하여 온라인 작업과 배치작업을 분리해야 하는 문제가 있습니다. 그리고 비싼 장비와 SW비용이 필요합니다. 대신 대용량에 Apache Hadoop가 적합한 이유는 로그정보가 수십Tera에 이를 정도로 매우 크고 I/O집중적이면서 CPU도 많이 사용하는 작업입니다. 또한 장비를 증가시킬수록 성능은 향상되고 Intel Core머신은 가격이 아주 쌉니다. 인텔컴퓨터 하나 사서 추가하면 용량이 늘어나기 때문에 개발자는 관리가 힘들어지더라도 운영자입장에서는 당연히 하둡을 선택하게 됩니다. 이런 것을 보면서 이제 데이터베이스는 사라지는 것이 아니냐고도 하는데 Hadoop은 데이터베이스를 대체할 기술이 아니라 공존할 기술입니다.

Hadoop은 "파일을 올리는 것"과 "처리하는 것" 딱 이 2가지가 전부입니다. 즉 File System(HDFS:Hadoop Distributed File System)과 프로그래밍모델(MapReduce)입니다. HDFS는 파일을 64M단위로 나누어 장비에 저장하는 방식이고 사용자에게는 하나의 파일로 보이지만 실제로는 나누어져 있습니다. MapReduce는 HDFS의 파일을 이용하여 처리하는 방법을 제공합니다.

나누어서 처리할 때의 가장 큰 문제는 합치는 것이고 대표적인 것이 소팅입니다. 맵과 리듀스의 개념을 이해하는 것이 코딩보다도 더 중요합니다. Hadoop은 무조건 Key - Value의 데이터 구조 이 한가지 밖에 없습니다. 이 Key - Value로 된 데이터들이 합쳐지면서 같은 Key의 Value는 배열로 묶어줍니다.

연관 규칙(Association Rule)의 예로 간단한 마켓의 상품으로 추천시스템을 적용하는 예를 보여주셨습니다. 연관규칙에는 트랜잭션, 지지도, 신뢰도, 향상도가 있습니다.(이건 좀 통계적인 개념) 몇개의 상품별로 각 값들을 계산하고 이를 Hadoop으로 어떻게 Map과 Reduce가 진행되는 지에 대한 보여주었습니다. 추천시스템의 상품조합은 많으질수록 성능이 급격히 저하되므로 보통 2개의 조합만 사용하며 이 예에서는 맵과 리듀스를 단 2번만 실행하였는데 Hadoop에 대한 개념은 다 들어가 있으면서 한눈에 이해될 정도의 간단한 예제였습니다.

그럼 Hadoop는 언제 써야 하는가 하면 통계에 아주 좋습니다. 또한 데이터에서 필요없는 부분을 제거하는 ETL(Extract, Transform, Load)이나 데이터 마이닝, 로그파일분석, 인공지능에 적용하기가 좋습니다. 하지만 Hadoop은 무식한 배치성 작업이 아주 강하고 인터렉티브하지 않기 때문에 최종적으로는 RDBMS가 필요합니다. Hadoop으로 추출된 최종데이터만 RDBMS로 올리면 됩니다. 이전에는 이것을 디비가 했지만 이제는 개발자가 해야하는 시대가 되었습니다.

처음에 시작할때 초등학생도 이해할 수 있는 수준이라고 말씀하셨는데 사실 Hadoop은 개념이 약간 어려워서 그닥 믿지 않았는데 진짜 여태들은 설명중 최고로 명쾌한 설명이었습니다. 어떻게 하둡을 이렇게 간결하게 설명할 수 있을까 하는 생각이 들 정도였습니다. Hadoop에 대해서 급 관심이 갔으며 막상하면 여러가지 어려움이 있겠지만 오히려 너무 쉽게 설명을 해주셔서 해보면 금방 하겠는데 하는 착각(?)이 들 정도였습니다. ㅎㅎㅎ Hadoop을 어느정도 이해한 것만으로도 아주 큰 수확중의 하나라고 할 수 있겠네요.

2016년 3월 4일 금요일

[Book] 구글을 지탱하는 기술..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

구글을 지탱하는 기술 - 8점
니시다 케이스케 지음, 김성훈 옮김, 전병국 감수/멘토르

어쨌든 현재 최고의 IT기업이라고 할 수 있는 구글이 사용하는 기술에 대해서 설명된 책입니다. 웹에 몸담고 있는 사람이라면 웹개발자라면 한 번쯤은 생각해 보았을 만한 구글은 어떻게 이 많은 데이터를 이럴게 빨리 검색해 줄까, 어떻게 크롤링하는 걸까? 이 많은 데이터를 어떻게 유지할까? 하는데에 대한 궁금증을 풀어줄 만한 책입니다.

책의 초기에는 IT지식이 없는 사람도 읽을 수 있게 쉽게 쓰여져 있다고 하지만 상당히 쉽게 작성된 것은 사실이지만 사실 개발의 기반 지식이 없다면 많은 부분은 이해하기 어려울 것 같습니다. 아무래도 데이터베이스, 분산시스템등의 대한 얘기이므로 전문적인 얘기등은 상당히 들어가 있지만 깊은 지식이 없어서 "아~ 이렇구나"하는 정도로는 이해할 정도로 쉽게 쓰여져 있기는 합니다. 물론 기술을 파헤쳐서 지식을 얻는 책은 아니기 때문에 소설책 읽는 기분으로 간단히 읽는 정도로는 괜찮다고 생각합니다.

구글의 기술에 대해서 많은 부분이 공개되지는 않았지만 그동안 내놓은 많은 논문을 토대로 저자가 여러가지 연구를 통해서 구글의 기술에 대해서 정리해 놓았습니다.

구글의 대표적인 것은 아무래도 검색이기 때문에 검색에 대해서 간단히 설명한 뒤에 구글이 가진 분산기술들인 분산파일시스템 GFS, 분산스토리지 시스템 Bigtable, 분산잠금시스템 Chubby에 대해서 설명하고 이름도 유명한 MapReduce와 분산처리용 프로그래밍 언어 Sawzall에 대해서 설명하고 있습니다.

책의 마지막에서는 구글의 운용비용에 대해서 설명해주고 있습니다. 대충 구글만 보아도 이거 운영하는데 장난아니겠다는 생각이 들기는 하지만 구체적으로 구글이 짓고 있는 데이터센터를 중심으로 하드웨어는 어떻게 구성하고 얼마나 드는지 진기료는 얼마나드는지 데이터센터를 유지하기 위해서 어떤 노력을 하고 있고 비용은 얼마나 드는지에 대해서 설명하고 있습니다.

평소 구글에 대해서 궁금증을 가지고 있었다면 한번 읽어볼 만한 책인듯 합니다. 특히 Hadoop도 보면서 내용파악하기가 쉽지 않았었는데 구글의 분산기술을 오픈소스로 구현하는 프로젝트가 Hadoop이기 때문에 Hadoop에 관심이 있다면 참고용으로 읽어볼만한 책입니다.