<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Dive Into A Data Deluge &#187; FOSS</title>
	<atom:link href="http://diveintodata.org/category/foss/feed/" rel="self" type="application/rss+xml" />
	<link>http://diveintodata.org</link>
	<description>Discussion about Newly Emerging Issues on Database</description>
	<lastBuildDate>Thu, 29 Mar 2012 09:43:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='diveintodata.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Dive Into A Data Deluge &#187; FOSS</title>
		<link>http://diveintodata.org</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://diveintodata.org/osd.xml" title="Dive Into A Data Deluge" />
	<atom:link rel='hub' href='http://diveintodata.org/?pushpress=hub'/>
		<item>
		<title>Amazon EC2에서 whirr을 이용한 Hadoop 클러스터 구동 방법</title>
		<link>http://diveintodata.org/2011/03/19/whirr-usage-for-hadoop-cluster-in-amazon-ec2/</link>
		<comments>http://diveintodata.org/2011/03/19/whirr-usage-for-hadoop-cluster-in-amazon-ec2/#comments</comments>
		<pubDate>Sat, 19 Mar 2011 03:06:58 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[amazon ec2]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[whirr]]></category>

		<guid isPermaLink="false">http://diveintodata.org/?p=1060</guid>
		<description><![CDATA[최근 연구내용 검증을 위해 Amazon EC2에서 Hadoop 클러스터를 구축하여 실험을 수행 하는 중입니다. 그런데 Hadoop 클러스터를 EC2에 구축하는데 있어 Amazon EC2 환경에 대한 이해 부족과 자료의 부족으로 직접 부딪혀서 해결해야 하는 부분들이 꽤 있었습니다. 저는 이 포스팅을 통해 제가 시도했던 방법을 소개하고 제 경험을 공유하고자 합니다. 우선 이 글을 읽는 분들은 Amazon EC2 계정이 있고 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=1060&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>최근 연구내용 검증을 위해 Amazon EC2에서 Hadoop 클러스터를 구축하여 실험을 수행 하는 중입니다. 그런데 Hadoop 클러스터를 EC2에 구축하는데 있어 Amazon EC2 환경에 대한 이해 부족과 자료의 부족으로 직접 부딪혀서 해결해야 하는 부분들이 꽤 있었습니다. 저는 이 포스팅을 통해 제가 시도했던 방법을 소개하고 제 경험을 공유하고자 합니다.</p>
<p>우선 이 글을 읽는 분들은 Amazon EC2 계정이 있고 AMI, Instance, EC2 Key Pair에 대해 알고 계시다고 전제하겠습니다.</p>
<p><span style="font-size:20px;font-weight:bold;">Amazon EC2에서 Hadoop 클러스터 구동</span></p>
<p>현 시점에서 Amazon EC2 환경에 Hadoop 클러스터를 구동 방법은 선택의 폭이 그리 넓지 않습니다.</p>
<ol>
<li>Hadoop이 이미 설치된 이미지를 사용하고 수동 설정하는 방법</li>
<li>EBS 기반 AMI에 하둡 설치 및 복사 그리고 수동 설정</li>
<li>whirr을 사용하는 방법</li>
<li>whirr의 hadoop-ec2를 사용하는 방법</li>
</ol>
<p>이 포스팅에서는 3번인 whirr을 이용한 구축방법을 설명합니다. 그런데  이 방법은 정말 간단하지만 한 가지 제약을 가지고 있습니다. 이 방법은 기본적으로 instance store 기반의 AMI만 활용 할 수 있습니다. 따라서 Hadoop 클러스터의 HDFS는 instance store에 기반을 두게 되며 클러스터 종료 시 HDFS의 모든 데이터가 제거됩니다 (Amazon EC2의 모든 인스턴스는 영속적인 데이터 저장을 위해 EBS나 S3와 같은 별도의 저장 서비스를 사용해야 합니다.)</p>
<p>저의 경우 처음에 1,2번 방법을 모두 시도했었습니다. 그러나  다음과 같은 문제점이 있었습니다.</p>
<ul>
<li>최신 Hadoop 배포본(0.20 이상)이 설치된 AMI의 부재</li>
<li>수십 여개의 인스턴스의 시동(launch)의 자동화</li>
<li>매번 새로 할당 받는 IP 주소와 이에 따른 Hadoop 설정과 설정 배포의 어려움</li>
</ul>
<p>조사해보니 인스턴스를 시동을 자동화하고 시동된 인스턴스의 IP 목록을 얻어 설정 배포까지 원활히 하기 위해서는 <a href="http://aws.amazon.com/sdkforjava/">Amazon AWS API</a>를 이용하거나 <a href="http://code.google.com/p/boto/">boto (Python interface to Amazon Web Services)</a>, <a href="http://code.google.com/p/jclouds/downloads/list">jcloud (multi-cloud library)</a> 와 같은 third-party 라이브러리를 이용해 개발을 해야합니다. 그러나 이는 많은 시간을 요구합니다. EBS 기반 AMI에 Hadoop을 직접 설치하는 사용하는 방법 역시 비슷한 이유로 포기했습니다.</p>
<p>위에 4번 방법인 hadoop-ec2는 원래 Hadoop의 contrib 에 속했던 프로그램으로 현재는 whirr에서 진행되고 있지만 지속적으로 유지보수가 되지 않는 것으로 보여 시도하지 않았습니다. whirr의 Change Log를 봐도 4번에 대한 내용은 찾기 어려웠습니다.</p>
<p>현재로써는 whirr이 가장 편리한 방법이라 여겨 집니다.</p>
<p><span style="font-size:20px;font-weight:bold;">whirr?</span></p>
<p>whirr는 Apache Incubator에 속한 프로젝트로 Amazon EC2와 같은 상용 클라우드 환경에서 원하는 서비스에 대한 설치, 설정, 실행을 자동으로 수행하는 라이브러리입니다. 현재 제공하는 서비스로는 <a href="http://hadoop.apache.org/">Apache Hadoop</a>, <a href="http://cassandra.apache.org/">Cassandra</a>,  <a href="http://www.cloudera.com/hadoop/">Cloudera&#8217;s Distribution for Hadoop (CDH)</a>, <a href="http://hadoop.apache.org/zookeeper/">Zookeeper</a>가 있으며 조만간 릴리즈 될 0.4-incubating 버전에 <a href="http://hbase.apache.org/">Hbase</a>가 추가될 예정이라고 합니다.</p>
<h2>동작의 개요</h2>
<p>whirr의 사용방법을 설명하기에 앞서 전체적인 동작에 대해 개략적으로 설명을 드리겠습니다.</p>
<p>사용자가 &#8216;<em>cluster-lunch&#8217;</em> 커맨드를 주면 whirr은 instance store 기반의 AMI를 이용해 다수의 인스턴스를 가동하고 모든 인스턴스들에 JDK 및 Hadoop의 설치와 설정을 일괄적으로 수행합니다. 이 과정이 끝나면 EC2 내부에서 Hadoop 클러스터가 동작하고 있게 됩니다.</p>
<p>그리고 사용자가 로컬 머쉰에 설치한 Hadoop 프로그램 통해 EC2에서 구동되는 Hadoop 클러스터를 제어하게 됩니다. 그런데 EC2 내부의 인스턴스들은 기본적으로 private IP만을 할당 받아 외부에서 접근할 수가 없고 기본적으로 방화벽 설정이 까다롭게 되어 있기 때문에 추가적인 설정 없이 Hadoop RPC나 웹 UI를 통한 접근이 불가능 합니다. 따라서 whirr이 제공하는 proxy 프로그램을 실행하고 난 뒤에 로컬 머쉰에 설치된 Hadoop 프로그램을 이용하여 EC2 내부의 클러스터를 제어하게 됩니다.</p>
<h2>Hadoop 클러스터 구동</h2>
<h3>계정 생성</h3>
<p>whirr을 통해 생성하는 Hadoop 클러스터는 linux에서 <em>hadoop</em>이라는 username의해 시동됩니다. Hadoop은 클러스터를 구동한 계정과 같은 계정으로 접근할 때 superuser 권한을 가집니다. 따라서 로컬에 hadoop이라는 계정을 생성하여 아래 작업을 수행해야 Amazon EC2 내부에서 동작하는 Hadoop 클러스터에 대한 superuser권한을 행사할 수 있습니다. 하지만 단순히 MapReduce 프로그램만 실행 시킨다면 아무 계정에서 작업해도 문제 없습니다.</p>
<h3>로컬 머쉰에 Hadoop과 whirr의 설치 그리고 Hadoop Version 문제</h3>
<p>Hadoop과 whirr은 <a href="http://archive.apache.org/dist/hadoop/core/">http://archive.apache.org/dist/</a> 에서 다운 받아 로컬 머쉰에 설치합니다.  그런데 현 시점에서는 &#8216;어떤 Hadoop 버전을 설치해야 하는가&#8217;가 문제가됩니다. Hadoop은 현재 한참 빠르게 개발되고 있으며 다른 버전간 내부 프로토콜이 호환되지 않습니다.</p>
<p>따라서 whirr이 자동으로 설치해주는 Hadoop 클러스터와 로컬 머쉰의 Hadoop은 같은 버전으로 맞춰야 합니다. 버전을 바꾸는 것은 <a href="http://incubator.apache.org/whirr/faq.html">whirr FAQ</a>에 아래와 같이 설명되어 있는 것 처럼 직접 install, configuration 스크립트를 수정해야 합니다.</p>
<blockquote>
<h3>How do I specify the service version and other service properties?</h3>
<p>Currently the only way to do this is to modify the scripts to install a particular version of the service, or to change the service properties from the defaults.</p>
<p>See &#8220;How to modify the instance installation and configuration scripts&#8221; above for details on how to do this.</p>
<p>from <a href="http://incubator.apache.org/whirr/faq.html">http://incubator.apache.org/whirr/faq.html</a></p></blockquote>
<p>whirr은 Apache Hadoop 배포본외에도 Cloudera의 Hadoop 배포본을 설치할 수 있습니다. 이는 아래 &#8216;whirr 설정 파일&#8217;에서 whirr.hadoop-install-runurl과 whirr.hadoop-configure-runurl에 대한 내용을 참고하시면 됩니다.</p>
<h3>whirr 설정 파일</h3>
<p>whirr을 이용한 클러스터의 구동은 클러스터에 대한 설정 파일을 만드는 것으로 시작합니다. 이 포스팅에서는 아래 cluster.properties 파일의 내용을 설명하고 이후 내용도 이 설정을 기준으로 설명하도록 하겠습니다.</p>
<p>(아래 내용은 최신인 0.3-incubating 버전에 대한 내용입니다. 0.4-incubating 버전이 릴리즈 되면 설정 방법이 변경될 예정입니다. 릴리즈 되고 나면 포스팅을 업데이트 하도록 하겠습니다.)</p>
<p><pre class="brush: plain;">
whirr.cluster-name=mycluster
whirr.instance-templates=1 jt+nn,16 dn+tt
whirr.provider=ec2
whirr.identity=ACCESS_KEY
whirr.credential=SECRET_KEY
whirr.private-key-file=${sys:user.home}/.ssh/id_rsa
whirr.public-key-file=${sys:user.home}/.ssh/id_rsa.pub
whirr.location-id=us-east-1d
whirr.hardware-id=m1.small
whirr.service-name=hadoop
#whirr.hadoop-install-runurl=cloudera/cdh/install
#whirr.hadoop-configure-runurl=cloudera/cdh/post-configure
</pre></p>
<p>각 항목에 대한 설명은 다음과 같습니다.</p>
<ul>
<li>whirr.cluster-name : 구동할 클러스터를 식별하는 이름입니다. 클러스터를 구동하면 ${HOME}/.whirr/<em>&lt;cluster-name&gt;</em> 가  디렉토리가 생성되며 이 디렉토리에는 Hadoop 클러스터에 접근하는데 필요한 파일들이 저장됩니다.</li>
<li>whirr.instance-templates: 구동할 클러스터의 구성을 설정합니다. jt는 jobtracker, nn은 name node, dn은 data node, tt는 task tracker를 의미합니다. 이 설정을 통해 유연한 설정이 가능합니다. data node와 task tracker를 더 늘리고 싶을 때는 dn+tt 앞에 쓰여진 숫자를 변경해 주시면 됩니다.</li>
<li>whirr.provider: 클러스터 서비스 제공자를 설정합니다. 현재는 Amazon EC2와 Rackspace Cloud Servers 두 가지를 지원합니다.</li>
<li>whirr.identity: AWS의 access key를 입력하시면 됩니다.</li>
<li>whirr.credential: AWS의 secret key를 입력 합니다.</li>
<li>whirr.private-key-file: 이 설정과 아래 설정은 ec2 인스턴스를 생성할 때 사용할 key로 사용됩니다. 위 예제처럼 하기 위해서는 아래와 같이 ssh키를 생성해야 한다. 또는 기존에 다른 인스턴스를 위해 만들어 놓은 EC2 Key pair의 경로를 설정해도 됩니다.</li>
</ul>
<p><pre class="brush: plain;">
$ ssh-keygen -t rsa -P ''
</pre></p>
<ul>
<li>whirr.location-id: 원하는 availability zone을 설정한다. 설정하지 않으면 whirr을 실행하는 인스턴스와 같은 zone이 설정된다.</li>
<li>whirr.hardware-id: 원하는 인스턴스 유형을 설정한다. Amazon EC2가 제공하는 인스턴스 유형은 <a href="http://aws.amazon.com/ec2/instance-types/">Amzon EC2 Instance Types</a> 페이지에서 확인할 수 있으며 각 유형에 써 있는 API name을 이 설정에 적용하면 됩니다.</li>
<li>whirr.service-name: 구축할 서비스를 설정합니다. 이 글은 Hadoop을 위한 것이므로 hadoop으로 남겨 둡니다.</li>
<li>whirr.hadoop-install-runurl, whirr.hadoop-configure-runurl: Hadoop의 경우 apache 버전과 CDH 버전이 있습니다. 위 예제에서 주석(#)을 제거해 주면 CDH버전을 구동하게 됩니다.</li>
</ul>
<p>설정에 대한 추가적인 설명은 <a href="http://incubator.apache.org/whirr/configuration-guide.html">Whirr Configuration Guide</a> 문서를 참고하시면 됩니다.</p>
<h3>Hadoop 클러스터 시동</h3>
<p>클러스터의 시동은 다음과 같은 커맨드로 수행합니다. 클러스터를 시동하면 내부적으로 Amazon의 EC2 API를 통해 인스턴스를 생성해 필수 패키지(JDK)등을 설치하고 Hadoop 배포 버전을 다운로드 받아 설정을 하는 과정이 수행됩니다. 따라서 클러스터가 구동되는데 짧게는 수 분에서 길게는 10분 정도 소요됩니다. 클러스터 구동이 완료되면 다시 쉘 프롬프트가 뜨게 됩니다.</p>
<p><pre class="brush: plain;">
$ whirr/bin/whirr launch-cluster --config cluster.properties
Bootstrapping cluster
Configuring template
Starting 16 node(s) with roles [tt, dn]
Configuring template
Starting 1 node(s) with roles [jt, nn]
Nodes started: [[id=us-east-1/i-a45eb7cb, providerId=i-a45eb7cb, ...]]
.....
Nodes started: [[id=us-east-1/i-7a51b815, providerId=i-7a51b815, ...]]
Authorizing firewall
Running configuration script
Configuration script run completed
Running configuration script
Configuration script run completed
Completed configuration of mycluster
Web UI available at http://ec2-72-44-43-29.compute-1.amazonaws.com
Wrote Hadoop site file /home/-----/.whirr/mycluster/hadoop-site.xml
Wrote Hadoop proxy script /home/-----/.whirr/mycluster/hadoop-proxy.sh
Wrote instances file /home/-----/.whirr/mycluster/instances
Started cluster of 17 instances
Cluster{instances=[Instance{roles=[tt, dn], ...}]}
$
</pre></p>
<h3>프록시 열기</h3>
<p>whirr을 통해 구동한 Hadoop 클러스터에 접근하기 위해서는 로컬에 설치했던 Hadoop을 설정을 해야 합니다. 설정은 간단히 whirr이 클러스터 시동 후 생성해 주는 파일을 사용하면 됩니다. &#8216;<em>whirr launch-cluster&#8217;</em> 가 완료되고 나면 ${HOME}/.whirr/<em>&lt;cluster-name&gt;/</em>hadoop-site.xml 파일이 생성됩니다. 이 파일을 로컬에 설치한 Hadoop의 ${HADOOP_HOME}/conf에 간단하게 복사하거나 다음과 같이 환경변수를 설정하여 Hadoop의 설정 디렉토리를 override 하면 됩니다.</p>
<p><pre class="brush: plain;">
export HADOOP_CONF_DIR=~/.whirr/&lt;cluster-name&gt;
</pre></p>
<p>하지만 EC2 내부의 클러스터들은 private IP만을 가지기 때문에 바로 Hadoop 클러스터에 접근할 수는 없습니다. ${HOME}/.whirr/<em>&lt;cluster-name&gt;/hadoop-proxy.sh</em>를 실행 해야 비로소 EC2에 구동된 Hadoop 클러스터에 접근할 수 있습니다.</p>
<p><pre class="brush: plain;">
$ chmod +x ~/.whirr/mycluster/hadoop-proxy
$ ~/.whirr/mycluster/hadoop-proxy

Running proxy to Hadoop cluster at ec2-72-44-43-29.compute-1.
amazonaws.com. Use Ctrl-c to quit.
</pre></p>
<p><pre class="brush: plain;">
$ bin/hadoop dfs -ls
...
</pre></p>
<p><em>hadoop-proxy.sh</em>를 실행하면 EC2에서 동작하는 Hadoop 클러스터 웹 UI도 접근할 수 있습니다. 그러나 이를 위해서는 간단한 웹 브라우져 설정이 요구됩니다.</p>
<ul>
<li>크롬은 Preferences -&gt; Under the Hood 탭 -&gt; Network -&gt; Change Proxy Settings에서 설정하면 됩니다. Socks 설정의 주소는 localhost, 포트는 6666으로 해주시면 됩니다.</li>
<li>파폭은 기본적으로 SOCKS를 사용하더라도 로컬 머신에 설정된 DNS를 사용하게 되어 있는데 먼저 이 설정을 변경해 주셔야 합니다. 이를 위해서는 주소창에 about:config를 입력해 세부 설정으로 들어가 network.proxy.socks_remote_dns 설정을 true로 변경해주셔야 합니다. 그리고 Preferences -&gt; Advanced -&gt; Network 탭 -&gt; Connection 섹션의 Settings에서 SOCKS Host를 주소는 localhost, 포트는 6666으로 설정해주시면 됩니다.</li>
</ul>
<p>위와 같이 수정하고 hadoop-proxy.sh를 실행 했을 때 출력되는 URL에 접속하시면 됩니다.</p>
<h3>클러스터 종료</h3>
<p>Hadoop을 이용한 모든 작업이 끝나면 종료는 다음 커맨드를 통해 수행합니다. <span style="text-decoration:underline;">위에서 언급한 바와 같이 whirr은 아직까지 instance store 기반 클러스터 구축 밖에 지원하지 못하므로 HDFS의 모든 데이터가 제거되는 사실을 염두하셔야 합니다.</span></p>
<p><pre class="brush: plain;">
$ whirr/bin/whirr destroy-cluster --config=cluster.properties
</pre></p>
<h2>결론</h2>
<p>whirr을 통한 Hadoop 클러스터 구동 방법을 설명했습니다. whirr은 아직 사소한 버그와 설정의 한계가 있지만 직접 클러스터 를 구축해야 하는 사용자의 노력을 상당히 줄여줍니다. 필요에 따라 MapReduce 프로그램을 대규모 클러스터에 동작시켜야 하는 사용자들에게는 특히 유용하다고 생각합니다.</p>
<h2>참고문서</h2>
<ul>
<li><a href="http://incubator.apache.org/whirr/quick-start-guide.html" target="_blank">Getting Started with Whirr</a></li>
<li><a title="Map-Reduce With Ruby Using Hadoop" href="http://www.philwhln.com/map-reduce-with-ruby-using-hadoop" target="_blank">Map-Reduce With Ruby Using Hadoop</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/1060/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=1060&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2011/03/19/whirr-usage-for-hadoop-cluster-in-amazon-ec2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>An Example of Hadoop MapReduce Counter</title>
		<link>http://diveintodata.org/2011/03/15/an-example-of-hadoop-mapreduce-counter/</link>
		<comments>http://diveintodata.org/2011/03/15/an-example-of-hadoop-mapreduce-counter/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 15:56:42 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[counter]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[mapreduce]]></category>

		<guid isPermaLink="false">http://diveintodata.org/?p=1014</guid>
		<description><![CDATA[MapReduce Counter Hadoop MapReduce Counter provides a way to measure the progress or the number of operations that occur within MapReduce programs. Basically, MapReduce framework provides a number of built-in counters to measure basic I/O operations, such as FILE_BYTES_READ/WRITTEN and Map/Combine/Reduce input/output records. These counters are very useful especially when you evaluate some MapReduce programs. Besides, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=1014&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Apache Hadoop" src="http://hadoop.apache.org/images/hadoop-logo.jpg" alt="" width="200" height="50" /></p>
<h2>MapReduce Counter</h2>
<p>Hadoop MapReduce Counter provides a way to measure the progress or the number of operations that occur within MapReduce programs. Basically, MapReduce framework provides a number of built-in counters to measure basic I/O operations, such as FILE_BYTES_READ/WRITTEN and Map/Combine/Reduce input/output records. These counters are very useful especially when you evaluate some MapReduce programs. Besides, the MapReduce Counter allows users to employ your own counters. Since MapReduce Counters are automatically aggregated over Map and Reduce phases, it is one of the easiest way to investigate internal behaviors of MapReduce programs. In this post, I&#8217;m going to introduce how to use your own MapReduce Counter. The example sources described in this post are based on Hadoop 0.21 API.</p>
<h2>Incrementing your counter</h2>
<p>For your own MapReduce counter, you first define a <em>enum</em> type as follow:</p>
<p><pre class="brush: java;">
public static enum MATCH_COUNTER {
  INCOMING_GRAPHS,
  PRUNING_BY_NCV,
  PRUNING_BY_COUNT,
  PRUNING_BY_ISO,
  ISOMORPHIC
};
</pre></p>
<p>And then, when you want to increment your own counter, you should call the <em>increment </em>method as follows:</p>
<p><pre class="brush: java;">
context.getCounter(MATCH_COUNTER.INCOMING_GRAPHS).increment(1);
</pre></p>
<p>You can access<em> context</em> instance within <em>setup</em>, <em>cleanup</em>, <em>map</em>, and <em>reduce</em> method in Mapper or Reducer class. You can get a desired counter via calling <em>context.getCounter</em> method with some enum value.</p>
<h2>Finding your counter</h2>
<p>You can get some <em>Counters</em> from a finished job as follows:</p>
<p><pre class="brush: java;">
Configuration conf = new Configuration();
Cluster cluster = new Cluster(conf);
Job job = Job.getInstance(cluster,conf);
result = job.waitForCompletion(true);
...
Counters counters = job.getCounters();
</pre></p>
<p>The instance of <em>Counters</em> class contains all of the counters obtained from a job. So, when you want to get your own counter, you should call <em>findCounter</em> method with a <em>enum</em> type as follows:</p>
<p><pre class="brush: java;">
Counter c1 = counters.findCounter(MATCH_COUNTER.INCOMING_GRAPHS);
System.out.println(c1.getDisplayName()+&quot;:&quot;+c1.getValue());
</pre></p>
<p>The below example shows how to get built-in counter groups that Hadoop provides basically.</p>
<p><pre class="brush: java;">
for (CounterGroup group : counters) {
  System.out.println(&quot;* Counter Group: &quot; + group.getDisplayName() + &quot; (&quot; + group.getName() + &quot;)&quot;);
  System.out.println(&quot;  number of counters in this group: &quot; + group.size());
  for (Counter counter : group) {
    System.out.println(&quot;  - &quot; + counter.getDisplayName() + &quot;: &quot; + counter.getName() + &quot;: &quot;+counter.getValue());
  }
}
</pre> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/1014/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/1014/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/1014/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/1014/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/1014/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/1014/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/1014/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/1014/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/1014/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/1014/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/1014/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/1014/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/1014/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/1014/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=1014&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2011/03/15/an-example-of-hadoop-mapreduce-counter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>

		<media:content url="http://hadoop.apache.org/images/hadoop-logo.jpg" medium="image">
			<media:title type="html">Apache Hadoop</media:title>
		</media:content>
	</item>
		<item>
		<title>VoltDB and its related links</title>
		<link>http://diveintodata.org/2010/06/01/voltdb-and-its-related-links/</link>
		<comments>http://diveintodata.org/2010/06/01/voltdb-and-its-related-links/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 05:26:55 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[ACID]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[OLTP]]></category>
		<category><![CDATA[shared-nothing architecture]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[VoltDB]]></category>

		<guid isPermaLink="false">http://diveintodata.org/?p=842</guid>
		<description><![CDATA[There has been lots of buzz about VoltDB (academic name is H-Store [5]) since a week ago. VoltDB is lead by M. Stonebraker, and it is an open source OLTP DBMS. There are some interesting points: Running on shared-nothing clusters of commodity hardware In-memory database SQL support ACID Linear Scalability Released as an Open Source software [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=842&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://diveintodata.files.wordpress.com/2010/06/gi_voltdb-gif.jpg"><img class="alignright size-full wp-image-954" title="VoltDB" src="http://diveintodata.files.wordpress.com/2010/06/gi_voltdb-gif.jpg?w=590" alt=""   /></a>There has been lots of buzz about <em><span style="font-style:normal;">VoltDB (academic name is H-Store <a href="#ref-5">[5]</a>)</span><span style="font-style:normal;"> since a week ago. VoltDB is lead by <em>M. Stonebraker</em>, and it is an open source OLTP DBMS. There are some interesting points:</span></em></p>
<ul>
<li>Running on shared-nothing clusters of commodity hardware</li>
<li>In-memory database</li>
<li>SQL support</li>
<li>ACID</li>
<li>Linear Scalability</li>
<li>Released as an Open Source software</li>
</ul>
<p>Actually, there have already been some OLTP databases running on shared-nothing clusters. However, they cannot take advantage from the scalability of shared-nothing architecture due to their implementation&#8217;s natures, such as complex distributed locking and commit protocols <a href="#ref-1">[1]</a>. In addition, according to <a href="#ref-3">[3]</a>, traditional RDBMSs have four overhead components, which are logging, locking, latching, and buffer management. However, M. Stonebraker claims that VoltDB eliminated these legacy overheads.</p>
<p>Among many features, especially I have interest in its linear scalability with ACID and performance. It is meaningful in that today&#8217;s web applications have another alternative to NoSQL data stores. Although VoltDB is under heavy development, the above features and the next benchmark result show its promising.</p>
<ul>
<li><a href="https://voltdb.com/blog/key-value-benchmarking">Key-Value Benchmark</a> (VoltDB versus Cassandra)</li>
</ul>
<p><a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> is a remarkable key-value store and an open source project developed by apache committers. Now, it is well known as the most performant one in existing NoSQL stores. According to this benchmark result, however, in all cases VoltDB dominates Cassandra although the fairness of experiments is controversial.</p>
<ul>
<li><a href="http://community.voltdb.com/roadmap" target="_blank">VoltDB Roadmap</a></li>
</ul>
<p>It&#8217;s future plan is also expected. I wonder how much attention VoltDB will be getting from communities and industrials.</p>
<h4>See Also:</h4>
<ol>
<li><a name="ref-1"></a><a id="ref-1" href="http://cs-www.cs.yale.edu/homes/dna/papers/abadi-cloud-ieee09.pdf" target="_blank">Data Management in the Cloud: Limitations and Opportunities</a></li>
<li><a href="http://pgsnake.blogspot.com/2010/05/comparing-voltdb-to-postgres.html" target="_blank">Comparing VoltDB vs Postgresql</a></li>
<li><a name="ref-3"></a><a href="http://cs-www.cs.yale.edu/homes/dna/papers/oltpperf-sigmod08.pdf" target="_blank">OLTP through the looking glass, and what we found there, ACM SIGMOD 2008</a></li>
<li><a href="http://voltdb.com/product">http://voltdb.com/product</a></li>
<li><a name="ref-5"></a><a href="http://db.cs.yale.edu/hstore/" target="_blank">H-Store: A Next Generation OLTP DBMS</a></li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/842/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/842/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/842/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=842&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2010/06/01/voltdb-and-its-related-links/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2010/06/gi_voltdb-gif.jpg" medium="image">
			<media:title type="html">VoltDB</media:title>
		</media:content>
	</item>
		<item>
		<title>HDFS Scalability 향상을 위한 시도들 (1)</title>
		<link>http://diveintodata.org/2010/05/24/hdfs-scalability-%ed%96%a5%ec%83%81%ec%9d%98-%ec%8b%9c%eb%8f%84%eb%93%a4-1/</link>
		<comments>http://diveintodata.org/2010/05/24/hdfs-scalability-%ed%96%a5%ec%83%81%ec%9d%98-%ec%8b%9c%eb%8f%84%eb%93%a4-1/#comments</comments>
		<pubDate>Mon, 24 May 2010 05:21:51 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[distributed file systems]]></category>
		<category><![CDATA[gfs]]></category>
		<category><![CDATA[google file system]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[hdfs]]></category>
		<category><![CDATA[improvement]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[scale-out]]></category>
		<category><![CDATA[scale-up]]></category>

		<guid isPermaLink="false">http://diveintodata.org/?p=761</guid>
		<description><![CDATA[얼마전 Yahoo!의 HDFS 팀에서 Multiple nodes를 사용하여 HDFS namenode의 Horizontal Scalability를 향상 시키는 방법을 제안 했었습니다 (HDFS-1052). 그런데 그 뒤로는 Dhruba Borthakur라는 Hadoop 커미터가 Vertical Scalability 개선 방법을 제안했습니다(The Curse of Singletons! The Vertical Scalability of Hadoop NameNode, HDFS-1093, HADOOP-6713). Borthakur에 대해 LinkedIn 에서 찾아보니 현재 Facebook에서 근무하는 Hadoop 엔지니어라고 나오는군요. 위 두 제안을 보면 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=761&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div>
<p><img class="alignright" title="Apache Hadoop" src="http://hadoop.apache.org/images/hadoop-logo.jpg" alt="" width="200" height="50" /><br />
얼마전 Yahoo!의 HDFS 팀에서 Multiple nodes를 사용하여 HDFS namenode의 Horizontal Scalability를 향상 시키는 방법을 제안 했었습니다 (<a href="https://issues.apache.org/jira/browse/HDFS-1052" target="_blank">HDFS-1052</a>). 그런데 그 뒤로는 <a href="http://www.linkedin.com/in/dhruba" target="_blank">Dhruba Borthakur</a>라는 Hadoop 커미터가 Vertical Scalability 개선 방법을 제안했습니다(<a href="http://hadoopblog.blogspot.com/2010/04/curse-of-singletons-vertical.html" target="_blank">The Curse of Singletons! The Vertical Scalability of Hadoop NameNode</a>, <a href="https://issues.apache.org/jira/browse/HDFS-1093" target="_blank">HDFS-1093</a>, <a href="https://issues.apache.org/jira/browse/HADOOP-6713" target="_blank">HADOOP-6713</a>). Borthakur에 대해 LinkedIn 에서 찾아보니 현재 Facebook에서 근무하는 Hadoop 엔지니어라고 나오는군요.</p>
<p>위 두 제안을 보면 Vertical Scalability과 Horizontal Scalability라는 용어가 나옵니다. Vertical Scalability는 시스템의 사양을 향상 시켰을 때 얻는 확장성을 의미합니다. 주로 CPU, Memory, Hard disk 등의 향상을 의미합니다. Hadoop과 같은 분산 시스템에서는 시스템 코어의 수가 늘어나는 것도 Vertical Scalability의 범주로 포함됩니다. 반면 Horizontal Scalability는 시스템의 개수를 늘렸을 때 얻는 확장성을 의미합니다. 예를 들면 노드의 수가 10대에서 20개로 늘어났을 때 얻는 확장성을 의미합니다. scale-up과 scale-out도 각각 같은 의미로 통용됩니다.</p>
<p>본 포스트에서는 위 두 가지 제안 중에서 Dhruba Borthaku가 제안한 vertical scalability 향상을 위한 제안을 소개합니다. 우선 Dhruba Borthakur라는 해커가 지적한 Hadoop Namenode (현재 Hadoop 0.21)의 병목현상은 다음과 같습니다.</p>
<ul>
<li><strong>Network</strong>: Facebook에서 자신이 사용하는 클러스터는 약 2000개의 노드로 구성되어 있으며 MapReduce 프로그램 동작 시 각 서버들은 9개의 mapper와 6개의 reducer가 동작하도록 설정되어 있다고 합니다. 이 구성의 클러스터에서 MapReduce를 동작하면 클라이언트들은 동시에 약 30k 의 request를 NameNode 에게 요청한다고 합니다. 그러나 singleton으로 구현된 Hadoop RPCServer의 Listener 스레드가 모든 메시지를 처리하므로 상당히 많은 지연이 발생하고 CPU core의 수가 증가해도 효과가 없었다고 합니다.</li>
<li><strong>CPU</strong>: FSNamesystem lock 메카니즘으로 인해 namenode는 실제로는 8개의 core를 가진 시스템이지만 보통 2개의 코어밖에 활용되지 않는다고 합니다. Borthakur에 의하면 FSNamesystem에서 사용하는 locking 메커니즘이 너무 단순 하고 <a href="https://issues.apache.org/jira/browse/HADOOP-1269" target="_blank">HADOOP-1269</a> 를 통해 문제를 개선 시켰음에도 여전히 개선의 여지가 있다고 합니다.</li>
<li><strong>Memory<span style="font-weight:normal;">:</span></strong> Hadoop의 NameNode는 논문 내용에 충실하게 모든 메타 데이터를 메모리에 유지합니다. 그런데 Borthakur가 사용하는 클러스터의 HDFS에는 6천만개의 파일과 8천만개의 블럭들이 유지하고 있는데 이 파일들의 메타데이터를 유지하기 위해 무려 58GB의 힙공간이 필요했다고 합니다.</li>
</ul>
<p>Borthakur가 이 문제를 해결하기 위해 제안했던 방법은 다음과 같습니다.</p>
<ul>
<li><strong>RPC Server</strong>: singleton으로 구현되었던 Listener 스레드에 Reader 스레프 풀을 붙였다고 합니다. 그래서 Listener 스레드는 connection 요청에 대한 accept 만 해주고 Reader 스레드 중 하나가 RPC를 직접 처리하도록 개선했다고 합니다. 결과적으로 다량의 RPC 요청에 대해 더 많은 CPU core들을 활용할 수 있게 되었다고 합니다(<a href="https://issues.apache.org/jira/browse/HADOOP-6713" target="_blank">HADOOP-6713</a>).</li>
<li><strong>FSNamesystem lock</strong>: Borthakur는 파일에 대한 어떤 operation이 있을 때 lock이 걸리는지 통계를 내고 그 결과로 파일과 디렉토리의 상태를 얻을 때와 읽기 위해 파일을 열 때 걸리는 lock이 전체 lock의 90%를 차지 한다는 것을 밝힙니다. 그리고 저 두 파일 operation들은 오직 read-only operation 이기 때문에 read-write lock 으로 바꾸어 성능을 향상 시켰다고 합니다(<a href="https://issues.apache.org/jira/browse/HDFS-1093" target="_blank">HADOOP-1093</a>). 이 부분은 MapReduce 논문(<a href="http://labs.google.com/papers/mapreduce.html" target="_blank">The Google File System</a>) 4.1절 Namespace Management and Locking 에도 설명이 잘 되어 있습니다. 이미 MapReduce에서는 namespace의 자료구조에서 상위 디렉토리에 해당하는 데이터에는 read lock을 걸고 작업 디렉토리 또는 작업 파일에는 read 또는 write lock을 걸어 가능한 동시에 다수의 operation들이 공유 데이터에 접근하게 하면서도 consistency를 유지하는 방법을 설명하고 있습니다. 아마도 file 에 대한 append가 Hadoop 0.20 버전에 추가 된 것 처럼 논문에 설명이 있음에도 구현이 되지 않은 부분이었나 봅니다. 자세한건 소스를 분석해 봐야 알 수 있을 것 같습니다.</li>
</ul>
<p>그러나 메모리에 대한 문제는 아직 해결하지 못했다고 합니다. 그래도 Borthakur에 의하면 위 두 가지 문제점을 해결한 것만으로 무려 8배나 scalability를 향상 시켰다고 합니다.</p>
<p>얼마전 부터 HDFS scalability 향상에 대한 시도들이 눈에 띄고 재미있어 보여 &#8216;여유 있을 때  블로그에 한번 정리해 봐야 겠다&#8217;라고 한달전에 맘 먹었는데 겨우 하나를 마쳤네요. 요즘 시간이 잘 안나서 이 포스트를 시작해서 완성하는데 약 3주나 걸렸습니다. 그 사이 <em>Usenix</em>의 매거진인 <em>;login:</em>에 Hadoop Namenode의 scalability에 대한 article인 <a href="http://developer.yahoo.net/blogs/hadoop/2010/05/scalability_of_the_hadoop_dist.html" target="_blank">HDFS Scalability: The Limits to Growth</a>가 실렸습니다. 또 야후 개발자 네트워크 블로그에서 article을 소개하는 글 (<a href="http://developer.yahoo.net/blogs/hadoop/2010/05/scalability_of_the_hadoop_dist.html" target="_blank">Scalability of the Hadoop Distributed File System</a>)이 실렸네요. 시간날 때 마다 마저 정리해 보겠습니다.</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/761/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=761&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2010/05/24/hdfs-scalability-%ed%96%a5%ec%83%81%ec%9d%98-%ec%8b%9c%eb%8f%84%eb%93%a4-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>

		<media:content url="http://hadoop.apache.org/images/hadoop-logo.jpg" medium="image">
			<media:title type="html">Apache Hadoop</media:title>
		</media:content>
	</item>
		<item>
		<title>Hadoop RPC를 이용한 서버/클라이언트 구현</title>
		<link>http://diveintodata.org/2010/04/20/hadoop-rpc%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ec%84%9c%eb%b2%84%ed%81%b4%eb%9d%bc%ec%9d%b4%ec%96%b8%ed%8a%b8-%ea%b5%ac%ed%98%84/</link>
		<comments>http://diveintodata.org/2010/04/20/hadoop-rpc%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ec%84%9c%eb%b2%84%ed%81%b4%eb%9d%bc%ec%9d%b4%ec%96%b8%ed%8a%b8-%ea%b5%ac%ed%98%84/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 12:04:24 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[rpc]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://diveintodata.org/?p=659</guid>
		<description><![CDATA[Hadoop은 이미 알려질대로 잘 알려진 분산 컴퓨팅 프레임워크입니다. 많은 사람들이 Hadoop 하면 MapReduce 프로그래밍을 주로 떠올리지만 자체적으로 제공하는 Hadoop RPC와 분산 파일 시스템인 HDFS를 가지고도 재미있는 것을 시도해 볼 수 있을 것 같습니다. 본 포스팅에서는 그 중에서 Hadoop RPC를 이용한 간단한 서버 클라이언트 프로그램의 구현방법을 소개합니다. Hadoop RPC Concept Hadoop RPC는 일반적으로 하나의 프로토콜 인터페이스(interface)와 하나의 Server [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=659&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Apache Hadoop" src="http://hadoop.apache.org/images/hadoop-logo.jpg" alt="Apache Hadoop" width="200" height="50" /></p>
<p><a href="http://hadoop.apache.org/" target="_blank">Hadoop</a>은 이미 알려질대로 잘 알려진 분산 컴퓨팅 프레임워크입니다. 많은 사람들이 Hadoop 하면 <a href="http://labs.google.com/papers/mapreduce.html" target="_blank">MapReduce</a> 프로그래밍을 주로 떠올리지만 자체적으로 제공하는 Hadoop RPC와 분산 파일 시스템인 HDFS를 가지고도 재미있는 것을 시도해 볼 수 있을 것 같습니다. 본 포스팅에서는 그 중에서 Hadoop RPC를 이용한 간단한 서버 클라이언트 프로그램의 구현방법을 소개합니다.</p>
<h3><strong>Hadoop RPC Concept</strong></h3>
<p>Hadoop RPC는 일반적으로 하나의 프로토콜 인터페이스(interface)와 하나의 Server 그리고 하나 이상의 Client(들)로 동작합니다. Hadoop RPC 서버의 인스턴스와 클라이언트 프록시의 인스턴스는 org.apache.hadoop.ipc.RPC 라는 클래스를 통해 얻을 수 있는데 내부적으로는 java reflection을 통해 구현되어 있습니다. 그리고 RPC method의 파라메터와 리턴 값은 오직 자바 primitive type들(예: int, long, String 등등)과 Writable 인터페이스를 구현한 구상클래스만 될 수 있습니다. 또한 Hadoop RPC는 자체적으로 서버와 클라이언트에 대한 기본적인 기능을 제공합니다. 따라서 복잡하게 스레드나 소켓 통신을 직접 구현할 필요가 없으며 개발자는 오로지 RPC 프로토콜 인터페이스와 RPC 메소드들에 대한 내용만 채워 넣으면 됩니다.</p>
<h3>Implementation of RPC Protocol</h3>
<p>RPC Protocol은 인터페이스로 정의되어야 하며 이 인터페이스는 org.apache.hadoop.ipc.VersionedProtocol을 상속하여야 합니다. VersionedProtocol은 자체적으로 getProtocolVersion() 메소드를 가지고 있는데 이 메소드는 프로토콜의 버전이 다양할 경우 서버-클라이언트가 다른 버전의 프로토콜로 통신하는 것을 방지하는 역할을 합니다.</p>
<p>RPC 프로토콜은 다음 예제와 같이 간단히 만들 수 있습니다. 아래 예제는 String 값을 반환하는 heartBeat()라는 하나의 RPC 메소드를 가진 RPC 프로토콜 인터페이스입니다.</p>
<p><pre class="brush: java;">
import org.apache.hadoop.ipc.VersionedProtocol;

public interface RPCProtocol extends VersionedProtocol {
  public long versionID=0;
  public String heartBeat() throws IOException;
}
</pre></p>
<h3>Implementation of RPC Server</h3>
<p>위에서 설명한 RPC 프로토콜의 서버 역할을 할 구상 클래스를 구현합니다. 서버 클래스는 간단히 위에서 정의한 RPCProtocol 인터페이스를 implements 하면 됩니다 (아래 예제 참조).</p>
<p><pre class="brush: java;">
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Server;

public class TestServer implements RPCProtocol {

  @Override
  public String heartBeat() throws IOException {
    return &amp;quot;Hello&amp;quot;;
  }

  @Override
  public long getProtocolVersion(String arg0, long arg1) throws IOException {
    return 0;
  }

  /**
   * @param args
   * @throws IOException
   * @throws InterruptedException
   */
  public static void main(String[] args) throws IOException, InterruptedException {
    TestServer s = new TestServer();
    Configuration conf = new Configuration();
    Server server = RPC.getServer(s, &amp;quot;localhost&amp;quot;, 10000, conf);
    server.start();
    server.join();
  }
}
</pre></p>
<p>RPCProtocol 인터페이스에서 정의했던 String heartBeat() 메소드 역시 구현되어 있습니다. 반환 값으로 &#8220;Hello&#8221;가 호출한 RPC 클라이언트에게 전달 될 것입니다.</p>
<p>서버의 시동은 main 메소드에 구현되어 있습니다. 우선 프로토콜의 구상클래스(TestServer)의 인스턴스를 생성하고 RPC.getServer()에 인자로 전달합니다. 또한 getServer 메소드는 추가적으로 서버가 binding할 IP와 port 번호를 인자로 받으며 Server 클래스의 인스턴스를 반환합니다(내부적으로는 TestServer 클래스의 인스턴스에 대한 Listener 스레드를 생성하여 파라메터로 전달된 IP 및 port 번호와 바인딩 시킵니다. 그리고 RPC 콜이 있을 때마다 TestServer의 메소드를 콜하게 됩니다. 처리 결과는 Responder 스레드를 통해 반환하게 됩니다).</p>
<p>RPC.getServer 메소드의 원형은 다음과 같습니다.</p>
<table border="1" cellspacing="0" cellpadding="3" width="100%">
<tbody>
<tr bgcolor="white">
<td width="1%" align="right" valign="top"><code><span style="color:#000000;">static RPC.Server</span></code></td>
<td><code><strong><span style="color:#000000;">getServer</span></strong><span style="color:#000000;">(Object instance, String bindAddress, int port, Configuration conf)</span></code><span style="color:#000000;"><br />
</span></td>
</tr>
</tbody>
</table>
<h3>Implementation of RPC Client</h3>
<p>클라이언트는 RPC.waitForProxy 메소드를 통해서 간단히 얻을 수 있습니다. 그리고 클라이언트는 반환값으로 받은 proxy 인스턴스를 이용해서 손쉽게 RPC method를 콜하고 서버로부터 응답을 받아 올 수 있습니다.</p>
<table border="1" cellspacing="0" cellpadding="3" width="100%">
<tbody>
<tr bgcolor="white">
<td width="1%" align="right" valign="top"><code><span style="color:#000000;">static VersionedProtocol</span></code></td>
<td><code><strong><span style="color:#000000;">getProxy</span></strong><span style="color:#000000;">(Class&lt;?&gt; protocol, long clientVersion, InetSocketAddress addr, UserGroupInformation ticket,Configuration conf, SocketFactory factory)</span></code></td>
</tr>
</tbody>
</table>
<p><pre class="brush: plain;">
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;

public class TestClient {

  /**
   * @param args
   * @throws IOException
   * @throws InterruptedException
   */
  public static void main(String[] args) throws IOException, InterruptedException {
    Configuration conf = new Configuration();
    InetSocketAddress addr = new InetSocketAddress(&amp;quot;localhost&amp;quot;, 10000);
    RPCProtocol rpc = (RPCProtocol) RPC.waitForProxy(RPCProtocol.class,
        RPCProtocol.versionID, addr, conf);

    String msg = null;
    while(true) {
      Thread.sleep(1000);
      msg = rpc.heartBeat();
      System.out.println(msg);
    }
  }
}
</pre></p>
<p>위 예제는 프록시 인스턴스 변수인 rpc를 통해 손쉽게 rpc.heartBeat() 메소드를 실행하고 서버로 부터 결과를 얻는 내용을 설명합니다.</p>
<h3>Test</h3>
<p>서버를 먼저 실행하고 클라이언트를 실행하면 됩니다. 사실 순서를 바꿔 실행해도 크게 문제 되지 않습니다. Hadoop RPC의 클라이언트는 먼저 실행되었을 경우 RPC 서버에 접속이 될 때까지 1초 단위로 반복하여 접속 시도를 하게 됩니다.</p>
<p>정상적으로 수행되는 경우 다음과 같은 메시지를 확인할 수 있습니다.</p>
<pre>Hello
Hello
Hello
Hello
Hello
...</pre>
<h3>References</h3>
<ul>
<li><a href="http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/ipc/RPC.html">http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/ipc/RPC.html</a></li>
<li><a href="http://www.supermind.org/blog/520">http://www.supermind.org/blog/520</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/659/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/659/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/659/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/659/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/659/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/659/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/659/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/659/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/659/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/659/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/659/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/659/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/659/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/659/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=659&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2010/04/20/hadoop-rpc%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ec%84%9c%eb%b2%84%ed%81%b4%eb%9d%bc%ec%9d%b4%ec%96%b8%ed%8a%b8-%ea%b5%ac%ed%98%84/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>

		<media:content url="http://hadoop.apache.org/images/hadoop-logo.jpg" medium="image">
			<media:title type="html">Apache Hadoop</media:title>
		</media:content>
	</item>
		<item>
		<title>Postgresql로 한글 full text search 시도기</title>
		<link>http://diveintodata.org/2010/03/22/postgresql%eb%a1%9c-%ed%95%9c%ea%b8%80-full-text-search-%ec%8b%9c%eb%8f%84%ea%b8%b0/</link>
		<comments>http://diveintodata.org/2010/03/22/postgresql%eb%a1%9c-%ed%95%9c%ea%b8%80-full-text-search-%ec%8b%9c%eb%8f%84%ea%b8%b0/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 10:40:40 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[full text search]]></category>
		<category><![CDATA[hunspell]]></category>
		<category><![CDATA[한글]]></category>
		<category><![CDATA[korean]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://diveintodata.org/?p=618</guid>
		<description><![CDATA[최근 일이 있어 Postgresql을 이용한 full text search (FTS) 를 시도해보았다. Postgresql 자체가 역사가 긴 녀석이라 그런지 full text 검색 다양한 방법들을 제공했다. pgtrgm, tsearch2 와 같은 메소드를 제공하고 GIN (Generalized Inverted Index) 나 GiST (Generalized Search Tree) 와 같은 색인들을 제공한다. 일반적으로 100만건 이내에서는 만족할 성능을 보여준다고 말하여진다. 그런데 제목이 &#8216;시도기&#8217;로 그치는 것에는 이유가 있다. 설명을 위해 우선 FTS 대해 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=618&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>최근 일이 있어 <a href="postgresql.org" target="_blank">Postgresql</a>을 이용한 full text search (FTS) 를 시도해보았다. Postgresql 자체가 역사가 긴 녀석이라 그런지 full text 검색 다양한 방법들을 제공했다. <a href="http://www.postgresql.org/docs/current/static/pgtrgm.html" target="_blank">pgtrgm</a>, <a href="http://www.postgresql.org/docs/current/static/tsearch2.html" target="_blank">tsearch2</a> 와 같은 메소드를 제공하고 <a href="http://www.postgresql.org/docs/current/static/gin.html" target="_blank">GIN (Generalized Inverted Index)</a> 나 <a href="http://www.postgresql.org/docs/current/static/gist.html" target="_blank">GiST (Generalized Search Tree)</a> 와 같은 색인들을 제공한다. 일반적으로 100만건 이내에서는 만족할 성능을 보여준다고 말하여진다.</p>
<p>그런데 제목이 &#8216;시도기&#8217;로 그치는 것에는 이유가 있다. 설명을 위해 우선 FTS 대해 조금 설명하면 FTS는 단순하게 SQL의 LIKE와 같이 서브 스트링을 포함하는 ROW를 찾아주는 문제가 아니다. 문서에서 조사와 같은 불용어를 제외하고 단어의 형태소 추출하며 단어간의 edit distance 까지 고려하여 철자가 유사한 단어에 대해서도 검색 결과로 내놓는다. 따라서 불용어와 형태소분석을 위해서는 사전이 필수적인 것이다. Postgresql <a href="http://www.postgresql.org/docs/8.4/static/textsearch-dictionaries.html">메뉴얼</a>을 보니 ispell, myspell, hunspell등의 포맷을 지원한다고 써 있었다.</p>
<p>사전을 찾아보니 데비안 메인테이너 cwryu님이 주도하시는 <a href="http://code.google.com/p/spellcheck-ko/" target="_blank">hunspell-ko</a> 프로젝트가 있었다. 안도&#8230; 그러나기쁨도 잠시 postgresql 이 사전을 제대로 읽어 들이지 못한다. IRC에서 cwryu님께 받은 조언으로 문제를 해결했지만 postgresql이 사전이 ASCII로 설정된 옵션(FLAG default) 외에는 받아들이지 않는다. 한글처리를 위해서는 default로는 불가했다.</p>
<p>현재 이 문제에 대해서는 postgresql bug 메일링에 <a href="http://archives.postgresql.org/pgsql-bugs/2010-03/msg00163.php" target="_blank">리포트</a> 해 놓은 상태이다. 결론은 postgresql로 제대로 된 full text search는 아직 꿈나라 인듯 싶다. tgtrgm 으로 짧은 문장에 대해서는 가능하기도 하지만 띄어쓰지 않은 5자 정도 이상의 문자들에 대해서는 false negative가 발생한다. false positive 는 성능 상 오버헤드가 있더라고 필터를 한번 더 주면 되지만 이것은 곤란했다.</p>
<p>시간이 좀 걸리더라도 짬을내어 이 문제에 대해 계속 리포트할 심산이다. 중간 중간 진행상황에 대해 포스팅 하도록 하겠다.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/618/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=618&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2010/03/22/postgresql%eb%a1%9c-%ed%95%9c%ea%b8%80-full-text-search-%ec%8b%9c%eb%8f%84%ea%b8%b0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>How to Create A Table in HBase for Beginners</title>
		<link>http://diveintodata.org/2009/11/27/how-to-make-a-table-in-hbase-for-beginners/</link>
		<comments>http://diveintodata.org/2009/11/27/how-to-make-a-table-in-hbase-for-beginners/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 02:33:36 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[create table]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[hbase]]></category>
		<category><![CDATA[table]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://diveintodata.org/?p=527</guid>
		<description><![CDATA[I have accumulated some knowledge and know-how about MapReduce, Hadoop, and HBase since I participated in some projects. From hence, I&#8217;ll post the know-how of HBase by period. Today, I&#8217;m going to introduce a way to make a hbase table in java. HBase provides two ways to allow a Hbase client to connect HBase master. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=527&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have accumulated some knowledge and know-how about MapReduce, Hadoop, and HBase since I participated in some projects. From hence, I&#8217;ll post the know-how of HBase by period. Today, I&#8217;m going to introduce a way to make a hbase table in java.</p>
<p>HBase provides two ways to allow a Hbase client to connect HBase master. One is to use a instance of <a href="http://hadoop.apache.org/hbase/docs/current/api/org/apache/hadoop/hbase/client/HBaseAdmin.html" target="_blank">HBaseAdmin</a> class. HBaseAdmin provides some methods for creating, modifying, and deleting tables and column families. Another way is to use an instance of HTable class. This class almost provides some methods to manipulate data like inserting, modifying, and deleting rows and cells.</p>
<p>Thus, in order to make a hbase table, we need to connect a HBase master by initializing a instance of HBaseAdmin like line 4. HBaseAdmin requires an instance of <a href="http://hadoop.apache.org/hbase/docs/current/api/org/apache/hadoop/hbase/HBaseConfiguration.html" target="_blank">HBaseConfiguration</a>. If necessary, you may set some configurations like line 2.</p>
<p>In order to describe HBase schema,  we make an instances of <a href="http://hadoop.apache.org/hbase/docs/current/api/org/apache/hadoop/hbase/HColumnDescriptor.html" target="_blank">HColumnDescriptor</a> for each column family. In addition to column family names, HColumnDescriptor enables you to set various parameters, such as maxVersions, compression type, timeToLive, and bloomFilter. Then, we can create a HBase table by invoking createTable like line 10.</p>
<p><pre class="brush: java;">
HBaseConfiguration conf = new HBaseConfiguration();
conf.set(&quot;hbase.master&quot;,&quot;localhost:60000&quot;);

HBaseAdmin hbase = new HBaseAdmin(conf);
HTableDescriptor desc = new HTableDescriptor(&quot;TEST&quot;);
HColumnDescriptor meta = new HColumnDescriptor(&quot;personal&quot;.getBytes());
HColumnDescriptor prefix = new HColumnDescriptor(&quot;account&quot;.getBytes());
desc.addFamily(meta);
desc.addFamily(prefix);
hbase.createTable(desc);
</pre></p>
<p>Finally, you can check your hbase table as the following commands.</p>
<p><pre class="brush: bash;">
c0d3h4ck@code:~/Development/hbase$ bin/hbase shell
HBase Shell; enter 'help&lt;RETURN&gt;' for list of supported commands.
Version: 0.20.1, r822817, Wed Oct  7 11:55:42 PDT 2009
hbase(main):001:0&gt; list
TEST

1 row(s) in 0.0940 seconds
</pre> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/527/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/527/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/527/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=527&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2009/11/27/how-to-make-a-table-in-hbase-for-beginners/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>BSP Library on Hadoop?</title>
		<link>http://diveintodata.org/2009/10/09/bsp-library-on-hadoop/</link>
		<comments>http://diveintodata.org/2009/10/09/bsp-library-on-hadoop/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 11:45:33 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[angrapa]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bsp]]></category>
		<category><![CDATA[bulk synchronization parallel]]></category>
		<category><![CDATA[distributed systems]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[hama]]></category>

		<guid isPermaLink="false">http://diveintodata.org/?p=443</guid>
		<description><![CDATA[Recently, I started to participate in the Hama project (a distributed scientific package on Hadoop for massive matrix and graph data), and I have taken the times to develop the bulk synchronization parallel (BSP) library on Hadoop (HAMA-195); I&#8217;m getting help from Edword Yoon, a founder of Hama project. The motivation of BSP lib is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=443&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently, I started to participate in the <a href="http://incubator.apache.org/hama/" target="_self">Hama project</a> (a distributed scientific package on Hadoop for massive matrix and graph data), and I have taken the times to develop the <a href="http://en.wikipedia.org/wiki/Bulk_synchronous_parallel" target="_self">bulk synchronization parallel</a> (BSP) library on Hadoop (<a href="https://issues.apache.org/jira/browse/HAMA-195" target="_self">HAMA-195</a>); I&#8217;m getting help from <a href="http://blog.udanax.org/" target="_self">Edword Yoon</a>, a founder of Hama project. The motivation of BSP lib is definitely clear.</p>
<p>The hadoop platforms are installed in cloud computing service providers and many companies as you can see in <a href="http://wiki.apache.org/hadoop/PoweredBy" target="_self">http://wiki.apache.org/hadoop/PoweredBy</a>. However, most of them may use only MapReduce programs. As you know although MapReduce is very scalability, but it provides only the simple programming model. Many programmers want to use more various programming model without changing the platform (i.e., <a href="http://hadoop.apache.org" target="_self">Hadoop</a>). This BSP lib will be the beginning for their desires. However, like MapReduce, BSP may also be not swiss army knife. When we find appropriate applications, BSP lib on Hadoop will be valued for its scalability and ability.</p>
<p>Sooner, I&#8217;ll post articles about the progress of BSP library and <a href="http://wiki.apache.org/hama/GraphPackage" target="_self">Angrapa</a> (the graph package on Hama).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/443/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/443/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/443/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/443/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/443/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/443/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/443/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=443&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2009/10/09/bsp-library-on-hadoop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>Hadoop: The Definitive Guide</title>
		<link>http://diveintodata.org/2009/06/09/hadoop-the-definitive-guide/</link>
		<comments>http://diveintodata.org/2009/06/09/hadoop-the-definitive-guide/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 01:33:57 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[hbase]]></category>
		<category><![CDATA[Pig]]></category>
		<category><![CDATA[zookeeper]]></category>

		<guid isPermaLink="false">http://diveintodata.org/2009/06/hadoop-the-definitive-guide/</guid>
		<description><![CDATA[O&#8217;REILLY 에서 책이 출시 된 것 같네요. http://oreilly.com/catalog/9780596521974/ 다음과 같은 내용을 다루고 있다고 합니다. Use the Hadoop Distributed File System (HDFS) for storing large datasets, and run distributed computations over those datasets using MapReduce Become familiar with Hadoop&#8217;s data and I/O building blocks for compression, data integrity, serialization, and persistence Discover common pitfalls and advanced [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=54&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>O&#8217;REILLY 에서 책이 출시 된 것 같네요. <a title="[http://oreilly.com/catalog/9780596521974/]로 이동합니다." target="_blank" href="http://oreilly.com/catalog/9780596521974/">http://oreilly.com/catalog/9780596521974/</a><br />
다음과 같은 내용을 다루고 있다고 합니다. </p>
<ul>
<li>Use the Hadoop Distributed File System (HDFS) for storing large<br />
datasets, and run distributed computations over those datasets using<br />
MapReduce</li>
<li>Become familiar with Hadoop&#8217;s data and I/O building blocks for compression, data integrity, serialization, and persistence</li>
<li>Discover common pitfalls and advanced features for writing real-world MapReduce programs</li>
<li>Design, build, and administer a dedicated Hadoop cluster, or run Hadoop in the cloud</li>
<li>Use Pig, a high-level query language for large-scale data processing</li>
<li>Take advantage of HBase, Hadoop&#8217;s database for structured and semi-structured data</li>
<li>Learn ZooKeeper, a toolkit of coordination primitives for building distributed systems</li>
</ul>
<p>
그동안 소스도 분석해 보고 Hadoop 기반 어플리케이션도 짜보고 했지만 좀 더 체계적으로 알고 싶은 마음에 질러볼까합니다.<br />
그런데 바빠서 볼 수 있을지 ~(~_~)~</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/54/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=54&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2009/06/09/hadoop-the-definitive-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>Eclipse Javadoc 의 Author 설정하기</title>
		<link>http://diveintodata.org/2009/04/03/eclipse-javadoc-%ec%9d%98-author-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0/</link>
		<comments>http://diveintodata.org/2009/04/03/eclipse-javadoc-%ec%9d%98-author-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 09:29:16 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[javadoc]]></category>

		<guid isPermaLink="false">http://diveintodata.org/2009/04/eclipse-javadoc-%ec%9d%98-author-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0/</guid>
		<description><![CDATA[Eclipse 에서는 기본적으로 Javadoc 을 제공합니다. 그래서 Class 또는 Interface 등을 생성한 경우 아래와 같이 자동적으로 저작자의 이름이 추가됩니다. /** * @author c0d3h4ck */ 아주 편리한 기능입니다. 그런데 이 이름은 login 이름으로 설정됩니다. 이 이름을 바꾸는 방법을 몰랐었는데..최근 알게됐습니다. eclipse/eclipse.ini 에서 다음과 같은 내용을 추가해 주면 됩니다. -vmargs -Xms128m -Xmx512m -Duser.name=Hyunsik Choi<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=53&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:monospace;">Eclipse 에서는 기본적으로 Javadoc 을 제공합니다. 그래서 Class 또는 Interface 등을 생성한 경우 아래와 같이 자동적으로 저작자의 이름이 추가됩니다.</p>
<p></span>
<pre><blockquote>/**<br />
 * @author c0d3h4ck<br />
 */</blockquote></pre>
<p>아주 편리한 기능입니다. 그런데 이 이름은 login 이름으로 설정됩니다. 이 이름을 바꾸는 방법을 몰랐었는데..최근 알게됐습니다. eclipse/eclipse.ini 에서 다음과 같은 내용을 추가해 주면 됩니다.</p>
<pre><blockquote>-vmargs<br />
-Xms128m<br />
-Xmx512m<br />
-Duser.name=Hyunsik Choi<br />
</blockquote><br />
</pre>
<p></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=53&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2009/04/03/eclipse-javadoc-%ec%9d%98-author-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>Adding new data nodes to Hadoop without rebooting</title>
		<link>http://diveintodata.org/2008/10/23/adding-new-data-nodes-to-hadoop-without-rebooting/</link>
		<comments>http://diveintodata.org/2008/10/23/adding-new-data-nodes-to-hadoop-without-rebooting/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 09:16:26 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[hadoop]]></category>

		<guid isPermaLink="false">http://diveintodata.org/?p=67</guid>
		<description><![CDATA[Usually, I have been wonder how to new data nodes (or recovered nodes) to Hadoop without rebooting. Recently, I found the solution from hadoop core-user mailing list. The way is very simple as follows: 1. configure conf/slaves and *.xml files on master machine 2. configure conf/master and *.xml files on slave machine 3. run ${HADOOP}/bin/hadoop [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=67&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Usually, I have been wonder how to new data nodes (or recovered nodes) to Hadoop without rebooting. Recently, I found the solution from hadoop core-user mailing list.</p>
<p>The way is very simple as follows:</p>
<blockquote><p>1. configure conf/slaves and *.xml files on master machine<br />
2. configure conf/master and *.xml files on slave machine<br />
3. run ${HADOOP}/bin/hadoop datanode</p></blockquote>
<p>If you have to add more than one data node to Hadoop, run the following command (instead of the third command above) on master machine.</p>
<blockquote><p>${HADOOP}/bin/start-all.sh</p></blockquote>
<p>Additionally, the way to add a region server to Hbase master without restarting all is similar to that of Hadoop.</p>
<blockquote><p>1. configure conf/regionservers and *.xml files on master machine<br />
2. configure conf/*.xml files on slave machine<br />
3. run ${HBASE}/bin/hbase regionserver start</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/67/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/67/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/67/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=67&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2008/10/23/adding-new-data-nodes-to-hadoop-without-rebooting/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>OpenOffice 3.0 for Intrepid (Ubuntu 8.10)</title>
		<link>http://diveintodata.org/2008/10/22/openoffice-3-0-for-intrepid-ubuntu-8-10/</link>
		<comments>http://diveintodata.org/2008/10/22/openoffice-3-0-for-intrepid-ubuntu-8-10/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 09:18:12 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[openoffice]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://diveintodata.org/?p=72</guid>
		<description><![CDATA[OpenOffice 3.0 is released! However, the official repository of Ubuntu 8.10 have not included openoffice 3.0 yet. However, there is a way to enjoy ooo3 in advance. Below link describes the openoffice 3.0 repository for Ubuntu 8.10 Intrepid. https://launchpad.net/~openoffice-pkgs/+archive Enjoy OpenOffice 3.0!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=72&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>OpenOffice 3.0 is released! However, the official repository of Ubuntu 8.10 have not included openoffice 3.0 yet. However, there is a way to enjoy ooo3 in advance. Below link describes the openoffice 3.0 repository for Ubuntu 8.10 Intrepid.</p>
<p><a href="https://launchpad.net/%7Eopenoffice-pkgs/+archive">https://launchpad.net/~openoffice-pkgs/+archive</a></p>
<p>Enjoy OpenOffice 3.0!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/72/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=72&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2008/10/22/openoffice-3-0-for-intrepid-ubuntu-8-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>Preparing new opensource mirror site for korean users</title>
		<link>http://diveintodata.org/2008/10/12/preparing-new-opensource-mirror-site-for-korean-users/</link>
		<comments>http://diveintodata.org/2008/10/12/preparing-new-opensource-mirror-site-for-korean-users/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 02:51:24 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[Korea University]]></category>
		<category><![CDATA[mirror]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://diveintodata.org/2008/10/preparing-new-opensource-mirror-site-for-korean-users/</guid>
		<description><![CDATA[Recently, I&#8217;m preparing the mirroring site for opensource archives. This mirror site aims to provide korean users with opensource archives fastly. Because the mirroring service consumes so much network bandwidth, we firstly had to be permitted by the office of information technorogy &#38; service. Last week, we finally got the permission from the office. Above [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=50&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently, I&#8217;m preparing the mirroring site for opensource archives. This mirror site aims to provide korean users with opensource archives fastly.</p>
<p>Because the mirroring service consumes so much network bandwidth, we firstly had to be permitted by the office of information technorogy &amp; service. Last week, we finally got the permission from the office.</p>
<p>Above all, we provide the mirror service for Ubuntu, Gentoo Linux, Eclipse, and Apache. Later, if we are asked to mirror other opensource archives, we will do that.</p>
<p>The URL of our mirror site plans to be <a title="[http://mirror.korea.ac.kr]로 이동합니다." target="_blank" href="http://mirror.korea.ac.kr">http://mirror.korea.ac.kr</a>. However, this address is not yet available. I will register this domain to office of infomation technolorogy &amp; service.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=50&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2008/10/12/preparing-new-opensource-mirror-site-for-korean-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>예술적인 유닉스 유틸리티 : netcat 과 tar 을 이용한 리모트 백업</title>
		<link>http://diveintodata.org/2008/01/04/%ec%98%88%ec%88%a0%ec%a0%81%ec%9d%b8-%ec%9c%a0%eb%8b%89%ec%8a%a4-%ec%9c%a0%ed%8b%b8%eb%a6%ac%ed%8b%b0-netcat-%ea%b3%bc-tar-%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-%eb%a6%ac%eb%aa%a8%ed%8a%b8-%eb%b0%b1/</link>
		<comments>http://diveintodata.org/2008/01/04/%ec%98%88%ec%88%a0%ec%a0%81%ec%9d%b8-%ec%9c%a0%eb%8b%89%ec%8a%a4-%ec%9c%a0%ed%8b%b8%eb%a6%ac%ed%8b%b0-netcat-%ea%b3%bc-tar-%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-%eb%a6%ac%eb%aa%a8%ed%8a%b8-%eb%b0%b1/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 15:53:54 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nc]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://diveintodata.org/2008/01/%ec%98%88%ec%88%a0%ec%a0%81%ec%9d%b8-%ec%9c%a0%eb%8b%89%ec%8a%a4-%ec%9c%a0%ed%8b%b8%eb%a6%ac%ed%8b%b0-netcat-%ea%b3%bc-tar-%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-%eb%a6%ac%eb%aa%a8%ed%8a%b8-%eb%b0%b1/</guid>
		<description><![CDATA[연구실에서 간간히 서버관리 역할도 하고 있는데, 최근 제가 관리하던 서버가 맛탱이가 가는 바람에 해당 서버의 데이터를 백업해야 할 일이 생겼습니다. 이번에 백업을 하면서 예전에 배워두었던 netcat 과 tar 의 조합으로 편리하게 했습니다. 이 조합은 다음과 같은 상황에서 빛을 냅니다. 백업할 파티션이 대부분 차 있어 로컬 파티션에 백업할 수 없을 때 퍼미션을 유지하며 리모트 머쉰으로 복사 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=46&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>연구실에서 간간히 서버관리 역할도 하고 있는데, 최근 제가 관리하던 서버가 맛탱이가 가는 바람에 해당 서버의 데이터를 백업해야 할 일이 생겼습니다. 이번에 백업을 하면서 예전에 배워두었던 netcat 과 tar 의 조합으로 편리하게 했습니다. 이 조합은 다음과 같은 상황에서 빛을 냅니다.
<ul>
<li>백업할 파티션이 대부분 차 있어 로컬 파티션에 백업할 수 없을 때</li>
<li>퍼미션을 유지하며 리모트 머쉰으로 복사 할 때</li>
</ul>
<p>tar 에서 f 를 빼고 다음과 같이 하면 stdout 으로 묶은 내용을 출력합니다. 이걸 netcat 로 리모트 머쉰에 쏘는 거지요. 그럼 netcat 를 listen mode 로 켜둔 리모트 머쉰에서는 이 데이터를 받아서 tar 에게 파이프(pipe)로 건내주어 파일로 저장되게 합니다. 그럼 명령어로 한번 볼까요?</p>
<p>우선 백업을 저장할 머쉰 아래 명령을 먼저 수행합니다.<br />
<blockquote>nc -l -p ${PORT} | tar xvf</p></blockquote>
<p>-l 은 listen mode 로 netcat 를 작동 한는 옵션이며 이렇게 해야 소켓을 열고 접속 요청을 대기 합니다. 다시 말해 서버 처럼 작동합니다. ${PORT} 에는 대기할 port 번호를 입력합니다.</p>
<p>그리고 백업할 데이터가 있는 머쉰, 즉 로컬머쉰에서 다음과 같이 합니다.<br />
<blockquote>tar cvf ${DIR} | nc -q 0 ${HOSTNAME} ${PORT}</p></blockquote>
<p>nc 에서 -q 명령은 EOF 를 만난후 몇초후에 nc 를 종료할 것인지를 나타냅니다. 위 명령에서는 -q 0 이므로 EOF 를<br />
만나면 바로 종료됩니다. -q 명령을 안쓰면 tar 명령이 끝나도 프롬프트가 나오지 않고 대기하게 되므로 언제 종료되었는지<br />
알기가 힘듭니다. ${HOSTNAME} 은 저 위에 백업을 저장할 머쉰의 주소 입니다.</p>
<p>tar 의 다양한 옵션들을 추가 하면 더욱 쓸만해 집니다. 저 같은 경우 홈 디렉토리를 그대로 백업하기 위해 다음과 같이 합니다.</p>
<p>백업 데이터를 저장하는 머쉰에서<br />
<blockquote>nc -l -p ${PORT} tar xjvpf</p></blockquote>
<p>백업할 데이터가 있는 머쉰에서<br />
<blockquote>tar cjvpf /home | nc -q 0 ${HOSTNAME} ${PORT}</p></blockquote>
<p>참고로 말씀드리면 j 는 bzip2 로 압축하는 옵션이며 p 는 퍼미션, 즉 uid와 gid 를 그대로 유지합니다. 아마 tar 옵션을 많이 아신다면 다양한 응용이 가능할 것 같습니다.</p>
<p><span style="color:rgb(255,0,0);text-decoration:underline;">오늘도 이 글을 쓰면서 느끼는 거지만 파이프와 함께하는 유닉스 유틸리티들은 말 그대로 예술인 것 같습니다.</span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/diveintodata.wordpress.com/46/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/diveintodata.wordpress.com/46/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/46/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=46&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2008/01/04/%ec%98%88%ec%88%a0%ec%a0%81%ec%9d%b8-%ec%9c%a0%eb%8b%89%ec%8a%a4-%ec%9c%a0%ed%8b%b8%eb%a6%ac%ed%8b%b0-netcat-%ea%b3%bc-tar-%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-%eb%a6%ac%eb%aa%a8%ed%8a%b8-%eb%b0%b1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>리눅스(Linux) 라이브시디(Live CD)로 하드웨어 정보 알아내기</title>
		<link>http://diveintodata.org/2008/01/01/%eb%a6%ac%eb%88%85%ec%8a%a4linux-%eb%9d%bc%ec%9d%b4%eb%b8%8c%ec%8b%9c%eb%94%94live-cd%eb%a1%9c-%ed%95%98%eb%93%9c%ec%9b%a8%ec%96%b4-%ec%a0%95%eb%b3%b4-%ec%95%8c%ec%95%84%eb%82%b4%ea%b8%b0/</link>
		<comments>http://diveintodata.org/2008/01/01/%eb%a6%ac%eb%88%85%ec%8a%a4linux-%eb%9d%bc%ec%9d%b4%eb%b8%8c%ec%8b%9c%eb%94%94live-cd%eb%a1%9c-%ed%95%98%eb%93%9c%ec%9b%a8%ec%96%b4-%ec%a0%95%eb%b3%b4-%ec%95%8c%ec%95%84%eb%82%b4%ea%b8%b0/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 11:04:48 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[hardware specification]]></category>
		<category><![CDATA[하드웨어정보]]></category>
		<category><![CDATA[컴퓨터 수리]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[livecd]]></category>

		<guid isPermaLink="false">http://diveintodata.org/2008/01/%eb%a6%ac%eb%88%85%ec%8a%a4linux-%eb%9d%bc%ec%9d%b4%eb%b8%8c%ec%8b%9c%eb%94%94live-cd%eb%a1%9c-%ed%95%98%eb%93%9c%ec%9b%a8%ec%96%b4-%ec%a0%95%eb%b3%b4-%ec%95%8c%ec%95%84%eb%82%b4%ea%b8%b0/</guid>
		<description><![CDATA[이 글은 일종의 팁입니다. 컴퓨터를 잘 다룬다고 주변으로 인식 받는 사람들은 대부분주변인들에게 컴퓨터를 고쳐달라는 부탁을 받아 봅니다. 처음이나 어린나이에는 우쭐해서 잘 고쳐주다가도 사실 점차 반복되는 부탁과 나이가 들어감에 따라 대부분 귀찮아 하지요. 귀찮아도 지인의 부탁에 고쳐줘야 하는 경우가 있습니다. 고치다 보면 해결책으로 종종 윈도우즈 재설치 처방을 내리게 됩니다. 그런데 문제는 이런 요구를 하는 사람들은 대부분 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=44&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration:underline;">이 글은 일종의 팁입니다.</span></p>
<p>컴퓨터를 잘 다룬다고 주변으로 인식 받는 사람들은 대부분주변인들에게 컴퓨터를 고쳐달라는 부탁을 받아 봅니다. 처음이나 어린나이에는 우쭐해서 잘 고쳐주다가도 사실 점차 반복되는 부탁과 나이가 들어감에 따라 대부분 귀찮아 하지요.</p>
<div class="wp-caption aligncenter" style="width: 410px"><img src="http://diveintodata.files.wordpress.com/2007/03/hk12.jpg?w=400&h=419" width="400" height="419" alt="사용자 삽입 이미지" /><p class="wp-caption-text">오죽하면 이런 티를 팔겠습니까?</p></div>
<p>귀찮아도 지인의 부탁에 고쳐줘야 하는 경우가 있습니다. 고치다 보면 해결책으로 종종 윈도우즈 재설치 처방을 내리게 됩니다. 그런데 문제는 이런 요구를 하는 사람들은 대부분 드라이버 시디를 가지고 있지 않거나 하드웨어 스펙을 잘 모릅니다(주로 랜카드와 비디오카드, 사운드).</p>
<p>그래서 저는 컴퓨터를 고치러 가는 경우 리눅스 라이브시디를 하나 가지고 갑니다(개인적으로 젠투 라이브를 선호 합니다). <span style="text-decoration:underline;">하드웨어 스펙을 잘 모르는 경우 라이브시디로 부팅하여 터미널에서 lspci 한방이면 연결된 하드웨어 칩셋의 정보를 모델명까지 잘 보여줍니다.</p>
<p></span>저의 경우 아래와 같이 나오는 군요.<br />
<blockquote>c0d3h4ck@c0d3h4ck:~$ lspci<br />00:00.0 Host bridge: Intel Corporation 82P965/G965 Memory Controller Hub (rev 02)<br />00:01.0 PCI bridge: Intel Corporation 82P965/G965 PCI Express Root Port (rev 02)<br />00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Contoller #4 (rev 02)<br />00:1a.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 (rev 02)<br />00:1a.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 (rev 02)<br />00:1c.0 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 (rev 02)<br />00:1c.4 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 5 (rev 02)<br />00:1c.5 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 6 (rev 02)<br />00:1d.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 (rev 02)<br />00:1d.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 (rev 02)<br />00:1d.2 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 (rev 02)<br />00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 02)<br />00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev f2)<br />00:1f.0 ISA bridge: Intel Corporation 82801HB/HR (ICH8/R) LPC Interface Controller (rev 02)<br />00:1f.2 SATA controller: Intel Corporation 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller (rev 02)<br />00:1f.3 SMBus: Intel Corporation 82801H (ICH8 Family) SMBus Controller (rev 02)<br />01:00.0 VGA compatible controller: nVidia Corporation G71 [GeForce 7900 GS] (rev a1)<br />02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 12)<br />03:00.0 SATA controller: JMicron Technologies, Inc. JMicron 20360/20363 AHCI Controller (rev 02)<br />03:00.1 IDE interface: JMicron Technologies, Inc. JMicron 20360/20363 AHCI Controller (rev 02)<br />05:02.0 Multimedia audio controller: Creative Labs SB Audigy LS<br />05:02.1 Input device controller: Creative Labs SB Audigy LS Game Port<br />05:03.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)<br />05:04.0 Ethernet controller: Marvell Technology Group Ltd. 88E8001 Gigabit Ethernet Controller (rev 14)</p></blockquote>
<p><span style="text-decoration:underline;"><br /></span>여러분도 애용해 보세요~<span style="text-decoration:underline;"><br /></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/diveintodata.wordpress.com/44/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/diveintodata.wordpress.com/44/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/44/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=44&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2008/01/01/%eb%a6%ac%eb%88%85%ec%8a%a4linux-%eb%9d%bc%ec%9d%b4%eb%b8%8c%ec%8b%9c%eb%94%94live-cd%eb%a1%9c-%ed%95%98%eb%93%9c%ec%9b%a8%ec%96%b4-%ec%a0%95%eb%b3%b4-%ec%95%8c%ec%95%84%eb%82%b4%ea%b8%b0/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2007/03/hk12.jpg" medium="image">
			<media:title type="html">사용자 삽입 이미지</media:title>
		</media:content>
	</item>
		<item>
		<title>Ubuntu 7.10 Gutsy 에서 VirtualBox 의 USB 인식 문제와 해결책</title>
		<link>http://diveintodata.org/2007/12/29/ubuntu-7-10-gutsy-%ec%97%90%ec%84%9c-virtualbox-%ec%9d%98-usb-%ec%9d%b8%ec%8b%9d-%eb%ac%b8%ec%a0%9c%ec%99%80-%ed%95%b4%ea%b2%b0%ec%b1%85/</link>
		<comments>http://diveintodata.org/2007/12/29/ubuntu-7-10-gutsy-%ec%97%90%ec%84%9c-virtualbox-%ec%9d%98-usb-%ec%9d%b8%ec%8b%9d-%eb%ac%b8%ec%a0%9c%ec%99%80-%ed%95%b4%ea%b2%b0%ec%b1%85/#comments</comments>
		<pubDate>Sat, 29 Dec 2007 05:37:10 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[gutsy]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[usb]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://diveintodata.org/2007/12/ubuntu-7-10-gutsy-%ec%97%90%ec%84%9c-virtualbox-%ec%9d%98-usb-%ec%9d%b8%ec%8b%9d-%eb%ac%b8%ec%a0%9c%ec%99%80-%ed%95%b4%ea%b2%b0%ec%b1%85/</guid>
		<description><![CDATA[VirtualBox 는 무료에다 빠르고 설치도 비교적 쉽다. 그런데 요놈은 USB 설정이 간단치가 않다. 내 주변인들도 나에게 평소 VirtualBox 의 USB 에 대한 질문을 수차례 하였기에 이번에는 글로 작성한다. 이 글의 목표는 Ubuntu 7.10 Gutsy 에서 VirtualBox가 USB 를 인식하게 만드는 것이다. 1. VirtualBox 버전 확인하기USB 사용을 위해서는 PUEL 버전을 설치해야 한다. 이를 위해 사용중인 VirtualBox [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=28&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>VirtualBox 는 무료에다 빠르고 설치도 비교적 쉽다. 그런데 요놈은 USB 설정이 간단치가 않다. 내 주변인들도 나에게 평소 VirtualBox 의 USB 에 대한 질문을 수차례 하였기에 이번에는 글로 작성한다. <span style="color:rgb(255,0,0);text-decoration:underline;">이 글의 목표는 Ubuntu 7.10 Gutsy 에서 VirtualBox가 USB 를 인식하게 만드는 것이다.</p>
<p></span><font size="3">1. VirtualBox 버전 확인하기<br /></font><span style="color:rgb(255,0,0);text-decoration:underline;">USB 사용을 위해서는 PUEL 버전을 설치해야 한다.</span> 이를 위해 사용중인 VirtualBox 의 버전을 확인한다. VirtualBox 는 PUEL 버전과 OSE(Open Source Edition) 버전으로 나누어진다. 두 버전의 근본적인 차이는 적용된 라이센스이지만 사용자 입장에서의 차이는 PUEL 버전은 간단한 사용자 등록(이름과 이메일 정도) 후 모든 기능을 제공하는데 반해 OSE 버전은 몇가지 제한을 가지고 있다는 것이다. 그 대표적인 예가 USB 불가 이다. 나머지 제한은 나도 잘 모르겠다.<br /><span style="text-decoration:underline;color:rgb(255,0,0);"></p>
<p></span><font size="3">2. usbfs 인식 되었는지 확인하기<br /></font>PUEL 버전을 설치했다고 바로 되면 좋겠지만 현재 우분투 버전은 그렇지가 않다. 우선 VirtualBox 에서 메뉴에서 Machine -&gt; Settings 를 열어 보자. 그럼 아래와 같은 그림을 볼 수 있다.</p>
<p><div class="wp-caption aligncenter" style="width: 610px"><img src="http://diveintodata.org/wp-content/uploads/1/gk1.png" width="600" height="520" alt="usbfs 마운트 전" /><p class="wp-caption-text">VirtualBox -&gt; Machine -&gt; Settings</p></div><br style="color:rgb(255,0,0);text-decoration:underline;"><span style="color:rgb(255,0,0);text-decoration:underline;">빨간색 박스안에 USB 가 있다면 섹션 3(마우스 휠 세번 내리세요)으로 넘어가고 없다면 다음과 같이 한다.</span><br />
<blockquote> sudo mount -t usbfs /sys/bus/usb /proc/bus/usb/</p></blockquote>
<p>그리고 나서 VirtualBox 를 껏다 다시 실행하면 다음과 같이 USB 메뉴가 생기는지 확인한다.<span style="font-weight:bold;">(만약 USB 메뉴가 안나오면 내가 아래 제시할 해결책이 소용없으므로 다른 방법을 찾아 보기 바란다.)</span><br /><div class="wp-caption aligncenter" style="width: 610px"><img src="http://diveintodata.files.wordpress.com/2007/12/hk8.png?w=600&h=522" width="600" height="522" alt="사용자 삽입 이미지" /><p class="wp-caption-text">usbfs 를 인식한 VirtualBox</p></div></p>
<p><font size="3">3.&nbsp; fstab 에 usbfs 추가하기(해결책)</font><br />(섹션 2를 거쳐 여기 까지 왔다면 문제는 아래 방법으로 해결될 확률이 아주 높다고 생각한다.) <br />USB 인식 문제를 해결하기 위해서는 /proc/bus/usb 안의 파일들을 VirtualBox 를 구동하는 사용자 권한으로 쓰기 가능하게 해야  한다. 내가 찾은 글들에서는 vboxuser group 으로 쓰기 권한을 주는 것으로 써 놓았는데 내 생각에는 plugdev 로 하는게 정석인 것 같아 plugdev 의 gid, 즉 46으로 하여 <span style="color:rgb(255,0,0);text-decoration:underline;">/etc/fstab 에 다음 라인을 추가했다.</span><br />
<blockquote>none &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; /proc/bus/usb &nbsp; usbfs &nbsp; devgid=46,devmode=664 0 0</p></blockquote>
<p>위와 같이 하고 <span style="color:rgb(255,0,0);text-decoration:underline;">재부팅을 하거나 재부팅이 귀찮다면 umount /proc/bus/usb &amp;&amp; mount /proc/bus/usb 을 하고 VirtualBox 를 재시작 해보자</span>. 그리고 USB 를 꽂으면 짜잔 하고 작은 풍선 도움말이 반겨줄 것이다!</p>
<p><font size="3">References<br /></font>
<ul>
<li><a href="http://opensea.egloos.com/3887420" target="_blank">http://opensea.egloos.com/3887420</a></li>
<li><a href="http://michael-prokop.at/blog/2007/07/11/virtualbox-usb/" target="_blank">http://michael-prokop.at/blog/2007/07/11/virtualbox-usb/</a></li>
</ul>
<p>덧붙임. <span style="text-decoration:underline;color:rgb(255,0,0);">혹시나 빼먹은 내용이 있을지 모르니 제가 쓴 글대로 해서 안되는 분들도 있으시면 리플 부탁 드립니다.</span><span style="text-decoration:underline;font-weight:bold;"><br /></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/diveintodata.wordpress.com/28/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/diveintodata.wordpress.com/28/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/28/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=28&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2007/12/29/ubuntu-7-10-gutsy-%ec%97%90%ec%84%9c-virtualbox-%ec%9d%98-usb-%ec%9d%b8%ec%8b%9d-%eb%ac%b8%ec%a0%9c%ec%99%80-%ed%95%b4%ea%b2%b0%ec%b1%85/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>

		<media:content url="http://diveintodata.org/wp-content/uploads/1/gk1.png" medium="image">
			<media:title type="html">usbfs 마운트 전</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2007/12/hk8.png" medium="image">
			<media:title type="html">사용자 삽입 이미지</media:title>
		</media:content>
	</item>
		<item>
		<title>Ubuntu 7.10 Gutsy 에서 VirtualBox 인터넷 뱅킹 하다가 멈추는 문제 와 해결책</title>
		<link>http://diveintodata.org/2007/12/28/ubuntu-7-10-gutsy-%ec%97%90%ec%84%9c-virtualbox-%ec%9d%b8%ed%84%b0%eb%84%b7-%eb%b1%85%ed%82%b9-%ed%95%98%eb%8b%a4%ea%b0%80-%eb%a9%88%ec%b6%94%eb%8a%94-%eb%ac%b8%ec%a0%9c-%ec%99%80-%ed%95%b4%ea%b2%b0/</link>
		<comments>http://diveintodata.org/2007/12/28/ubuntu-7-10-gutsy-%ec%97%90%ec%84%9c-virtualbox-%ec%9d%b8%ed%84%b0%eb%84%b7-%eb%b1%85%ed%82%b9-%ed%95%98%eb%8b%a4%ea%b0%80-%eb%a9%88%ec%b6%94%eb%8a%94-%eb%ac%b8%ec%a0%9c-%ec%99%80-%ed%95%b4%ea%b2%b0/#comments</comments>
		<pubDate>Fri, 28 Dec 2007 10:49:44 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[gutsy]]></category>
		<category><![CDATA[internet banking]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://diveintodata.org/2007/12/ubuntu-7-10-gutsy-%ec%97%90%ec%84%9c-virtualbox-%ec%9d%b8%ed%84%b0%eb%84%b7-%eb%b1%85%ed%82%b9-%ed%95%98%eb%8b%a4%ea%b0%80-%eb%a9%88%ec%b6%94%eb%8a%94-%eb%ac%b8%ec%a0%9c-%ec%99%80-%ed%95%b4%ea%b2%b0/</guid>
		<description><![CDATA[최근 삽질신이 어깨에 올라 앉았는지 갑자기 젠투를 밀고 우분투를 설치하고 싶어졌다(1년에 몇번씩 배포판 마다 왔다리 갔다리 한다). 마침 당분간은 약간 여유가 있는 터라 우분투 로 고고! 그리고 우분투 7.10 Gutsy AMD64 버전을 간편하게 다음 미러(참 좋은 선례를 보여주는 회사다)에서 받아 Ok 몇번 클릭으로 설치&#8230; 역시 설치는 윈도우 보다 훨씬 쉽다. 이것저것 설치하고 글꼴도 설정들도 조율하고, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=26&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>최근 삽질신이 어깨에 올라 앉았는지 갑자기 젠투를 밀고 우분투를 설치하고 싶어졌다(1년에 몇번씩 배포판 마다 왔다리 갔다리 한다). 마침 당분간은 약간 여유가 있는 터라 우분투 로 고고!</p>
<p>그리고 우분투 7.10 Gutsy AMD64 버전을 간편하게 <a href="ftp://ftp.daum.net/" target="_blank">다음 미러</a>(참 좋은 선례를 보여주는 회사다)에서 받아 Ok 몇번 클릭으로 설치&#8230; 역시 설치는 윈도우 보다 훨씬 쉽다.</p>
<p>이것저것 설치하고 글꼴도 설정들도 조율하고, VGA 카드 드라이버도 설치하고..<br />이제 인터넷 뱅킹을 위해 VirtualBox 설치! 앗 그런데 인터넷 뱅킹에서 죽는다..<br />이것 저것 검색해보니 키보드 보안 모듈 때문이란다. 그런데 이상하다 젠투에서는 문제가 없었다.</p>
<p>그래서 버전을 확인해 보았더니 우분투 공식 저장소에서 제공하는 VirtualBox OSE 의 버전은 1.50 으로 젠투의 VirtualBox OSE 버전인 1.52보다 조금 낮았다. 혹시 이후 버전에서 개선되었기 때문인가 하여 1.52를 받아 볼까 검색해 보니 <a href="http://www.virtualbox.org" target="_blank">VirtualBox 공식 사이트</a>에서 VirtualBox 의 우분투 패키지를 아예 제공해준다(어익후 감사). 더군다나 각 우분투 및 데비안 버전마다 저장소 까지 제공해 준다. 덕분에 간단히 설치를 끝냈고 <span style="text-decoration:underline;">현재 인터넷 뱅킹은 문제 없이 잘되는 중이다.</span> 아무래도 해당 문제는 1.52 이상에서 발생되지 않도록 개선된듯.</p>
<p><span style="text-decoration:underline;">문제 있는 분들(특히 뭐 선배님) <span style="color:rgb(255,0,0);">1.52 버전</span>로 얼렁 바꾸세요!</span><span style="text-decoration:underline;"><br /></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/diveintodata.wordpress.com/26/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/diveintodata.wordpress.com/26/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/26/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=26&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2007/12/28/ubuntu-7-10-gutsy-%ec%97%90%ec%84%9c-virtualbox-%ec%9d%b8%ed%84%b0%eb%84%b7-%eb%b1%85%ed%82%b9-%ed%95%98%eb%8b%a4%ea%b0%80-%eb%a9%88%ec%b6%94%eb%8a%94-%eb%ac%b8%ec%a0%9c-%ec%99%80-%ed%95%b4%ea%b2%b0/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>
	</item>
		<item>
		<title>썬더버드(Thunderbird)의 프로파일 매니저로 여러 계정 운영하기</title>
		<link>http://diveintodata.org/2007/12/26/%ec%8d%ac%eb%8d%94%eb%b2%84%eb%93%9cthunderbird%ec%9d%98-%ed%94%84%eb%a1%9c%ed%8c%8c%ec%9d%bc-%eb%a7%a4%eb%8b%88%ec%a0%80%eb%a1%9c-%ec%97%ac%eb%9f%ac-%ea%b3%84%ec%a0%95-%ec%9a%b4%ec%98%81%ed%95%98/</link>
		<comments>http://diveintodata.org/2007/12/26/%ec%8d%ac%eb%8d%94%eb%b2%84%eb%93%9cthunderbird%ec%9d%98-%ed%94%84%eb%a1%9c%ed%8c%8c%ec%9d%bc-%eb%a7%a4%eb%8b%88%ec%a0%80%eb%a1%9c-%ec%97%ac%eb%9f%ac-%ea%b3%84%ec%a0%95-%ec%9a%b4%ec%98%81%ed%95%98/#comments</comments>
		<pubDate>Wed, 26 Dec 2007 14:05:39 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[profile]]></category>
		<category><![CDATA[thunderbird]]></category>

		<guid isPermaLink="false">http://diveintodata.org/2007/12/%ec%8d%ac%eb%8d%94%eb%b2%84%eb%93%9cthunderbird%ec%9d%98-%ed%94%84%eb%a1%9c%ed%8c%8c%ec%9d%bc-%eb%a7%a4%eb%8b%88%ec%a0%80%eb%a1%9c-%ec%97%ac%eb%9f%ac-%ea%b3%84%ec%a0%95-%ec%9a%b4%ec%98%81%ed%95%98/</guid>
		<description><![CDATA[필자는 썬더버드를 메일 클라이언트로 주로 사용한다. 웹 메일들이 아무리 발전하고 인터페이스가 편할지라도 클라이언트를 하나 띄워 여러 계정의 메일을 한번에 받아보고 서로 다른 계정의 메일박스 안에 있는 메일들을 손쉽게 정리하는데는 역시 메일 클라이언트를 따라 오지 못한다. 더군다나 썬더버드는 다른 모질라 프로그램들과 마찬가지로 프로파일 기능을 제공한다. 다시 말해, 각기 다른 프로파일을 만들어 각 프로파일 마다 각기 다른 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=24&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>필자는 썬더버드를 메일 클라이언트로 주로 사용한다. 웹 메일들이 아무리 발전하고 인터페이스가 편할지라도 클라이언트를 하나 띄워 여러 계정의 메일을 한번에 받아보고 서로 다른 계정의 메일박스 안에 있는 메일들을 손쉽게 정리하는데는 역시 메일 클라이언트를 따라 오지 못한다.</p>
<p>더군다나 썬더버드는 다른 모질라 프로그램들과 마찬가지로 프로파일 기능을 제공한다. 다시 말해, 각기 다른 프로파일을 만들어 각 프로파일 마다 각기 다른 설정과 다른 메일 박스를 가지게 되는것 이다. 이는 여러 모로 편리하다. 특히 나 같이 업무상 여러 메일 계정을 관리하는 경우 아주 유용했다.</p>
<p>기타 메일 프로그램들과 마찬가지로 썬더버드도 여러 계정을 동시에 등록하여 관리 가능하다. 그러나 두 계정에 들어 있는 메일들이 절대 섞이면 안되거나 발신자 메일 주소가 중요하여 A 업무를 담당하는 메일 주소를 B 업무 관련된 메일로 발송하면 안되는 경우라면 아예 계정들을 각기 다른 프로파일을 통해 분리시켜 놓는게 안전하다. 예를 들면, 비서가 사장님 메일 계정과 자신의 계정을 하나 클라이언트로 관리하다가 사장님의 전달 사항을 자신의 발신자 주소로 보냈다고 상상해봐라! 얼마나 끔찍한 일이겠는지! ^^;</p>
<blockquote><p>thunderbird -P</p></blockquote>
<p>썬더버드를 실행할때 위와 같이 입력하면 아래와 같이 프로파일 관리 창이 뜬다.</p>
<p><img src="http://diveintodata.files.wordpress.com/2007/12/jk3.png?w=401&h=258" class="aligncenter" width="401" height="258" alt="사용자 삽입 이미지" /><br />위 관리창에서 당신이 사용할 프로파일을 만든다. 그리고 매번 선더버드를 켤때 &#8216;thunderbird -P&#8217; 를 실행하여 프로파일을 선택하는 방법이 있는 반면&#8230;</p>
<blockquote><p>thunderbird -P c0d3h4ck</p></blockquote>
<p>위와 같이 프로파일 이름을 써주면 바로 이름에 해당하는 프로파일로 썬더버드가 시작된다.<br />능력이 된다면 바로가기에 위와 같이 프로파일에 맞는 명령을 넣어 바로 시작할 수 있다.<br style="text-decoration:underline;"></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/diveintodata.wordpress.com/24/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/diveintodata.wordpress.com/24/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=24&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2007/12/26/%ec%8d%ac%eb%8d%94%eb%b2%84%eb%93%9cthunderbird%ec%9d%98-%ed%94%84%eb%a1%9c%ed%8c%8c%ec%9d%bc-%eb%a7%a4%eb%8b%88%ec%a0%80%eb%a1%9c-%ec%97%ac%eb%9f%ac-%ea%b3%84%ec%a0%95-%ec%9a%b4%ec%98%81%ed%95%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2007/12/jk3.png" medium="image">
			<media:title type="html">사용자 삽입 이미지</media:title>
		</media:content>
	</item>
		<item>
		<title>파이어폭스로 마우스 우클릭 안되는 사이트 무효화 시키기</title>
		<link>http://diveintodata.org/2007/12/24/%ed%8c%8c%ec%9d%b4%ec%96%b4%ed%8f%ad%ec%8a%a4%eb%a1%9c-%eb%a7%88%ec%9a%b0%ec%8a%a4-%ec%9a%b0%ed%81%b4%eb%a6%ad-%ec%95%88%eb%90%98%eb%8a%94-%ec%82%ac%ec%9d%b4%ed%8a%b8-%eb%ac%b4%ed%9a%a8%ed%99%94/</link>
		<comments>http://diveintodata.org/2007/12/24/%ed%8c%8c%ec%9d%b4%ec%96%b4%ed%8f%ad%ec%8a%a4%eb%a1%9c-%eb%a7%88%ec%9a%b0%ec%8a%a4-%ec%9a%b0%ed%81%b4%eb%a6%ad-%ec%95%88%eb%90%98%eb%8a%94-%ec%82%ac%ec%9d%b4%ed%8a%b8-%eb%ac%b4%ed%9a%a8%ed%99%94/#comments</comments>
		<pubDate>Mon, 24 Dec 2007 04:04:20 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://diveintodata.org/2007/12/%ed%8c%8c%ec%9d%b4%ec%96%b4%ed%8f%ad%ec%8a%a4%eb%a1%9c-%eb%a7%88%ec%9a%b0%ec%8a%a4-%ec%9a%b0%ed%81%b4%eb%a6%ad-%ec%95%88%eb%90%98%eb%8a%94-%ec%82%ac%ec%9d%b4%ed%8a%b8-%eb%ac%b4%ed%9a%a8%ed%99%94/</guid>
		<description><![CDATA[웹 브라우징을 하다보면 어떤 사이트들은 마우스 오른쪽 버튼 클릭을 통한 컨텍스트 메뉴를 아예 막아 놓은것을 경험한다. 하지만 개인적으로 이러한 제한을 매우 싫어한다. 사이트 관리자는 그림이나 글의 펌질을 막기 위해서 마우스 우 클릭을 제한했겠지만 사실 마우스 우클릭으로 나오는 메뉴에서는 그림 저장이나 복사만 있는 것은 아니기 때문이다. 또한 진짜 개인적으로 소장하고 싶은 그림이라면? +_+ 내가 아는 한 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=20&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>웹 브라우징을 하다보면 어떤 사이트들은 마우스 오른쪽 버튼 클릭을 통한 컨텍스트 메뉴를 아예 막아 놓은것을 경험한다. 하지만 개인적으로 이러한 제한을 매우 싫어한다. 사이트 관리자는 그림이나 글의 펌질을 막기 위해서 마우스 우 클릭을 제한했겠지만 사실 마우스 우클릭으로 나오는 메뉴에서는 그림 저장이나 복사만 있는 것은 아니기 때문이다. 또한 진짜 개인적으로 소장하고 싶은 그림이라면? +_+</p>
<p>내가 아는 한 대부분의 마우스 우 클릭 제한은 자바스크립트 코드로 수행되어진다. 그런데 대부분의 브라우저에서 자바스크립트의 수행을 켜고 끌수 있다. 따라서 자바스크립트를 사용을 해제하면 마우스 우클릭 후 나오는 메뉴를 볼 수 가 있다. 그러나 문제는 대부분의 사이트들이 링크에서 자바스크립트를 남발한다는 것이다.&nbsp; 그래서 자바 스크립트 사용을 통째로 해제하면 링크가 열리지 않을 수 있다!</p>
<p>파폭에서는 아래 설명하는 방법으로 부분적인 자바스크립트를 해제 함으로써 나머지 자바스크립트는 작동하면서도 컨텍스트 메뉴에 대한 제한만 풀 수 있다.</p>
<p><img src="http://diveintodata.files.wordpress.com/2007/12/hk7.png?w=540&h=493" class="aligncenter" width="540" height="493" alt="파폭의 사용자 설정" /><br />도구(Tool) -&gt; 설정(Preference) 을 선택하고 다시 내용(Content)를 선택한다. 그리고 자바스크립트 사용아기(Enable Java Script) 오른쪽에 있는 고급(Advanced) 버튼을 누르면 아래와 같은 설정 창이 나온다.</p>
<p><img src="http://diveintodata.files.wordpress.com/2007/12/jk2.png?w=301&h=202" class="aligncenter" width="301" height="202" alt="사용자 삽입 이미지" /><br />위에서 나머지는 그대로 둔채 위에서 세번째인 컨텍스트 메뉴를 사용하지 않거나 바꾸기(Disable or replace context menus) 의 체크박스를 해제하고 확인을 누르면? 마음껏 오른쪽 클릭을 즐길 수 있다!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/diveintodata.wordpress.com/20/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/diveintodata.wordpress.com/20/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=20&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2007/12/24/%ed%8c%8c%ec%9d%b4%ec%96%b4%ed%8f%ad%ec%8a%a4%eb%a1%9c-%eb%a7%88%ec%9a%b0%ec%8a%a4-%ec%9a%b0%ed%81%b4%eb%a6%ad-%ec%95%88%eb%90%98%eb%8a%94-%ec%82%ac%ec%9d%b4%ed%8a%b8-%eb%ac%b4%ed%9a%a8%ed%99%94/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2007/12/hk7.png" medium="image">
			<media:title type="html">파폭의 사용자 설정</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2007/12/jk2.png" medium="image">
			<media:title type="html">사용자 삽입 이미지</media:title>
		</media:content>
	</item>
		<item>
		<title>KDE 의 Killer Application &#8211; Amarok</title>
		<link>http://diveintodata.org/2007/03/29/kde-%ec%9d%98-killer-application-amarok/</link>
		<comments>http://diveintodata.org/2007/03/29/kde-%ec%9d%98-killer-application-amarok/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 10:44:13 +0000</pubDate>
		<dc:creator>Hyunsik Choi</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[amarok]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[media player]]></category>

		<guid isPermaLink="false">http://diveintodata.org/2007/03/kde-%ec%9d%98-killer-application-amarok/</guid>
		<description><![CDATA[KDE 의 Killer Application 중 하나인 Amarok을 그림으로 소개 합니다 ^^ 메인 화면에서는 최근 추가된 엘범, 그리고 내가 좋아하는 엘범을 통계를 바탕으로 보여준다. 노래를 연주하면 왼쪽 Context 창에선 연주된 횟수, 연관된 가수들, 현재 가수의 노래중 내가 좋아하는 노래, 그리고 현재 가수의 다른 엘범등이 소개된다. 가사와 위키피디아 가 제공하는 가수 정보도 볼 수 있다. Amarok 에서 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=14&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://kde.org/" target="_blank">KDE</a> 의 Killer Application 중 하나인 <a href="http://amarok.kde.org/" target="_blank">Amarok</a>을 그림으로 소개 합니다 ^^</p>
<p><div class="wp-caption aligncenter" style="width: 510px"><img src="http://diveintodata.files.wordpress.com/2007/03/hk3.png?w=500&h=366" width="500" height="366" alt="사용자 삽입 이미지" /><p class="wp-caption-text">Amarok 메인 화면</p></div>메인 화면에서는 최근 추가된 엘범, 그리고 내가 좋아하는 엘범을 통계를 바탕으로 보여준다.</p>
<p><img src="http://diveintodata.files.wordpress.com/2007/03/hk4.png?w=500&h=329" class="aligncenter" width="500" height="329" alt="연주 화면" />노래를 연주하면 왼쪽 Context 창에선 연주된 횟수, 연관된 가수들, 현재 가수의 노래중 내가 좋아하는 노래, 그리고 현재 가수의 다른 엘범등이 소개된다. 가사와 <a href="http://en.wikipedia.org" target="_blank">위키피디아</a> 가 제공하는 가수 정보도 볼 수 있다.</p>
<p><div class="wp-caption aligncenter" style="width: 510px"><img src="http://diveintodata.files.wordpress.com/2007/03/hk5.png?w=500&h=360" width="500" height="360" alt="Cover manager" /><p class="wp-caption-text">Cover manager</p></div><a href="http://amazon.com/" target="_blank">Amarok </a>에서 내가 제일 좋아하는 기능이다. Amarok 은 자체적으로 Cover Manager 를 제공하는데 노래 플레이시 Amazon 에서 자동으로 엘범의 cover 를 받아온다. 우리나라 노래의 경우는 멋진 only2sea 님이 <a href="http://kldp.net/projects/amarok-script/" target="_blank">한국 아마록 스크립트</a> 라는 이름으로 스크립트를 만드셨는데 이는 연주시 자동으로 melon 으로 부터 cover 를 받아온다.</p>
<p><div class="wp-caption aligncenter" style="width: 510px"><img src="http://diveintodata.files.wordpress.com/2007/03/jk1.png?w=500&h=329" width="500" height="329" alt="사용자 삽입 이미지" /><p class="wp-caption-text">lastfm 설정 화면</p></div><a href="http://www.last.fm/" target="_blank">lastfm</a> scrobber 를 별도로 설치할 필요 없이 Amarok 에서는 기본으로 지원한다.<br />&nbsp;<div class="wp-caption aligncenter" style="width: 510px"><img src="http://diveintodata.files.wordpress.com/2007/03/hk6.png?w=500&h=329" width="500" height="329" alt="사용자 삽입 이미지" /><p class="wp-caption-text">OSD 설정화면</p></div>OSD 내용부터 위치, 색까지 직접 설정할 수 있다. Amarok 을 Tray 에 내려 놓아도 현재 누구의 무슨곡이 흘러나오는지 멋지게 확인할 수 있다. 게다가 반투명한 효과까지 ^^</p>
<p>리눅스엔 이 말고도 멋진 Media Player 들이 많습니다..<br />차차 소개 하겠습니다.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/diveintodata.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/diveintodata.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diveintodata.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diveintodata.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diveintodata.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diveintodata.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diveintodata.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diveintodata.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diveintodata.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diveintodata.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diveintodata.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diveintodata.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diveintodata.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diveintodata.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diveintodata.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diveintodata.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diveintodata.org&#038;blog=12237478&#038;post=14&#038;subd=diveintodata&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diveintodata.org/2007/03/29/kde-%ec%9d%98-killer-application-amarok/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4213567e11cad51fc02bc2038e9ace27?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hyunsik Choi</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2007/03/hk3.png" medium="image">
			<media:title type="html">사용자 삽입 이미지</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2007/03/hk4.png" medium="image">
			<media:title type="html">연주 화면</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2007/03/hk5.png" medium="image">
			<media:title type="html">Cover manager</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2007/03/jk1.png" medium="image">
			<media:title type="html">사용자 삽입 이미지</media:title>
		</media:content>

		<media:content url="http://diveintodata.files.wordpress.com/2007/03/hk6.png" medium="image">
			<media:title type="html">사용자 삽입 이미지</media:title>
		</media:content>
	</item>
	</channel>
</rss>
