신고

'03.Build Process' 카테고리의 다른 글

Maven Default Properties  (0) 2012.06.29
Hudson Remote Run API  (0) 2012.05.17
Maven Dependency Version Range  (0) 2012.05.11
Hudosn을 통한 Maven depoly => Nexus  (0) 2012.02.17
package emma:emma 의 goal 은 Test를 2번한다?  (0) 2012.01.02
Jenkins plugin Install (Emma, N'SIQ)  (0) 2011.12.26
Posted by Stewie

JMX Url

01.Java 2012.04.02 10:35

기본적으로 JMX에서 사용하는 url 형태는 다음과 같다.

service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi


하지만 실질적으로 JMX에서 이용되는 port는 2가지인데 다음과 같다.

service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi


service되는 서버에 방화벽 설정이 필요하다면 다음과 같이 두 port를 모두 열어주어야 한다.

첫번째처럼 설정한다면 JMX_RMI_SERVER_PORT는 가변적으로 설정이 되어 block당할 수 있다.


출처 : http://stackoverflow.com/questions/2768087/explain-jmx-url


신고

'01.Java' 카테고리의 다른 글

Arrays.asList의 UnsupportedOperationException  (1) 2012.09.05
Apache Flume-NG structure  (0) 2012.07.18
JMX Url  (0) 2012.04.02
run Hadoop Mapreduce Job Remotely(Cluster)  (0) 2012.03.13
Exception Handling vs. Error Logging  (0) 2012.02.14
JUnit Test. 그리고 Stub, Mock  (0) 2011.12.27
Posted by Stewie
4시간이나 걸렸다. -_- 이거 하나를 하기 위해 얼마나 검색능력과 영어 속독력이 필요한지 다시 한번 실감했다.

<배경>
client에서 물리적으로 다른 서버에 위치한 Hadoop Cluster에 Job 실행 명령을 내리고 싶다.

<초기 의문점>
-Job을 이루는 Mapper/Reducer 등은 어디에 위치해야 하는가? (Hadoop Cluster에? Client에? 아니면 두군데 동시?)
-Jar형태로 배포가 되어야 하는가? Eclipse에서 실행해보기 위해서는 어떻게 해야하는가?


 <출처 :  http://helloworld.naver.com/helloworld/1250 >

위 그림과 같이 간단한 Process의 흐름을 알 수있다. 내가 처음에 가장 의문이 들었던 점은 과연 Tasktracker의 JVM이 어떻게 Client측의 Map Reduce를 인식할 수 있느냐 이다.

다음은 Sample 코드 이다.


public class WordCountDriver {

	public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {

		Configuration conf = new Configuration();
		conf.set("fs.default.name", "hdfs://sample:8020");
		conf.set("mapred.job.tracker", "hdfs://sample:8021");

		Job job = new Job(conf, "wordcount");
		job.setWorkingDirectory(new Path("/log"));
		job.setMapperClass(WordCountMapper.class);
		job.setReducerClass(WordCountReducer.class);
		job.setJarByClass(WordCountDriver.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);

		job.setInputFormatClass(TextInputFormat.class);
		job.setOutputFormatClass(TextOutputFormat.class);

		FileInputFormat.addInputPath(job, new Path("/log/input.log"));
		FileOutputFormat.setOutputPath(job, new Path("/log/output.log"));

		System.out.println(job.waitForCompletion(true));
	}

}


public class WordCountMapper extends Mapper<longwritable, text,="" intwritable=""> {
	private Text word = new Text();
	private final static IntWritable one = new IntWritable(1);

	protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
		String line = value.toString();
		StringTokenizer tokenizer = new StringTokenizer(line);
		while (tokenizer.hasMoreTokens()) {
			word.set(tokenizer.nextToken());
			context.write(word, one);
		}
	}
}


public class WordCountReducer extends Reducer<text, intwritable,="" text,="" intwritable=""> {
	protected void reduce(Text key, Iterable<intwritable> values, Context context) throws IOException,
		InterruptedException {
		int sum = 0;
		for (IntWritable value : values) {
			sum += value.get();
		}
		context.write(key, new IntWritable(sum));
	}
}




결론 부터 말하자면 Job 이라는 Class의  setJarByClass 이 메서드가 Key Point다. 메서드를 통해 명시한 class파일이 포함된 jar가 Jobtracker로 전달이 되고 그것을 통해 Job이 excute되는 것이기 때문에 그 jar안에 필요한 Mapper나 Reducer가 모두 존재 해야 한다.

만약 Eclipse에서 실행하고자 한다면 Project를 Jar로 Packaging 한 뒤에 그것을 스스로 참조(self reference)하여 그 class를 활용하는 형태로 실행을 해야 

경고: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String). 

다음과 같은 문구가 뜨지 않는다. 

테스트한 Hadoop version은 0.20.203.0이며 최근 release된 1 버전에서도 아마 같지 않을 까 생각한다. 

PS. java source css좀 바꿔야겠다 -.,- 

<참고>
http://stackoverflow.com/questions/3912267/hadoop-query-regarding-setjarbyclass-method-of-job-class 
http://search-hadoop.com/m/R7Uxr1dp4h&subj=setJarByClass+question 
http://helloworld.naver.com/helloworld/1250 
 
신고

'01.Java' 카테고리의 다른 글

Apache Flume-NG structure  (0) 2012.07.18
JMX Url  (0) 2012.04.02
run Hadoop Mapreduce Job Remotely(Cluster)  (0) 2012.03.13
Exception Handling vs. Error Logging  (0) 2012.02.14
JUnit Test. 그리고 Stub, Mock  (0) 2011.12.27
java.io.FilenameFilter 활용  (0) 2011.08.09
Posted by Stewie


티스토리 툴바