2014년 9월 29일 월요일

HDFS 살펴보기 1


  • WordCount 실습해보기



1. conf/core-site.xml을 수정한다.
  ===============================================================
   <configuration>
   <property>
   <name>hadoop.tmp.dir</name>
   <value>[경로 설정]</value>
   #경로 설정 부분은 접근 설정이 가능한 권한을 부여해줘야 한다.
   </property>
   <property>
   <name>fs.default.name</name>
   <value>hdfs://localhost:9000</value>
   </property>
   </configuration>
  ===============================================================

2. Hadoop에서 예제로 사용할 파일을 복사한다.
> cd $HADOOP_HOME HADOOP_HOME으로 이동한다
> hadoop fs -mkdir /input input 폴더를 생성한다
> hadoop fs -copyFromLocal README.txt /input HADOOP_HOME 내부에 README.txt파일을 input폴더 내부로 복사한다
> hadoop fs -ls /input input폴더 내부를 확인해본다


3. 복사한 파일의 word를 count한다.
> hadoop jar hadoop-example-1.0.3.jar wordcount /input/README.txt /output hadoop-example-1.0.3.jar에 있는 wordcount를 이용하여 /input/README.txt파일을 카운트한다.
그리고 /output폴더에 결과를 출력해준다.
> hadoop fs -cat /output/part-r-00000|more 출력된 결과를 확인해본다.


  • Error 내용 정리

   : 직접 경험한 에러 내용만 정리

  • NameNode 생성이 되지 않음 : core-site.xml 파일을 확인한다.
  • NullPointException Error
- hadoop 임시 폴더로 지정한 폴더 삭제, namenode 포맷 후 다시 진행한다. 

  • JAVA_HOME is not set
- conf/hadoop-env.sh 파일 내용 수정
> sudo nano hadooop-env.sh
 ================================================================
  (생략)
  #현재 설치된 자바의 홈을 지정해준다.
  export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
  (생략)
 ================================================================


  • Hadoop 명령어 간단 정리

FORM> hadoop fs -[command]

  [정보/출력]
   ls : 현재 디렉토리 정보를 나열한다.
   lsr : 현재 디렉토리 목록과 하위디렉토리 정보를 나열한다.
   du : 디렉토리나 파일의 사용량을 확인하는 명령 바이트 단위로 결과 출력한다.
   dus : 디렉토리 전체의 합계용량을 출력한다.
   cat : 테스트파일의 내용을 표시한다.
   text : 테스트파일뿐 아니라 zip파일 형태의 내용도 표시한다.
   tail : 파일의 마지막 1kb의 내용을 화면에 출력한다.(로그파일의 마지막라인 확인)
   count : 지정경로에 대한 파일갯수 디렉토리갯수 전체파일사이즈를 출력한다.
            -q옵션을 사용할 경우 디렉토리의 파일 용량제한 정보를 조회할 수 있습니다.

  [생성]
   mkdir : 디렉토리를 생성한다.
   touchz : 0바이트 파일을 생성합니다.

  [삭제]
   rm : hdfs 디렉토리나 파일을 삭제한다.
        디렉토리는 반드시 비어있는 경우만 삭제할 수 있다.
   rmr : 비어있지 않은 디렉토리는 rmr로 삭제할 수 있다.

  [이동/복사]
   mv : hdfs의 파일이나 디렉토리를 이동 합니다.
   cp : hdfs간에 소스디렉토리 및 파일을 목적지로 복사한다.

   (목적지 디렉토리가 없을 경우엔 디렉토리를 생성)
   put : 로컬의 파일 및 디렉토리를 목적지 경로로 복사한다.      
   get : hdfs의 파일 및 디렉토리를 로컬의 목적지로 복사한다.

  [변경]
   (-R옵션을 주면 해당 디렉토리에 포함된 파일이나 디렉토리까지 변경)
   chmod : 지정한 파일이나 디렉토리에 대해 권한을 변경합니다.            
   chown : 지정한 파일이나 디렉토리의 소유권을 변경합니다.
           


  • WordCount for Java


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class WordCount {
public static void main(String[] args) {
TreeMap<String, Integer> data = new TreeMap<String, Integer>();
Mread(data);
MprintCNT(data);
}
public static int MCount(String word, TreeMap<String, Integer> data) {
if (data.containsKey(word)) {
return data.get(word);
} else {
return 0;
}
}
public static void MprintCNT(TreeMap<String, Integer> data) {
for (String word : data.keySet()) {
System.out.println("단어(" + word + ") : 카운트 숫자(" + data.get(word)
+ ")");
}
}
public static void Mread(TreeMap<String, Integer> data) {
Scanner sc = null;
String word = null;
int count = 0;
String path = null;
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
System.in));
try {
System.out.print("읽고 싶은 파일의 경로를 입력하세요 : ");
path = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
sc = new Scanner(new FileReader(path));
while (sc.hasNext()) {
word = sc.next();
count = MCount(word, data) + 1;
data.put(word, count);
}
} catch (FileNotFoundException e) {
System.err.println(e);
return;
} finally {
sc.close();
}
}
}

댓글 없음:

댓글 쓰기