thread 덤프를 획득 했다면 분석을 해보자.


툴을 이용하자. 

SUM JDK :  TDA , visualvm 플러그인으로도 사용 가능 하다.

IBM JDK : TMDA 

jar 하나이고 java -Xmx500m -jar jca455.jar > 이런식으로 실행할 수 있다. 

TMDA :http://pic.dhe.ibm.com/infocenter/isa/v4r1m0/index.jsp?topic=%2Fcom.ibm.esupport.tool.tmda.doc%2Fdocs%2Freadme.htm


thread 덤프를 확인해 보자


전체적인 문제라면 

전체에서 사용하는 객체에서 lock이 있거나 threadpool을 차서 더이상 요청을 처리할 수 없을때. 

특정 동작이 문제라면 

해당 Thread를 찾아 stack trace로 확인한다.


1. 전체 thread 숫자 와 상태 확인 (IBM JDK의 경우 더많은 시스템 정보를 제공한다.)

- 전체 thread가 was에서 허용 가능한 자원을 다 썼다면 해당 웹 어플리케이션은 응답이 없을 것이다.

2. 각 thread의 상태 확인.

NEW: 새로운 쓰레드로 아직 시작되지 않음
RUNNABLE: JVM이 동작중. 이는 항상 동장하고 있다는 것은 아님. 리소스 획득을 위해서 잠시 대기 중일 수 있다.
BLOCKED: 쓰레드가 synchronized block 혹은 method에 진입하기 위해 대기.
WAITING: 대기 상태로 다른 쓰레드가 작업 중임을 의미. 이는 Object.wait 메소드 호출 후에도 진입되는 상태
TIMED_WAITING: 쓰레드가 특정 시간을 대기함을의미. 이는 Thread.sleep(), Object.wait()로 시간 인자가 들어간 메소드가 호출될때 진입되는 상태. 혹은 LockSupport, ParkNanos, LockSupport, ParkUntil 메소드도 동일
TERMINATED: run 메소드에서 빠져나온 경우 또는 예외가 발생하여 빠져나온 경우

데드락이 없는지 BLOCKED나 WAIT를 유심히 확인한다.

thread는 각각 고유한 정보인 THreadID를 가지고 있다. 문제가 있는 Thread 우선 확인해야 한다. 


Thread 덤프는 한 시점에 대한 정보이므로 여러번 수집하여 어떻게 동작하는지 확인해야 하는 경우도 있다.

3. thread의 stack trace를 유심히 보자.  (아래와 같은 상황을 찾을 수 있다.)

- 어떤 메서드를 실행 중인지

- 어떤 메서드에서 대기중인지 (해당 메서드에 동기화 처리가 되어있는지 확인해 본다)

- DB 풀을 기다리는지 

- DB의 응답을 기다리는지 

등등 

Posted by 마법수정화살
,

thread 덤프를 보고 문제를 찾아야 될 때가 되었다면..

난감한 문제 (서버의 응답이 없거나 ,느리거나. 특정 기능이 안되던가.. 등등) 와 만났을 것이다. 


1. 실행중인 java 버전이 1.4 이하라면.. (경험 해 보지 못하고 쓴 부분이 있습니다.)

linux : kill-3 [java process]

AIX 는 정말 잘된다. 다른 unix계열은.. 글세.. 해당 시그널이 가면 stdout에 출력이 되는 경우도 있고 

{java}/bin 밑에, 혹은 홈디렉토리에 생성되는 경우를 본적이 있다.

- windows :  

창모드 -> Ctrl + Break (해당 console에 출력됨.)

서비스 모드 -> SendSignal 을 이용하여 원하는 프로세스에 Signal(Ctrl+Break)을 보낼 수 있다.

(wrapper 로그에 남을듯..)

* java service wrapper의 설정. 아래 글을 보면 아래 설정을 하면 signal을 jvm에게 전달 할 수 있다고 한다.

java webservice의 현재 버전에 대한 내용이므로 참조만..

wrapper.request_thread_dump_on_failed_jvm_exit=TRUE

http://wrapper.tanukisoftware.com/doc/english/prop-request-thread-dump-on-failed-jvm-exit.html

http://wrapper.tanukisoftware.com/doc/english/qna-timers.html#dumps //특정시간마다 thread dump

http://wrapper.tanukisoftware.com/doc/english/prop-filter-x-n.html // 특정 이벤트시 dump 


2. java 버전이 1.5 이상이면. 

1. 위 방법과 동일  

2. threadDump.jsp 로 확인. (jsp를 업로드 하고 호출)

- 1.5에서 제공하는 메서드를 사용 함. 1.4 버전용은 안보임. 간편해서 좋음.

- http://www-01.ibm.com/support/docview.wss?uid=swg21439803

- http://greatkim91.tistory.com/167 : 한글로 잘 설명되어 있습니다.

2. java 1.5 버전 jconsole, java 1.6 버전 jvisualvm

아래 옵션을 JAVA 실행시 옵션에 추가. 

-Dcom.sun.management.jmxremote 

-Dcom.sun.management.jmxremote.port=2020 

-Dcom.sun.management.jmxremote.ssl=false 

-Dcom.sun.management.jmxremote.authenticate=false

- jconsole 실행후 local에 프로세스가 잡히면 그것을 선택하면 되고 아니면 remote로 port 정보를 추가로 입력하고 JVM을 확인 할수 있다. 기본적으로 thread dump 탭이 보이지 않았는데 플러그인을 설치하면 되는것 같다. 

- jvisualvm 은 visualvm으로 검색하여 다운도 받을 수도 있다. java6 이상이면 기본적으로 {JAVA_HOME}\bin 안에 있다. 

thread dump 파일을 얻을수 있다.

3. jstack 

widnows는 jdk 1.5의 특정버전 이나 jdk 1.6 버전 에서 쓸 수 있다.

- 사용법은 패스 > http://kwon37xi.egloos.com/2871508 

프로세스 아이디 (pid)를 알아내려면 

- UNIX, Linux, OSX : ps -el | grep java

- Windows : Ctrl+Shift+Esc > 보기 > 열 선택 > pid 체크


TOMCAT 팁. : 설치 버전 톰캣을 사용 중이라면, 트레이 아이콘을 우클릭하면  context Menu에 Thread Dump 라는 항목이 있다.

그밖에 키워드로는 javadump.exe 가 있는데 한번 해봐도 잘 안됨..






Posted by 마법수정화살
,

windows 에서 hadoop 설치 를 마쳤다면 ..


- single node cluster 구성
- version을 2.5.0으로 다시 설치 함.

ex) D:\install\hadoop-2.4.1-src\hadoop-dist\target 
디렉 토리에 hadoop-2.4.1.tar.gz 파일을 얻었을 것이다.

압축을 풉니다. 

ex) D:\hadoop-2.4.1

압축을 풀면 아래와 같은 디렉토리 구조가 있다. 

Directory of D:\hadoop-2.4.1 01/18/2014 08:11 AM <DIR> . 01/18/2014 08:11 AM <DIR> .. 01/18/2014 08:28 AM <DIR> bin 01/18/2014 08:28 AM <DIR> etc 01/18/2014 08:28 AM <DIR> include 01/18/2014 08:28 AM <DIR> libexec 01/18/2014 08:28 AM <DIR> sbin 01/18/2014 08:28 AM <DIR> share 0 File(s) 0 bytes

Starting a Single Node (pseudo-distributed) Cluster

모르겠다 일단 따라 하자.

D:\hadoop-2.4.1\etc\hadoop\hadoop-env.cmd 파일을 열고 마지막 줄 밑에 추가한다.

set HADOOP_PREFIX=D:\hadoop-2.4.1
set HADOOP_CONF_DIR=%HADOOP_PREFIX%\etc\hadoop
set YARN_CONF_DIR=%HADOOP_CONF_DIR%
set PATH=%PATH%;%HADOOP_PREFIX%\bin

같은 경로의 core-site.xml 파일도 아래와 같이 수정

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://0.0.0.0:19000</value>
  </property>
</configuration>

같은 경로의 hdfs-site.xml 파일도 아래와 같이 수정

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>

slaves 파일도 아래와 같은지 확인

localhost

YARN Configuration

D:\hadoop-2.4.1\etc\hadoop\mapred-site.xml 파일을 수정
그런데 이파일 이 없다면.. mapred-site.xml.template파일을 복사하여 mapred-site.xml 로 이름을 바꾼다
%USERNAME% 부분을 사용하는 WINDOWS 유저 이름을 넣습니다.

<configuration>

   <property>
     <name>mapreduce.job.user.name</name>
     <value>%USERNAME%</value>
   </property>

   <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
   </property>

  <property>
    <name>yarn.apps.stagingDir</name>
    <value>/user/%USERNAME%/staging</value>
  </property>

  <property>
    <name>mapreduce.jobtracker.address</name>
    <value>local</value>
  </property>
 
</configuration>

마지막으로 yarn-site.xml 파일 수정

<configuration>

<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>127.0.0.1:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>127.0.0.1:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>127.0.0.1:8031</value> </property> </configuration>


Windows SDK 7.1 Command Prompt 실행

Select Start --> All Programs --> Microsoft Windows SDK v7.1 and open Windows SDK 7.1 Command Prompt

ex) haddop 경로 D:\hadoop-2.4.1

환경변수 세팅
D:\hadoop-2.4.1\etc\hadoop\hadoop-env.cmd

파일시스템 포맷
D:\hadoop-2.4.1\bin>hdfs namenode -format

에러가 없는지 확인. 

완료가 되면 ex) D:\tmp 디렉토리에 파일시스템이 생깁니다. 

Start HDFS Daemons

D:\hadoop-2.4.1\sbin\start-dfs.cmd

두개의 창이 뜹니다. title을 보면 하나는 namenode, 하나는 datanode 라 되어있는것을 확인할수 있다.
namenode는 메타데이터를 가지고 있고 datanode는 데이터를 가지고 있는것 같다.


http://localhost:50070/ 로 접속을 해보면 dfshealth.html 페이지를 확인 할수 있다.
utilities > browse the file system 으로 file 시스템을 확인 할수 있는데 인상  깊다.

MapReduce Job 실행에 필요한 디렉토리 생성

D:\hadoop-2.5.0\bin>hdfs dfs -mkdir /user

D:\hadoop-2.5.0\bin>hdfs dfs -mkdir /user/khlee

**여기서 만들어진 디렉토리를 위에서 설명한  http://localhost:50070/ 
utilities > browse the file system 에서 확인 할 수 있습니다.

hadoop home 으로 이동 후 아래 명령어 수행
분산 파일 시스템에 입력 파일을 복사
D:\hadoop-2.5.0> hdfs dfs -put etc/hadoop input


HDFS Daemon이 잘 동작하는지 확인해 보자.
아래 myfile.txt 는 미리 생성해놓는다.

D:\hadoop-2.4.1\bin>hdfs dfs -put myfile.txt /

D:\hadoop-2.4.1\bin>hdfs dfs -ls /

아래와 같이 나오면 된듯?

그밖에 많은 하둡 명령어 들이 있다.

http://hadoop.apache.org/docs/r0.18.3/hdfs_shell.html 참조


다음은 맵리듀스 예제. 

먼저 yarn을 실행

D:\hadoop-2.5.0\sbin> start-yarn.cmd


D:\hadoop-2.5.0>hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar grep input output 'dfs[a-z.]+'

hadoop을 찾을 수 없다면 etc/hadoop/hadoop-env 를 실행하고 해보자

yarn을 실행 시키고 http://localhost:8088/ 에 접속라면 리소스매니저라는 웹 페이지가 있다. 


sbin/hadoop-all 을 열어보면 hdfs , yarn이 실행 되는것을 볼때.

하둡은 이 두가지 서비스 라는것으로 볼 수 있다. 


HDFS : Hadoop Distributed File System

http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html

YARN : Apache Hadoop NextGen MapReduce (YARN)

http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html












'Hadoop' 카테고리의 다른 글

flume 정리.  (0) 2014.10.08
windows 에서 hadoop 설치  (3) 2014.08.13
Posted by 마법수정화살
,
빅데이터 컴퓨팅 기술을 배우려면 하둡은 필수!

뭔지 모르겠지만 일단 설치시작해보자!


windows에서 hadoop 설치는 고난의 연속이라고 들은 적이 있으나 스터디가 목적이므로 강행 하였다. 

일단 : http://hadoop.apache.org/ 에 접속하여 살펴보기.

사용법이 리눅스 기준이네... 


windows 에서 빌드하려면 http://wiki.apache.org/hadoop/Hadoop2OnWindows 를 참조하라고 한다. 

그럼 설치 시작!

1. 지원하는?(테스트 해본, 될것같은) windows버전 이다. 

Windows Server 2008
Windows Server 2008 R2 
Windows Vista
Windows 7

설치하면서 찾아보니 Windows8 에서도 설치하는 사람이 많은것으로 보아 windows8 에서도 잘 되는듯 하다. 

2. Java 설치 JAVA_HOME 세팅

- Oracle JDK 1.6, 1.7 에서 테스트 됨. 
- JAVA_HOME을 잡을때 경로에 space가 들어가지 않도록 주의!

3. Hadoop sources 다운로드

다운로드 : http://apache.tt.co.kr/hadoop/common/hadoop-2.5.0/
일단 무조껀 최신버전! 2.5.0 src를 받았다. 

잘 진행되고 있군... 압축을 풀어보니 maven 프로젝트네 ㅋㅋㅋ 별거아니지.. 하고 빌드 시작.. 


이제부터 난이도 상승...

http://wiki.apache.org/hadoop/Hadoop2OnWindows 페이지에 

2.4를 보면 BUILDING.txt 파일을 보고 빌드에 필요한 환경을 설정 하라는 식으로 글이 있다. 

쭉 보다보면 Building on Windows 이라고 써있는 것이 보인다. 

Requirements:

* Windows System
* JDK 1.6+
* Maven 3.0 or later
* Findbugs 1.3.9 (if running findbugs)
* ProtocolBuffer 2.5.0
* Windows SDK or Visual Studio 2010 Professional
* Unix command-line tools from GnuWin32 or Cygwin: sh, mkdir, rm, cp, tar, gzip
* zlib headers (if building native code bindings for zlib)
* Internet connection for first build (to fetch all Maven and Hadoop dependencies)

처음 보면서 든생각.

1. windows system -> 당연하지 windows 설치 요구사항이니까..ㅋㅋ 
2. JDK1.6+ -> 이미 설치 되어있네 패쓰 
3. Maven 3.0 or later -> 이미 설치 되어있네 패쓰
4. Findbugs 1.3.9(if running findbugs) -> 정적분석툴.. 안쓸거니까 skip 해도될듯?
5. ProtocolBuffer 2.5.0 -> 구글에서 만든 오픈소스 직렬화 라이브러리 라고 책에나오네.. 이걸 쓰는구나..
6. Windows SDK or Visual Studio 2010 Professional -> 뭐지 이거 모르겠다 비쥬얼 스튜디오 비싸지 않나?
7. Unix command-line tools from GnuWin32 or Cygwin : sh, mkdir, rm, cp, tar, gzip -> 이게 필요하구나.. 난 CygWin이 이미 설치되어 있지 후훗..
8. zlip headers (if building native code bindings for zlib) -> 이건 뭐지?
9 internet connection for first build -> maven 빌드할때 central repository에서 받아와야 되니까 필요하겠지

모르겠는건 빼고 일단 빌드 해보자 하다가 낭패를 당하게 되었다.
하나하나 빌드에 꼭 필요한 중요한 것들이었다. 간과 하면 안된다.
BUILDING.txt를 꼼꼼히 읽었다면 많은 시행착오를 피할수 있었을 것이다.


1. Hadoop 빌드 전에 필요한 것들 설치하기

1. JAVA 설치 : http://oracle.com

2. MAVEN 설치 : https://cygwin.com/install.html

3. Cygwin. 설치:http://maven.apache.org/download.cgi

4. Microsoft Windows SDK v7.1. 설치 : http://www.microsoft.com/en-in/download/details.aspx?id=8279

5. Protocol Buffers 2.5.0 다운받아 압축풀기 : http://protobuf.googlecode.com/files/protoc-2.5.0-win32.zip

- ex) D:\install\protoc-2.5.0-win32

6. zlib 압축 풀기 : http://www.zlib.net/

- ex) D:\install\zlib128-dll

어짜피 에러나면 설치해야 하니 미리 설치하는것이 좋다.


JAVA_HOME 설정, M2_HOME(안해도 됨), Platform 환경 변수 세팅.

set Platform=x64 (when building on a 64-bit system)

set Platform=Win32 (when building on a 32-bit system)

이 값은 (case-sensitive) 대소문자를 구별하므로 주의 합시다!

"Platform" O

"PLATFORM" X 

"platform" X

Environment Variables - JAVA_HOME, M2_HOME and Platform


CygWin, maven, ProtocolBuffer 디렉토리를 path 에 등록 exe가 있는 디렉토리를 등록해야 한다.


PATH Variable - Cygwin & Protocol Buffers


다운로드 받은  hadoop-2.4.1-src.tar.gz 의 압축을 풀고 위치를 정해 카피헤 놓는다.

ex) D:\install\hadoop-2.4.1-src


2. maven 빌드 하기. 


command안된다, Cywin 안된다. Windows SDK 7.1 Command Prompt 를 사용해야 한다. 

windows SDK7.1 을 설치 했다면 아래 경로에 실행파일이 있을 것이다.

Select Start --> All Programs --> Microsoft Windows SDK v7.1 and open Windows SDK 7.1 Command Prompt


D:\install\hadoop-2.4.1-src 경로로 이동 후 아래 명령어 입력

mvn package -Pdist,native-win -DskipTests -Dtar


빌드중.......


아마 에러가 날것 이다. 

에러 로그 조금 위를 보면 cannot open include file zlib.h windows 이런 내용?이 있다 컴파일 에러...

c 컴파일 하다가 에러나네.. 아.. 뭐지..

D:\install\zlib128-dll 디렉 토리를 보면 include 디렉토리에 있는 zlib.h,zconf.h 를 복사하여 

D:\install\zlib128-dll 디렉토리에 복사 하고 다시 실행 하니 잘된다.


다시빌드.. 이건또 뭔 에러여..

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.8.1:jar (module-javadocs) on project hadoop-common: ArchiverException: Error while creating archive: Problem creating jar: D:\install\hadoop-2.4.1-src\hadoop-common-project\hadoop-common\target\hadoop-common-2.4.1\bin\hadoop.dll (액세스가 거부되었습니다) -> [Help 1]

이런 경험을 몇번 해본 사람이라면 아래의 행동을 취할것 이다. 

1. 당황하지 않고 관리자 권한으로 실행

2. 해당 디렉토리의 사용자 권한 세팅

D:\install\hadoop-2.4.1-src 우클릭 > 속성 > 보안 > 사용자별 권한 모두 


그런데 안된다...


우린 이미 Cywin을 path에 넣었다 

D:\install 디렉토리로 이동 chmod -R 777 hadoop-2.4.1-src 


다시 빌드 ... 우왕 성공! 


시행 착오들

Execute failed: java.io.IOException: Cannot run program "sh"

-> cygwin을 path에 등록 하자.


'protoc --version' did not return a version

-> ProtocolBuffer 를 다운받고 path에 등록 하자. 


Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2:exec (compile-ms-winutils) on project hadoop-common: Command execution failed. Cannot run program "msbuild" (in directory "D:\install\hadoop-2.4.1-src\hadoop-common-project\hadoop-common"): CreateProcess error=2 ~~~ 

-> maven 명령어를 command나 cygwin에서 실행 하면 안된다. 
Windows SDK 7.1 Command Prompt 를 사용해야 한다.

http://www.srccodes.com/p/article/38/build-install-configure-run-apache-hadoop-2.2.0-microsoft-windows-os -> 이형네 스크린샷을 퍼왔습니다. 

'Hadoop' 카테고리의 다른 글

flume 정리.  (0) 2014.10.08
windows 에서 hadoop 시작 하기.  (0) 2014.08.14
Posted by 마법수정화살
,