'Trend' 카테고리의 다른 글

Hezekiah Walker - Faithful Is Our God  (1) 2009.03.24
구글 안드로이드의 전략  (0) 2009.03.18
Spring Batch 예제 - 2009년..  (0) 2009.03.05
Flex와 Java 연동 관련  (0) 2009.02.19
EDOS (Economic Denial of Sustainability) 출현  (0) 2009.02.05
Posted by '김용환'
,

http://blog.daum.net/oraclejava/15192553

 

sping 2.0 aop @aspect 사용 예제

'general java' 카테고리의 다른 글

JMX에서의 Internalization  (0) 2009.03.25
toString 구현을 쉽게 구현하기  (0) 2009.03.25
javax.mail.Transport.send 메소드 사용시 block되는 현상  (0) 2009.03.24
Hadoop 사용 예제  (0) 2009.03.04
Hadoop 설치 하기  (0) 2009.03.04
Posted by '김용환'
,

Exception이 생기면 어떻게 되는지 궁금해 하는 분이 계시던데.. 기본적인 것이고, thinking in java를 꼭 정독하면 좋겠다.

 

아래의 코드를 보자

 

 



import org.junit.Test;


import com.opensymphony.xwork.interceptor.annotations.After;
import com.opensymphony.xwork.interceptor.annotations.Before;


public class TestCase {

 int a = 0;
 @Before
 public void setup() throws Exception {

 }
 
 @After
 public void teardown() throws Exception {
  
 }
 
 public void a() {
  a = 0;
  try {
   a = 1;
   throw new Exception ("1");
  } catch (Exception e) {
   a = 2;
  }
  a = 3;
 }
 
 @Test
 public void execute() throws Exception {
  a();
  System.out.println(a);
 }
 
}

 

 

 

3이 출력된다.

java 언어는 예외처리 개념을 두었는데(여기에 대한 엄청난 의견들이 있음..) catch로 묶는 순간 이미 이것은 처리를 하겠다는 개념으로 생각하면 됨.

'java core' 카테고리의 다른 글

Java Memory 이야기  (0) 2009.03.25
svn과 연동 (svnkit)  (0) 2009.03.25
PermGen에서의 OutOfMemoryError 발생 대처하기  (0) 2009.02.25
Generic Erasure  (0) 2009.02.24
Java Profiling API 공부 시작..  (0) 2009.02.20
Posted by '김용환'
,

 

간단 테스트


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd                http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
 
 <description>Monitor Job</description>
 <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
  <property name="jobRepository" ref="jobRepository"/>
 </bean>
  
 <bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"
  p:databaseType="mysql">
  <property name="dataSource" ref="dataSource"/>
  <property name="transactionManager" ref="transactionManager"/>
 </bean>
  
 <bean id="simpleJob" class="org.springframework.batch.core.job.SimpleJob"
  abstract="true"  p:restartable="true">
  <property name="jobRepository" ref="jobRepository"/>
 </bean>
  
 <bean id="taskletStep" class="org.springframeworkbatch.core.step.tasklet.TaskletStep"
  abstract="true" p:jobRepository-ref="jobRepository" />
 
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql://119.205.238.214:3306/monitor_batch" />
  <property name="username" value="dejava" />
  <property name="password" value="vpfmak12" />
 </bean>
 
 <bean id="transactionManager"
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
  lazy-init="true" p:dataSource-ref="dataSource" />

 <bean id="myHelloJob" parent="simpleJob">
  <property name="name" value="myHelloJob" />
  <property name="steps">
   <list>
    <bean id="firstHello" parent="taskletStep">
     <property name="tasklet">
      <bean class="com.nhncorp.laputa.monitor.batch.SimpleJob">
       <property name="message" value="Oh~ Hi~ Kim Yong Hwan" />
      </bean>
     </property>
    </bean>
   
    <bean id="secondHello" parent="taskletStep">
     <property name="tasklet">
      <bean class="com.nhncorp.laputa.monitor.batch.SimpleJob">
       <property name="message" value="Come on~" />
      </bean>
     </property>
    </bean>
   </list>
  </property>
 </bean>

 <bean id="helloJob" class="org.springframework.scheduling.quartz.JobDetailBean">
  <property name="jobClass" value="com.nhncorp.laputa.monitor.batch.JobWorker" />
  <property name="jobDataAsMap">
   <map>
    <entry key="launcher" value-ref="jobLauncher"/>
    <entry key="job" value-ref="myHelloJob"/>
   </map>
  </property>
 </bean>
 
 <bean id="batchLogCleaningJob" class="org.springframework.scheduling.quartz.JobDetailBean">
  <property name="jobClass" value="com.nhncorp.laputa.monitor.batch.JobWorker" />
  <property name="jobDataAsMap">
   <map>
    <entry key="launcher" value-ref="jobLauncher"/>
    <entry key="job" value-ref="myHelloJob"/>
   </map>
  </property>
 </bean>
 
 <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  <property name="jobDetail" ref="helloJob" />
  <property name="startDelay" value="10000" />
  <property name="repeatInterval" value="50000" />
 </bean>
 
 <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
   <property name="jobDetail" ref="batchLogCleaningJob"/>
  <!-- run every morning at 0 AM -->
  <!-- TODO : Batch Job clean every day -->
   <property name="cronExpression" value="0 0 0 * * ?"/>
 </bean>
 
 <!--  Scheduler Initialization   -->
 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
   <list>
    <ref bean="simpleTrigger"/>
    <ref bean="cronTrigger"/>
   </list>
  </property>
 </bean>
 
 
 
</beans>

 

 


'Trend' 카테고리의 다른 글

구글 안드로이드의 전략  (0) 2009.03.18
Podcasting 공부 싸이트  (0) 2009.03.09
Flex와 Java 연동 관련  (0) 2009.02.19
EDOS (Economic Denial of Sustainability) 출현  (0) 2009.02.05
FIDC (FDIC: Federal Deposit Insurance Corporation)  (0) 2008.11.25
Posted by '김용환'
,

하둡을 막상 사용하려면 좀 갑갑하다. 설치 빼고는 제대로 된 문서가 별로 없다. 그래서 간단하게 내가 만든 예제를 보여드리고자 한다.

 

두서 없이 쓰긴 하는데.. 읽다보면 알 수 있을 것이다.

 


// 하둡 내부에서 output 삭제
bin/hadoop  fs -rmr output

// 하둡 내부에 jsp grep한 결과를 output 이라는 hdfs에 저장
bin/hadoop jar hadoop-*-examples.jar grep input output 'jsp'

// hdfs에 저장된 output을 로컬로 복사
bin/hadoop fs -get output1 output

 

한번 만들어진 hdfs의 output 디렉토리는 다시 쓸 수 없다. 지워야 한다..

 

 

[handev001:/share/hadoop-0.18.3] bin/hadoop
[handev001:/share/hadoop-0.18.3] bin/hadoop dfs -mkdir source
[handev001:/share/hadoop-0.18.3] cat > source.txt
input

[handev001:/share/hadoop-0.18.3] bin/hadoop dfs -put source.txt source/

 

[handev001:/share/hadoop-0.18.3] bin/hadoop jar contrib/streaming/hadoop-0.18.3-streaming.jar -input source -output "./log_result" -mapper mapper.pl -file mapper.pl -reducer reducer.pl -file reducer.pl

 

이 때 -input 프로퍼티의 값은 source는 디렉토리를 의미한다. 즉, hdfs의 root 상대경로 인 source 디렉토리릉 의미한다. 아래를 볼 것 ..

그리고, 마찬가지로 -output이다. 하지만, 펄 스크립트는 내  local 파일에 있다.

 

/share/hadoop-0.18.3] bin/hadoop fs -ls
Found 11 items
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 14:45 /user/hadoop/input
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 17:37 /user/hadoop/log_result
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 17:39 /user/hadoop/output
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 17:41 /user/hadoop/output1
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 17:46 /user/hadoop/output2
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 18:53 /user/hadoop/output3
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 18:54 /user/hadoop/output4
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 18:58 /user/hadoop/output5
drwxr-xr-x   - hadoop supergroup          0 2009-03-04 10:11 /user/hadoop/output6
drwxr-xr-x   - hadoop supergroup          0 2009-03-04 10:26 /user/hadoop/output7
drwxr-xr-x   - hadoop supergroup          0 2009-03-03 17:43 /user/hadoop/source


 

mapper.pl

 #!/usr/bin/perl


my $line;


while(<STDIN>)  {
$line = $_;
chomp ($line);
print $line;
break;
}

#$r = `grep -r $line /user/hadoop/input`;
print "grep -r $line /user/hadoop/input ";
print $r."\n";

 

 

reducer.pl

 #!/usr/bin/perl
while (<>) {
 print;
}

 

아래를 참조하면 좋다.

 

참고하기

http://www.cs.brandeis.edu/~cs147a/lab/hadoop-troubleshooting/

http://www.cs.brandeis.edu/~cs147a/lab/hadoop-example/

 

 

계속 쓰려고 헀지만, hadoop을 중간에 안쓴 이유가 있었다.

우선 가지고 있는 파일들이 대용량이 아니라는 점, 그리고 hadoop을 써도 아주 성능상 효과를 가지지 못한 점이었다. 그것은 로컬만 썼으니까 그랬던 것 같다.

대용량 파일, 검색이 필요할 때는, 다양하게 거기에 맞는 솔류션을 쓰는 것이 많긴 한데, 아직은 나에게는 그런 일이 적어서..^^;; 하루만에 hadoop 써본 것을 정리한다.

 

또한 Hadoop의 전문가가 쓴 아래의 글도 많은 도움을 받았다.

 

http://www.jaso.co.kr/159

 

 

Posted by '김용환'
,

새로운 것 함 해볼려고 Hadoop설치했는데. 아직 나한테 잘 다가온다. 대용량 파일, 검색에는 유효하지만, 그리 많지 않다면 쓸 필요가 없다. 내가 하는 일에는 대용량 파일이 없고, 검색할 일이 없어서.. 아직 쓰지 않는다.

 

Hadoop이 무엇인지 아는 사람이 설치하러 왔으므로, 자세한 Hadoop의 이야기는 http://hadoop.apache.org/ 에서 참조하길 바란다.

 

자 이제 설치해보자, (리눅스에서 설치)

#1. 하둡을 다운로드 한다.

http://hadoop.apache.org/core/releases.html

나는 개인적으로 최신 release는 쓰지 않는다. 그 바로 전 것을 쓴다. 현재 0.19버젼이 나왔으니. 0.18버젼으로 다운로드

/share/hadoop-0.18.3 디렉토리에 다운받고 풀어준다.

 

#2. JAVA_HOME 설정

.bashrc에, export JAVA_HOME=/usr/local/jdk6

 

#3. Hadoop 개인정보 설정

groupadd users
useradd -d /hdfs/home -g users hadoop
chown -R hadoop:users /hdfs
chown -R hadoop:users /share
passwd hadoop

 

#4. hadoop 계정으로 들어

su - hadoop

 

#5 Hadoop 설정 파일

나는 로컬에서만 돌려볼 것이라서 single machine 설정이다. 만약 multiple machine에서 돌릴꺼면, 아래 참조 references를 볼 것.

/share/hadoop-0.18.3/conf] vi hadoop-site.xml

 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>


<property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
</property>

<property>
        <name>mapred.job.tracker</name>
        <value>localhost:9001</value>
</property>

<property>
        <name>dfs.name.dir</name>
        <value>/hdfs/filesystem/name</value>
</property>

<property>
        <name>dfs.data.dir</name>
        <value>/hdfs/filesystem/data</value>
</property>

<property>
        <name>mapred.system.dir</name>
        <value>/hdfs/filesystem/mapreduce/system</value>
</property>

<property>
        <name>mapred.local.dir</name>
        <value>/hdfs/filesystem/mapreduce/local</value>
</property>

 

</configuration>

설정은 자유다. 하지만 중요한 것이 있다. 절대로 dfs.name.dir은 mkdir로 만들지 말 것...

임의로 만들면 namenode daemon이 뜨지 않는다.

 

#6 디렉토리 생성

/share/hadoop-0.18.3]# mkdir -p /hdfs/filesystem/data
/share/hadoop-0.18.3]# mkdir -p /hdfs/filesystem/mapreduce/system
/share/hadoop-0.18.3]# mkdir -p /hdfs/filesystem/mapreduce/local
/share/hadoop-0.18.3]# mkdir -p /hdfs/filesystem/name/image

 

#7 namenode 데몬을 위핸 포맷을 한다.

/share/hadoop-0.18.3]# bin/hadoop namenode -format

주의점, 꼭 로그를 확인해서 문제가 없는지 확인한다.

logs라는 디렉토리에서 꼼꼼하게 제대로 format되는지 확인한다.

여기서 문제면 진도가 나가지 않는다.

 

#8 Hadoop 실행

/share/hadoop-0.18.3/bin/start-all.sh

 

hadoop계정으로 실행했으므로 namenode 데몬(관리자), datanode(실행노드)로 지정된 서버에 ssh 들어가게 된다. 이거 패스워드 입력하라고 하는데.. 귀찮지 않은가??

그냥 password 안넣게 아래 링크보고 하면 된다.

http://kldp.org/node/40578

 

#9 자바 데몬이 뜨는 것을 보고 아래 URL이 정상적인지 확인하다.

http://서버 ip:50060/tasktracker.jsp
http://서버 ip:50030/jobtracker.jsp
http://서버 ip:50070/dfshealth.jsp

#10. 테스트

소스를 보면 많은 도움 된다. 역시 Batch 개념은 어디서나 만난다.

 

/share/hadoop-0.18.3]  bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
09/03/03 10:26:59 INFO mapred.FileInputFormat: Total input paths to process : 10
09/03/03 10:26:59 INFO mapred.FileInputFormat: Total input paths to process : 10
09/03/03 10:27:00 INFO mapred.JobClient: Running job: job_200903031008_0001
09/03/03 10:27:01 INFO mapred.JobClient:  map 0% reduce 0%

09/03/03 10:27:06 INFO mapred.JobClient:  map 18% reduce 0%
09/03/03 10:27:09 INFO mapred.JobClient:  map 36% reduce 0%
09/03/03 10:27:12 INFO mapred.JobClient:  map 45% reduce 0%
09/03/03 10:27:13 INFO mapred.JobClient:  map 54% reduce 0%
09/03/03 10:27:15 INFO mapred.JobClient:  map 63% reduce 0%
09/03/03 10:27:16 INFO mapred.JobClient:  map 72% reduce 0%
09/03/03 10:27:17 INFO mapred.JobClient:  map 81% reduce 0%
09/03/03 10:27:19 INFO mapred.JobClient:  map 90% reduce 0%
09/03/03 10:27:20 INFO mapred.JobClient:  map 100% reduce 0%

09/03/03 10:27:29 INFO mapred.JobClient:  map 100% reduce 9%
09/03/03 10:27:30 INFO mapred.JobClient:  map 100% reduce 12%
09/03/03 10:27:34 INFO mapred.JobClient:  map 100% reduce 18%
09/03/03 10:27:39 INFO mapred.JobClient:  map 100% reduce 27%
09/03/03 10:27:42 INFO mapred.JobClient: Job complete: job_200903031008_0001
09/03/03 10:27:42 INFO mapred.JobClient: Counters: 16
09/03/03 10:27:42 INFO mapred.JobClient:   File Systems
09/03/03 10:27:42 INFO mapred.JobClient:     HDFS bytes read=48319
09/03/03 10:27:42 INFO mapred.JobClient:     HDFS bytes written=1907
09/03/03 10:27:42 INFO mapred.JobClient:     Local bytes read=1549
09/03/03 10:27:42 INFO mapred.JobClient:     Local bytes written=3680
09/03/03 10:27:42 INFO mapred.JobClient:   Job Counters
09/03/03 10:27:42 INFO mapred.JobClient:     Launched reduce tasks=1
09/03/03 10:27:42 INFO mapred.JobClient:     Launched map tasks=11
09/03/03 10:27:42 INFO mapred.JobClient:     Data-local map tasks=11
09/03/03 10:27:42 INFO mapred.JobClient:   Map-Reduce Framework
09/03/03 10:27:42 INFO mapred.JobClient:     Reduce input groups=49
09/03/03 10:27:42 INFO mapred.JobClient:     Combine output records=100
09/03/03 10:27:42 INFO mapred.JobClient:     Map input records=1554
09/03/03 10:27:42 INFO mapred.JobClient:     Reduce output records=49
09/03/03 10:27:42 INFO mapred.JobClient:     Map output bytes=1552
09/03/03 10:27:42 INFO mapred.JobClient:     Map input bytes=47484
09/03/03 10:27:42 INFO mapred.JobClient:     Combine input records=107
09/03/03 10:27:42 INFO mapred.JobClient:     Map output records=56
09/03/03 10:27:42 INFO mapred.JobClient:     Reduce input records=49
09/03/03 10:27:42 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
09/03/03 10:27:43 INFO mapred.FileInputFormat: Total input paths to process : 1
09/03/03 10:27:43 INFO mapred.FileInputFormat: Total input paths to process : 1
09/03/03 10:27:43 INFO mapred.JobClient: Running job: job_200903031008_0002
09/03/03 10:27:44 INFO mapred.JobClient:  map 0% reduce 0%
09/03/03 10:27:48 INFO mapred.JobClient:  map 100% reduce 0%
09/03/03 10:27:51 INFO mapred.JobClient: Job complete: job_200903031008_0002
09/03/03 10:27:51 INFO mapred.JobClient: Counters: 16
09/03/03 10:27:51 INFO mapred.JobClient:   File Systems
09/03/03 10:27:51 INFO mapred.JobClient:     HDFS bytes read=1907
09/03/03 10:27:51 INFO mapred.JobClient:     HDFS bytes written=1135
09/03/03 10:27:51 INFO mapred.JobClient:     Local bytes read=1549
09/03/03 10:27:51 INFO mapred.JobClient:     Local bytes written=3134
09/03/03 10:27:51 INFO mapred.JobClient:   Job Counters
09/03/03 10:27:51 INFO mapred.JobClient:     Launched reduce tasks=1
09/03/03 10:27:51 INFO mapred.JobClient:     Launched map tasks=1
09/03/03 10:27:51 INFO mapred.JobClient:     Data-local map tasks=1
09/03/03 10:27:51 INFO mapred.JobClient:   Map-Reduce Framework
09/03/03 10:27:51 INFO mapred.JobClient:     Reduce input groups=3
09/03/03 10:27:51 INFO mapred.JobClient:     Combine output records=0
09/03/03 10:27:51 INFO mapred.JobClient:     Map input records=49
09/03/03 10:27:51 INFO mapred.JobClient:     Reduce output records=49
09/03/03 10:27:51 INFO mapred.JobClient:     Map output bytes=1429
09/03/03 10:27:51 INFO mapred.JobClient:     Map input bytes=1821
09/03/03 10:27:51 INFO mapred.JobClient:     Combine input records=0
09/03/03 10:27:51 INFO mapred.JobClient:     Map output records=49
09/03/03 10:27:51 INFO mapred.JobClient:     Reduce input records=49

 

 

#11 테스트 결과 확인

좀 익숙해져야 하는게. bin/hadoop fs -ls  나 bin/hadoop dfs -cat 이런거다.

마치 CDROM에 dev 장치에 mount해서 파일 복사해오는 느낌이랄까??

 

/share/hadoop-0.18.3] bin/hadoop fs -get output output
/share/hadoop-0.18.3] cat output/*

또는

/share/hadoop-0.18.3] bin/hadoop fs -ls output/  해서 결과파일이 있는지 확인한다. 파일크기가 0이면 내가 잘못했음을 의미한다.

/share/hadoop-0.18.3] bin/hadoop fs -cat output/part-00000

 

결과값 확인

 

3       dfs.class
3       dfs.
2       dfs.name.dir
2       dfs.data.dir
2       dfs.period
1       dfs.http.address
1       dfs.balance.bandwidth
1       dfs.block.size
1       dfs.blockreport.initial
1       dfs.blockreport.interval
1       dfs.client.block.write.retries
1       dfs.client.buffer.dir
1       dfs.datanode.address
1       dfs.datanode.dns.interface
1       dfs.datanode.dns.nameserver
1       dfs.datanode.du.pct
1       dfs.datanode.du.reserved
1       dfs.datanode.handler.count
1       dfs.datanode.http.address
1       dfs.datanode.https.address
1       dfs.datanode.ipc.address
1       dfs.default.chunk.view.size
1       dfs.df.interval
1       dfs.file
1       dfs.heartbeat.interval
1       dfs.hosts
1       dfs.hosts.exclude
1       dfs.https.address
1       dfs.impl
1       dfs.max.objects
1       dfs.namenode.decommission.interval
1       dfs.namenode.decommission.interval.
1       dfs.namenode.decommission.nodes.per.interval
1       dfs.namenode.handler.count
1       dfs.namenode.logging.level
1       dfs.permissions
1       dfs.permissions.supergroup
1       dfs.replication
1       dfs.replication.consider
1       dfs.replication.interval
1       dfs.replication.max
1       dfs.replication.min
1       dfs.replication.min.
1       dfs.safemode.extension
1       dfs.safemode.threshold.pct
1       dfs.secondary.http.address
1       dfs.servers
1       dfs.web.ugi
1       dfsmetrics.log

 

잘 모르는 게 있으면, 이곳을 참조하자. 여기서 참조해서 나도 한 거라서^^

 

http://ausgang.egloos.com/1806517
http://tida.tistory.com/
http://hadoop.apache.org/core/docs/current/quickstart.html
http://www.joinc.co.kr/modules/moniwiki/wiki.php/JCvs/Search/Document/nutch/Hadoop
http://hadoop.apache.org/core/docs/current/cluster_setup.html
http://www.hadoop.or.kr/?mid=lecture&document_srl=406
http://public.yahoo.com/gogate/hadoop-tutorial/start-tutorial.html

 

 

출처는 꼭 남기시길..^^

Posted by '김용환'
,

일일빌드서버에 저희쪽 SVN에 접속하여 모든 소스를 다운을 받았습니다. 체크아웃 소요시간은 17분정도 걸립니다. 그리고 소스는 head 5G, RC 5G 10G입니다.

 

소스를 다운 받는 이유는 reference를 검색하기 위함입니다. 하도 많은 검색이 필요하지요.

Head버전에서 grep으로 소스를 검색해보려니 (grep –r ‘HttpClient’ /home/www/bdssvn/head) 10분정도가 소요됩니다. (fgrep도 큰차이가 없음)

 

그래서, Hadoop(회사 owfs와 비슷, 분산파일시스템, 야후에서 사용) 을 이용하여 Map Reduce를 써먹을려고 해서 설치하기 까다로웠지만, 로컬만 설치해서 테스트를 해보니, 역시 grep을 기반으로 한거라 어쩔 수 없이 10분 소요됩니다. 여러 대에 깔아서 하기에는 조금 거시기 하더군요.

 

그래서 grep보다 빠른 것이 있나 확인했더니. ack라는 것이 있었습니다. 이거 1분만에 검색결과를 보여줍니다.

 

실제 hadoop을 썼을 때는 분산 파일 시스템을 쓰는 부분, 메모리를 많이 사용하는 부분으로 인해서 속도가 그리 많이 높게 나오지 않는다고 합니다. 10대를 설치해서 grep을 해보면, 10배의 기대치가 있지만, 실지로는 7배 빠른 정도라고 합니다. 제 생각으로는 java 기반의 Hadoop IO가 가장 약한 부분이라서 side effect가 있지 않나 생각이 듭니다.

또한, grep보다 빠른 녀석이 있는데 바로 ack입니다. Perl 기반이며, 이거 테스트를 해보니 엄청 빨라서 굳이 다른 것을 써보고 싶지 않을 정도입니다. 검색결과 포맷도 예쁘구요. 자세한 것은 참고자료를 보시면서 즐기시면 좋을 것 같습니다.

 

참고자료

http://kldp.org/node/55573

http://blog.i-no.de/archives/2008/05/06/index.html

http://www.jaso.co.kr/category/project?page=5

http://petdance.com/ack/

http://blog.i-no.de/archives/2008/05/06/index.html

'etc tools' 카테고리의 다른 글

라이브온에어  (0) 2009.04.07
여러 줄에서 특정 정규 패턴 찾아내기  (1) 2009.03.09
7zip과 bzip2의 비교  (0) 2009.03.02
디렉토리 비교, 3개의 파일 비교 가능 툴  (0) 2009.02.20
James 메일 서버  (0) 2009.02.19
Posted by '김용환'
,

2cpu가 있는 서버상에서 7zip과 bzip2의 성능 비교 자료이다. 5G가 되는 특정 데이터를 가지고 처리했는데. bipz2가 훨씬 더 빨리 속도가 빨랐다.

 

7zip fastest 5 min 14 MB/sec 973 MB
7zip fast 7 min 11 MB/sec 926 MB
7zip normal 34 min 2.5 MB/sec 752 MB
7zip maximum 41 min 2.0 MB/sec 714 MB
7zip ultra 48 min 1.7 MB/sec 698 MB

 

bzip2 fastest 2 min 36 MB/sec 1092 MB
bzip2 fast 2.5 min 29 MB/sec 1011 MB
bzip2 normal 3.5 min 22 MB/sec 989 MB
bzip2 maximum 7 min 12 MB/sec 987 MB
bzip2 ultra 21 min 4 MB/sec 986 MB

 

출처 : http://www.codinghorror.com/blog/archives/001231.html

Posted by '김용환'
,

subclipse는 쓰지 말자.. 흘..

 

설치 꼬이는 문제와 함께 버젼 문제, 사용상 이상한 점이 많다.

 

결국 subversive로 이동~

 

 

 

http://www.eclipse.org/subversive/documentation/gettingStarted/aboutSubversive/install.php

 

Posted by '김용환'
,

요즘 Podcasting에 가보면 American Life가 가장 인기가 좋다.

그냥 영어 공부할 겸사 들으면 워낙 어려워서 잘 못들었는데.. 홈페이지를 보니 영어 스크립트를 제공한다. 오호!!

경제같은 것도 공부할 수 있고, 공짜로 리스닝하면서 들을 수 있다.

 

예를 들어본다.

 

아래 웹싸이트에 접근한다

http://www.thislife.org/Radio_Episode.aspx?episode=355

 

Download a transcript.를 누르면 pdf 영문 스크립트가 나온다.

Full Episode

좌측 아래쯤에 보면 아래 메뉴가 있다. 그걸 누르면 audio play가 된다.

 

 

Posted by '김용환'
,