JMX 스펙리더의 글을 퍼온다.
Posted by 김용환 '김용환'
TAG 영화

 

아파치 commons의 org.apache.commons.lang.builder.ToStringBuilder 클래스는 이런 일을 위해서 만들어졌다.

 

toString을 구현할려면, 그냥 StringBuffer나 StringBuilder쓰는 삽질이 있었는데. 얘는 쓰면 참 편하다.

이젠 toString 삽질은 그만..

 

1) 그냥 쓰는 경우.

 @Override
 public String toString() {
  return ToStringBuilder.reflectionToString(this);
 }

 

 @Override
 public String toString() {
  return ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE);
 }

 

2) 여러줄로 나눠서 Properties를 보여주는 것 (내가 주로 사용)

 @Override
 public String toString() {
  return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
 }

 

2) 한줄로 나눠서 Properties를 보여주되 클래스와 클래스의 hash값은 보여주지 않는다.

 @Override
 public String toString() {
  return ToStringBuilder.reflectionToString(this, ToStringStyle.SIMPLE_STYLE);
 }

 

Posted by 김용환 '김용환'

어느날 Transport 클래스의 send 메소드를 사용하는데, 영원히 기다리는 현상이 발견되었다.

이는 메일서버가 약간 이상해지거나. 잘못된 주소로 계속 retry하는 시도가 있으면, 마치 block되는 느낌으로 계속 있는 현상이 발생된다.

 

확인을 해보니.. Tranport 클래스의 send 메소드는 block 형 메소드였다.

 

http://forums.sun.com/thread.jspa?forumID=43&threadID=474662

 

 

자세한 내용을 확인하기 위해서 API를 살펴보았다.

http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html

 

mail.smtp.connectiontimeout int Socket connection timeout value in milliseconds. Default is infinite timeout.
mail.smtp.timeout int Socket I/O timeout value in milliseconds. Default is infinite timeout.

 

 

대충 사용법은 다음과 같다..

 

 

 

  Properties props = System.getProperties();
  props.put("mail.smtp.host", conf.get("mail/smtp/host"));
  props.put("mail.debug", conf.get("mail/debug"));
  props.put("mail.transport.protocol", "smtp");
  props.put("mail.smtp.connectiontimeout", "5000");
  props.put("mail.smtp.timeout", "5000");  

 

Session session = Session.getInstance(props);

MimeMessage message = new MimeMessage(session);

message.setFrom(ia);
  
  message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
  message.setSubject(subject, encoding);
  message.setContent(text, "text/html; charset=" + encoding);

  Transport.send(message);

 

 

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

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

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
sping 2.0 aop @aspect 사용 예제  (0) 2009.03.06
Hadoop 사용 예제  (0) 2009.03.04
Hadoop 설치 하기  (0) 2009.03.04
Posted by 김용환 '김용환'
TAG 영화

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

 

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

 


// 하둡 내부에서 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

 

 

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

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

새로운 것 함 해볼려고 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

 

 

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

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

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