본문 바로가기

Cloud, Bigdata, AI/Big Data Analysis

[Hadoop] 하둡 예제 실행 삽질기

반응형

하둡은 역시 삽질해야 제맛인듯 하다.

wordcount 예제를 실행햐려고 했는데 jar 파일을 도저히 찾을 수가 없었다.

 

$ find / -name hadoop-examples-2.8.1.jar 2>/dev/null
$ 

 

...

그래서 열심히 구글링을 했는데 뭐가 설치가 안된거다, 설정이 잘못된거다, 등등 해서 하라는대로 다 했더니 설정파일 꼬여서 작동이 안되는거다.

수습불가 상태에 이르러 재설치를 하기를 두번... ㅂㄷㅂㄷ

 

그런데 갑자기 이런 방법이 생각났다.

$ cd $HADOOP_HOME $ find ./ -name *.jar 2>/dev/null ./share/hadoop/hdfs/sources/hadoop-hdfs-native-client-2.8.1-sources.jar ./share/hadoop/hdfs/sources/hadoop-hdfs-client-2.8.1-sources.jar ./share/hadoop/hdfs/sources/hadoop-hdfs-client-2.8.1-test-sources.jar ./share/hadoop/hdfs/sources/hadoop-hdfs-native-client-2.8.1-test-sources.jar ./share/hadoop/hdfs/sources/hadoop-hdfs-2.8.1-sources.jar ./share/hadoop/hdfs/sources/hadoop-hdfs-2.8.1-test-sources.jar ./share/hadoop/hdfs/hadoop-hdfs-client-2.8.1.jar ./share/hadoop/hdfs/hadoop-hdfs-2.8.1.jar ./share/hadoop/hdfs/hadoop-hdfs-client-2.8.1-tests.jar (...) ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/log4j-1.2.17.jar ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/activation-1.1.jar ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/xmlenc-0.52.jar ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/netty-3.6.2.Final.jar ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/commons-beanutils-core-1.8.0.jar ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/jackson-xc-1.9.13.jar ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/commons-digester-1.8.jar ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/commons-beanutils-1.7.0.jar ./share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/jcip-annotations-1.0.jar $

 

 

이중에 찾으면 있을까 싶은 마음이 생겼다. 그런데 하나하나 보기에는 너무 많아서 한번 더 걸러보았다.

$ find ./ -name *examples*.jar 2>/dev/null
./share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.8.1-test-sources.jar
./share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.8.1-sources.jar
./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar
$

 

혹시 맨 아래 꺼인가? 하고 wordcount 예제를 실행해보았다.

$ hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount
Usage: wordcount <in> [<in>...] <out>
$

 

이거다! 그동안 참고했던 포스팅들을 보고 jar파일 이름을 거기에 나온대로만 찾았었는데 버전이 바뀌면서 jar파일 이름도 바뀌었었나보다...ㅠ

wordcount 예제를 이제 본격적으로 실행해본다. wordcount 예제는 이름 그대로 텍스트파일의 글자수를 세어주는 프로그램인데 하둡에서의 Hello, World! 예제 정도로 생각하면 된다.

먼저 글자수를 셀 대상파일이 필요하다. 여기서는 오바마 연설문 파일을 사용한다.

 

여기서 텍스트파일 입력을 할 디렉토리를 생성해야 한다.

하둡내에는 고유의 파일시스템을 가지고 있는데 그곳에 디렉토리를 생성하여야 한다. 그냥 쉘에서 mkdir 하면 안된다.

좀 더 정확히는 하둡 1버전은 하둡과 리눅스간 파일시스템에 상호 구분 없었으나 2버전부터 분리된 듯 하다.

아직도 1버전 기준으로 쓰여진 포스팅이 인터넷 상에 많아서 혼란스러울 수 있으니 주의가 필요하다.

 

$ hadoop fs -ls /
$ hadoop fs -mkdir /input
$ hadoop fs -put ./obama.txt /input
$ hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount /input/obama.txt /output
17/09/28 16:40:37 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.110.1:8040
17/09/28 16:40:38 INFO input.FileInputFormat: Total input files to process : 1
17/09/28 16:40:38 INFO mapreduce.JobSubmitter: number of splits:1
17/09/28 16:40:38 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1506580183921_0001
17/09/28 16:40:39 INFO impl.YarnClientImpl: Submitted application application_1506580183921_0001
17/09/28 16:40:39 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1506580183921_0001/
17/09/28 16:40:39 INFO mapreduce.Job: Running job: job_1506580183921_0001
17/09/28 16:40:52 INFO mapreduce.Job: Job job_1506580183921_0001 running in uber mode : false
17/09/28 16:40:52 INFO mapreduce.Job:  map 0% reduce 0%
17/09/28 16:41:01 INFO mapreduce.Job:  map 100% reduce 0%
17/09/28 16:41:10 INFO mapreduce.Job:  map 100% reduce 100%
17/09/28 16:41:11 INFO mapreduce.Job: Job job_1506580183921_0001 completed successfully
17/09/28 16:41:11 INFO mapreduce.Job: Counters: 49
	File System Counters
		FILE: Number of bytes read=13642
		FILE: Number of bytes written=299913
		FILE: Number of read operations=0
		FILE: Number of large read operations=0
		FILE: Number of write operations=0
		HDFS: Number of bytes read=13510
		HDFS: Number of bytes written=9549
		HDFS: Number of read operations=6
		HDFS: Number of large read operations=0
		HDFS: Number of write operations=2
	Job Counters 
		Launched map tasks=1
		Launched reduce tasks=1
		Data-local map tasks=1
		Total time spent by all maps in occupied slots (ms)=7017
		Total time spent by all reduces in occupied slots (ms)=5368
		Total time spent by all map tasks (ms)=7017
		Total time spent by all reduce tasks (ms)=5368
		Total vcore-milliseconds taken by all map tasks=7017
		Total vcore-milliseconds taken by all reduce tasks=5368
		Total megabyte-milliseconds taken by all map tasks=7185408
		Total megabyte-milliseconds taken by all reduce tasks=5496832
	Map-Reduce Framework
		Map input records=69
		Map output records=2413
		Map output bytes=23030
		Map output materialized bytes=13642
		Input split bytes=99
		Combine input records=2413
		Combine output records=1030
		Reduce input groups=1030
		Reduce shuffle bytes=13642
		Reduce input records=1030
		Reduce output records=1030
		Spilled Records=2060
		Shuffled Maps =1
		Failed Shuffles=0
		Merged Map outputs=1
		GC time elapsed (ms)=183
		CPU time spent (ms)=1550
		Physical memory (bytes) snapshot=315613184
		Virtual memory (bytes) snapshot=3862253568
		Total committed heap usage (bytes)=139718656
	Shuffle Errors
		BAD_ID=0
		CONNECTION=0
		IO_ERROR=0
		WRONG_LENGTH=0
		WRONG_MAP=0
		WRONG_REDUCE=0
	File Input Format Counters 
		Bytes Read=13411
	File Output Format Counters 
		Bytes Written=9549
$

 

 

위와같이 실행결과가 잘 뜬다면 실행이 잘 된 것이다.

wordcount의 output파일은 당연히 각 단어가 파일에서 몇번 등장하였는지 보여주는 파일일 것이다.

그런데 앞에서도 이야기했지만 하둡 고유의 파일시스템에 저장을 하였으므로 리눅스의 디렉토리에서는 아무리 ls, find해봤자 output파일을 찾을 수 없다. (실제로 해본 1인)

 

$ hadoop fs -ls /output/
Found 2 items
-rw-r--r--   3 witlab supergroup          0 2017-09-28 16:41 /output/_SUCCESS
-rw-r--r--   3 witlab supergroup       9549 2017-09-28 16:41 /output/part-r-00000

fs는 filesystem의 약자이고, -ls의 ls는 리눅스의 ls와 같다. 즉 하둡 파일시스템에서 ls 명령을 한 것이다.

저기 밑에 있는 파일을 열어보자.

$ hadoop fs -cat /output/part-r-00000
"Let	1
-	23
Afghanistan.	1
All	1
America	5
America's	2
America.	3
American	1
American,	1
Americans	2
Americans.	1
And	6
Arlington	1
As	2
At	2
Bush	1
But	3
Christians	1
Concord	1
Domestic	1
Earth.	1
Earth;	1
Fathers,	1
For	8
(...)
world...that	1
worldly	1
worn	1
would	1
wrong	1
year	1
year.	1
years	1
yes,	1
yet,	1
you	12
you.	2
young	1
your	3
$

 

 

위와같이 결과를 확인할 수 있다.

오늘의 삽질 끝!

반응형