Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

하둡명령어로 삭제하기(fs -rm)

BigDATA/Hadoop 2016.12.06 17:12
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



하둡 hdfs 삭제 하기! 
#!/bin/bash 
# 주기적으로 hdfs 데이터를 삭제한다. 
# crontab 에 등록하여 실행시킨다. 
# 2일 전 데이터 삭제 
date=`date -d "2 days ago" "+%Y%m%d"` 
/home/acet/program/hadoop/bin/hadoop fs -rm -r -skipTrash "/HADOOP경로/하둡path/*.txt.$date*" 

# 하둡 temp 데이터 삭제 
find /home/acet/data/ -ctime +2 -type f -exec rm -f {} \;



저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

hadoop distcp

BigDATA/Hadoop 2016.10.28 11:17
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


$ ./hadoop distcp

usage: distcp OPTIONS [source_path...] <target_path>

              OPTIONS

 -append                       Reuse existing data in target files and

                               append new data to them if possible

 -async                        Should distcp execution be blocking

 -atomic                       Commit all changes or none

 -bandwidth <arg>              Specify bandwidth per map in MB

 -delete                       Delete from target, files missing in source

 -diff <arg>                   Use snapshot diff report to identify the

                               difference between source and target

 -f <arg>                      List of files that need to be copied

 -filelimit <arg>              (Deprecated!) Limit number of files copied

                               to <= n

 -filters <arg>                The path to a file containing a list of

                               strings for paths to be excluded from the

                               copy.

 -i                            Ignore failures during copy

 -log <arg>                    Folder on DFS where distcp execution logs

                               are saved

 -m <arg>                      Max number of concurrent maps to use for

                               copy

 -mapredSslConf <arg>          Configuration for ssl config file, to use

                               with hftps://

 -numListstatusThreads <arg>   Number of threads to use for building file

                               listing (max 40).

 -overwrite                    Choose to overwrite target files

                               unconditionally, even if they exist.

 -p <arg>                      preserve status (rbugpcaxt)(replication,

                               block-size, user, group, permission,

                               checksum-type, ACL, XATTR, timestamps). If

                               -p is specified with no <arg>, then

                               preserves replication, block size, user,

                               group, permission, checksum type and

                               timestamps. raw.* xattrs are preserved when

                               both the source and destination paths are

                               in the /.reserved/raw hierarchy (HDFS

                               only). raw.* xattrpreservation is

                               independent of the -p flag. Refer to the

                               DistCp documentation for more details.

 -sizelimit <arg>              (Deprecated!) Limit number of files copied

                               to <= n bytes

 -skipcrccheck                 Whether to skip CRC checks between source

                               and target paths.

 -strategy <arg>               Copy strategy to use. Default is dividing

                               work based on file sizes

 -tmp <arg>                    Intermediate work path to be used for

                               atomic commit

 -update                       Update target, copying only missingfiles or

                               directories

저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

(info) vagrant commands

BigDATA/Hadoop 2015.02.04 10:58
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



내역

1. 로컬에서 하둡을 간단히 돌려서 프로그래밍을할 수 있는 환경을 만들고 싶음.

2. vagrant로 단일 하둡 셋팅 함.

3. 우분투 관련 오류 발생 함.


오류

recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'. 

http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/



vagrant 명령어

Usage: vagrant [options] <command> [<args>]


    -v, --version                    Print the version and exit.

    -h, --help                       Print this help.


Common commands:

     box             manages boxes: installation, removal, etc.

     connect         connect to a remotely shared Vagrant environment

     destroy         stops and deletes all traces of the vagrant machine

     global-status   outputs status Vagrant environments for this user

     halt            stops the vagrant machine

     help            shows the help for a subcommand

     init            initializes a new Vagrant environment by creating a Vagrantfile

     login           log in to HashiCorp's Atlas

     package         packages a running vagrant environment into a box

     plugin          manages plugins: install, uninstall, update, etc.

     provision       provisions the vagrant machine

     push            deploys code in this environment to a configured destination

     rdp             connects to machine via RDP

     reload          restarts vagrant machine, loads new Vagrantfile configuration

     resume          resume a suspended vagrant machine

     share           share your Vagrant environment with anyone in the world

     ssh             connects to machine via SSH

     ssh-config      outputs OpenSSH valid configuration to connect to the machine

     status          outputs status of the vagrant machine

     suspend         suspends the machine

     up              starts and provisions the vagrant environment

     version         prints current and latest Vagrant version

저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[꿀팁] 하둡 inputPath로 다중 File 작업하기

BigDATA/Hadoop 2015.02.04 10:50
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


[그림 - 1 : 안구정화용~~]


// 참고 소스~~


// 아래처럼 path 들을 list에 넣어준다.

List<String> inputPath = new ArrayList<String>();
inputPath.add(otherArgs[0]+"/01_acet.clicklog_mo");
inputPath.add(otherArgs[0]+"/02_acet.clicklog_mo");


// 입출력 데이터 경로 설정
//FileInputFormat.addInputPath(job, new Path(otherArgs[0]));

for(String input : inputPath){ // list에 담겨져있는 path들을 하나씩 넣어준다.
FileInputFormat.addInputPath(job, new Path(input));
}


나의 의문은 현재 하나의 파일을 input하여 output을 하는 단순한 맵-리듀스 프로그래밍을 했다.

그런데 input되는 파일이 하나가 아니라면? 경로를 어떻게 해줘야 많은 파일들을 처리할 수 있을까?

답은 위처럼 for을 돌려서 Path에 경로들을 넣어주면 돌아간다~


     - END -

저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[Hadoop] 하둡 맵-리듀스 따라잡기

BigDATA/Hadoop 2015.02.02 13:32
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



맵-리듀스! 이녀석을 알아가기 위해 정리를 하나씩 해보려고 한다.

가장 쉬우면서도 어려운 맵-리듀스 소스 짜보기!


1. Maven 설정

 

<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.1</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>


2. runner : runner는 우선 map, reduce, data format등 그리고 run을 통해 시작 시킬수 있는 친구라고 생각하고 넘어가자.
아래의 소스는 가장 단순한 형태 이다. 보통 책에 나오거나 튜토리얼에 나오는 소스 형태! 중요한 것은 runner보다 map과reduce!

public class MoClickDistributionChartRunner extends Configured implements Tool {

public MoClickDistributionChartRunner() {
}

@Override
public int run(String[] args) throws Exception {

String[] otherArgs = new GenericOptionsParser(getConf(), args).getRemainingArgs();

// 입출력 데이터 경로 확인
if (otherArgs.length != 2) {
System.err.println("Usage: MoClickDistributionChartRunner <in> <out>");
System.exit(2);
}

// Job 이름 설정
Job job = new Job(getConf(), "MoClickDistributionChartJob");

// 입출력 데이터 경로 설정
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));

// Job 클래스 설정
job.setJarByClass(MoClickDistributionChartJob.class);

// Mapper 클래스 설정
job.setMapperClass(MoClickDistributionChartMapper.class);
// Reducer 클래스 설정
job.setReducerClass(MoClickDistributionChartReducer.class);


// 입출력 데이터 포맷 설정
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);

// 출력키 및 출력값 유형 설정
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);

job.waitForCompletion(true);

return 0;
}

public static void main(String[] args) throws Exception {
long startTime = System.currentTimeMillis();
// Tool 인터페이스 실행
int res = ToolRunner.run(new Configuration(), new MoClickDistributionChartRunner(), args);
System.out.println("## RESULT:" + res);
}
}

3. Mapper

public class MoClickDistributionChartMapper extends
Mapper<LongWritable, Text, Text, Text> {
// 입출력의 데이터포맷을 알수가 있다.

// map 메소드를 통해 수행 되어지며 key, value의 입력값들이 들어오게 된다.
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException { ..블라블라~.. }}

- key는 라인을 나타내는 숫자형태이며, value는 Text형태의 값들이 들어온다.

- value값을 가지고 파싱하여 vo에 넣을수도 있으며 원하는 값을 가지고 오기 위해 parsing작업을 한다.

// 원하는 값들을 구하여 아래에 context.write를 해주면 output value로 들어가게 된다. Text, Text형태가 될 것이다. context.write(new Text(moSize), new Text(xyNum + "\t1"));


즉, 코딩에 들어가기전에 map과 reduce의 입력과 출력형태의 key, value를 고려하여야 한다.

4. Reducer : 

public class MoClickDistributionChartReducer extends
Reducer<Text, Text, Text, Text> {

protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {


작성 중~~

저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

하둡 configuration으로 객체 넘기기!

BigDATA/Hadoop 2015.01.12 11:32
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



음....하둡 MR작업 중...

configuration에서 객체를 넘겨주고 싶어서 아래와 같이 인터페이스(QueryCodeList)와 구현체(QueryCodeListImpl)을 만든 뒤

setClass를 해주었다..

conf.setClass("queryCodeList", QueryCodeListImpl.class, QueryCodeList.class);

아래처럼 setClass시에 잘 생성 된 것을 알수가 있다.


그런 뒤 getClass를 통해 해당 객체를 가져오려고 하는데...잘안된다 ㅋㅋㅋㅋㅋ 널포인트 예외..ㄷㄷㄷ


 new 연산자를 통해 생성한 뒤에는 getClass로 가져올 수가 있었지만 아무 의미 없다~ 내가 하고자하는 것은 객체에 이미 데이터가 들어가 있는 상태이기 때문이다.

어떻게 해서 객체를 전달할 수 있을까?

1) Job쪽에 사용하고자 하는 객체를 생성 및 setter를 통해 데이터를 넣어줬다.

2) Gson을 통해 객체를 String형태로 만들어준다.

Gson gson = new Gson();    
conf.set("queryCodeList", gson.toJson(queryCodeListImplObject));

3) Map에서 conf.get을 통해 가져온다.

QueryCodeListImpl queryList = gson.fromJson(config.get("queryCodeList"), QueryCodeListImpl.class);

4) 해당 객체를 디버깅해서 보면 setter로 넣은 값들이 잘들어가 있는것을 확인할 수 있다. good~^0^


성능에 영향을 얼마나 줄지..과연!

저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

Hadoop runner수행시 lib 못찾는 현상(IntelliJ 12 사용!)

BigDATA/Hadoop 2015.01.04 21:01
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

아...설상가상으로...인텔리제이를 사용하고 있는데...아래처럼 maven에 설정되어있는 녀석을 못찾아오는 현상이 있었다..ㅜ.ㅜ..


환경 : 인텔리J 12


1) 로컬에서 runner를 수행 하였다. 그런데!!

mapper쪽에서 오류가 났다.

오류내용 ERROR="Error: java\.lang\.ClassNotFoundException: org\.json\.simple\.JSONValue ~




해결은...아래와 같이 빌드 > 빌드 아티팩트즈... 를 통해서 빌드를 한다.


아래와 같이 Artifacts에 json.simple이 있다는 것을 알수가 있다.



Add lib 를 통해서 add시킨다.


command + ; 를 통해 Project Settings를 open한 뒤 아래와 같이 Moudles에 Artifacts에 있는 친구를 Add시켜준다.


+를 누른 뒤 2 Library를 선택하여 추가 해준다.


다시 한번 MapReduce를 돌려본다.


인텔리J로 인해..조금 당황스럽다..ㅎㅎ; 


또한!! maven을 사용하고 있다면 clean -> compile -> install 을 한 뒤에 

Rebuild project 를 한 뒤에 Build Artifacts를 해주어야 적용이 된다.






저작자 표시 비영리 변경 금지
신고

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

사용자 정의 옵션(Tool, ToolRunner)

BigDATA/Hadoop 2014.12.08 14:44
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


하둡은

맵리듀스 프로그램 개발을 편리하게 할수 있도록 다양한 helper class를 제공.

ex) org.apache.hadoop.util package에 구현돼 있음.

  import org.apache.hadoop.util.Tool;
 import org.apache.hadoop.util.ToolRunner;


맵-리듀스 잡을 실행하면

   잡 객체는 사용자가 설정한 Configuration객체를 이용해 org.apache.hadoop.mapred.JobConf 객체를 생성.

      JobConf는 하둡의 환경설정 파일과 하둡 명령어에서 입력한 파라미터를 참조모든 태스크에 이 정보를 제공.


분석 데이터의 종류에 따라 하둡 환경설정 정보와 다른 값을 사용해야 하는 경우가 있을 것입니다.

  이런 불편함을 줄이기 위해 GenericOptionsParser, Tool, ToolRunner 등을 제공.

     이 클래스를 이용해 job을 실행할 때 환경설정 정보를 확인하고, 잡 드라이버 클래스에서 환경설정 정보를 수정.

<< Tool >>
GenericOptionsParser의 콘솔 설정 옵션을 지원하기 위한 인터페이스.
Configuration 클래스를 상속 받으며, 내부적으로 run 메서드가 정의돼 있음.

  org.apache.hadoop.util 
  Interface Tool

  All Superinterfaces:
Configurable
  All Known Implementing Classes:
CLI, InputSampler, InputSampler, JobClient, LogsCLI, MigrationTool, Submitter

ex) 

public class MyApp extends Configured implements Tool { public int run(String[] args) throws Exception { // Configuration processed by ToolRunner

Configuration conf = getConf(); // Create a JobConf using the processed conf JobConf job = new JobConf(conf, MyApp.class); // Process custom command-line options Path in = new Path(args[1]); Path out = new Path(args[2]); // Specify various job-specific parameters job.setJobName("my-app"); job.setInputPath(in); job.setOutputPath(out); job.setMapperClass(MyMapper.class); job.setReducerClass(MyReducer.class); // Submit the job, then poll for progress until the job is complete JobClient.runJob(job); return 0; } public static void main(String[] args) throws Exception { // Let ToolRunner handle generic command-line options int res = ToolRunner.run(new Configuration(), new MyApp(), args); System.exit(res); } }

참고 : http://hadoop.apache.org/docs/r2.3.0/api/org/apache/hadoop/util/Tool.html


<< ToolRunner >>

  A utility to help run Tools.

org.apache.hadoop.util 
Class ToolRunner

java.lang.Object
  extended by org.apache.hadoop.util.ToolRunner

run 호출 시! ret = ToolRunner.run(runner,args);

1) ToolRunner.class 발동!

public static int run(Tool tool, String[] args) throws Exception {
return run(tool.getConf(), tool, args);
}


2) Configuration, Tool, args를 파라미터로 넘겨주며, 안에서는 GenericOptionsParser를 사용!

또한 tool에 있는 run을 실행시켜 준다.

public static int run(Configuration conf, Tool tool, String[] args) throws Exception {
if(conf == null) {
conf = new Configuration();
}

GenericOptionsParser parser = new GenericOptionsParser(conf, args);
tool.setConf(conf);
String[] toolArgs = parser.getRemainingArgs();
return tool.run(toolArgs);
}


만약 Tool, ToolRunner를 사용하지 않고 GenericOptionsParser를 사용할 수도 있음.

1) argument 내용



2) 소스

/**
* Created by terry.park on 2014. 12. 8..
*/
public class AceTest {

public static void main(String[] args) {
Configuration conf = new Configuration();
try {
GenericOptionsParser parser = new GenericOptionsParser(conf, args);
String[] remainingArgs = parser.getRemainingArgs();
for(int i = 0; i < remainingArgs.length; i++) {
System.out.println("["+i+"]=>"+remainingArgs[i]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

3) Result

[0]=>hadoop

[1]=>ConfigurationPrinter

[2]=>-D

[3]=>name=acet

[4]=>|

[5]=>grep

[6]=>company=daumkakao


하지만 더욱 더 편리하게 helper 클래스를 사용하면 된다는 것이다.

단, 사용하려면 extends Configured implements Tool 를 해줘야 한다.

이제 신나는 mr로 고고씽~


- 끝 -




저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

What is MapReduce??

BigDATA/Hadoop 2014.12.02 00:28
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



[wiki]

맵리듀스(MapReduce)는 구글에서 대용량 데이터 처리를 분산 병렬 컴퓨팅에서 처리하기 위한 목적으로 제작하여 2004년 발표한 소프트웨어 프레임워크다.[1] 이 프레임워크는 페타바이트 이상의 대용량 데이터를 신뢰도가 낮은 컴퓨터로 구성된 클러스터 환경에서 병렬 처리를 지원하기 위해서 개발되었다. 이 프레임워크는 함수형 프로그래밍에서 일반적으로 사용되는 MapReduce라는 함수 기반으로 주로 구성된다.[2]

현재 MapReduce는 Java C++, 그리고 기타 언어에서 적용이 가능하도록 작성되었다. 대표적으로 아파치 하둡에서 오픈 소스 소프트웨어로 적용된다.

출처 : http://ko.wikipedia.org/wiki/%EB%A7%B5%EB%A6%AC%EB%93%80%EC%8A%A4


[article] 

구글에서 발표한 논문! (음..13page뿐이 안되네요! 이번주(12월2일~12월7일 까지 읽어볼 계획 입니다^^;)

mapreduce-osdi04.pdf


출처 : http://static.googleusercontent.com/media/research.google.com/ko//archive/mapreduce-osdi04.pdf


MapReduce is a programming model 이라고 한다! 


good article! - 출처 : http://dl.acm.org/citation.cfm?id=1629198


p72-dean.pdf


읽어볼만한 IBM 포스팅 : http://www-01.ibm.com/software/data/infosphere/hadoop/mapreduce/


- 끝 -




저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

부록. 하둡설치(CDH)-클라우데라 배포판

BigDATA/Hadoop 2014.10.07 16:36
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

목표

 - 배포판인 클라우데라 매니저를 통해 하둡2.X 이상 버전 설치, HIVE, TAJO등 SQL ON HADOOP, JOOKEEPER 등 설치


1. 리눅스 설치 - 총 6대 설치

네임노드 1대, 보조네임노드 1대, 데이터노드 3대, etc 1대


ㅇㅅㅇ;;;; 회사에서 iaas가 지원이 되어서 로컬 pc가 아닌 iaas 로 갈아탔다!

로컬셋팅에서의 조금 다른점은 proxy서버를 사용했다는 것이다.


1) ssh설정과 host설정!

    참고  : 2014/09/11 - [BigDATA/Hadoop] - 부록. 하둡 설치


2) proxy설정!(/etc/wgetrc, /etc/yum.conf)

vi /etc/wgetrc

http_proxy = http://ip address:port

ftp_proxy = http://ip address:port


vi /etc/yum.conf

proxy = http://ip address:port


물론 proxy 서버에도 타켓 서버 ip를 넣어줘야한다.

$ vi /daum/program/apache/conf/httpd.conf
.....
<VirtualHost *:9100>
    ServerName 아이피 입니다.
 
    ...
    Allow from ( 여기에 IP 추가 )
    </Proxy>



3) wget으로 클라우데라 인스톨러 가져오기! 

아래는 cdh4 입니다. http://archive.cloudera.com/cm5 로 접근해서 가져오시면 됩니다.

wget http://archive.cloudera.com/cm4/installer/latest/cloudera-manager-installer.bin

$ su
$ chmod +x cloudera-manager-installer.bin

$ ./cloudera-manager-installer.bin 


2. 하둡 설치

잘 따라하시면 됩니다..ㅋㅋ;;;


3. 클러스터 설정 및 노드 설정!(클라우데라 매니저)




참고사항으로 일단 저는 이미 서버2대는 관리가 되어있어서 위처럼 3개만이 진행되었습니다.


결과


아래처럼 서비스를 추가 한다.





저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

04. 하둡 예제 실행 및 코딩해보기!

BigDATA/Hadoop 2014.09.15 14:56
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


1. 예제 실행


저번 시간에는 2014/09/11 - [BigDATA/Hadoop] - 부록. 하둡 설치  을 해보았습니다.


우선! 하둡에서 제공되어지는 예제코드와 예제 코드를 패키징한 jar를 수행 해보겠습니다.


1) 예제를 실행하기 전에 우선 다음과 같이 hadoop-env.sh 파일을 HDFS에 업로드 합니다.

    그냥 따라해봅시다~

  dakao@ubuntu:/home/hadoop/hadoop/hadoop-1.2.1$ ./bin/hadoop fs -put conf/hadoop-env.sh conf/hadoop-env.sh


fs 명령어를 아직은 잘은 모르지만 한번 해봅시다~

dakao@ubuntu:/home/hadoop/hadoop/hadoop-1.2.1$ ./bin/hadoop fs -lsr conf/ 

-rw-r--r--   3 dakao supergroup       2540 2014-09-07 17:23 /user/dakao/conf/hadoop-env.sh


2) 파일이 업로드 되면 다음과 같이 하둡 명령어를 이용해 jar 파일을 실행합니다.

dakao@ubuntu:/home/hadoop/hadoop/hadoop-1.2.1$

./bin/hadoop jar hadoop-examples-*.jar wordcount conf/hadoop-env.sh wordcount_output

위의 명령어는 하둡명령어를 통해 jar를 수행한 것이고, hadoop-examples-*.jar파일에 있는 wordcount class를 실행하는데, 입력값은 

conf/hadoop-env.sh 파일을, 출력값은 output 디렉토리를 사용하겠다는 의미 입니다.

14/09/07 17:50:15 INFO input.FileInputFormat: Total input paths to process : 1

14/09/07 17:50:15 INFO util.NativeCodeLoader: Loaded the native-hadoop library

14/09/07 17:50:15 WARN snappy.LoadSnappy: Snappy native library not loaded

14/09/07 17:50:16 INFO mapred.JobClient: Running job: job_201409071442_0001

14/09/07 17:50:17 INFO mapred.JobClient:  map 0% reduce 0%

14/09/07 17:50:23 INFO mapred.JobClient:  map 100% reduce 0%

14/09/07 17:50:32 INFO mapred.JobClient:  map 100% reduce 100%

14/09/07 17:50:34 INFO mapred.JobClient: Job complete: job_201409071442_0001

14/09/07 17:50:34 INFO mapred.JobClient: Counters: 29

14/09/07 17:50:34 INFO mapred.JobClient:   Job Counters 

14/09/07 17:50:34 INFO mapred.JobClient:     Launched reduce tasks=1

14/09/07 17:50:34 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=6145

14/09/07 17:50:34 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0

14/09/07 17:50:34 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0

14/09/07 17:50:34 INFO mapred.JobClient:     Launched map tasks=1

14/09/07 17:50:34 INFO mapred.JobClient:     Data-local map tasks=1

14/09/07 17:50:34 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=9190

14/09/07 17:50:34 INFO mapred.JobClient:   File Output Format Counters 

14/09/07 17:50:34 INFO mapred.JobClient:     Bytes Written=2283

14/09/07 17:50:34 INFO mapred.JobClient:   FileSystemCounters

14/09/07 17:50:34 INFO mapred.JobClient:     FILE_BYTES_READ=2983

14/09/07 17:50:34 INFO mapred.JobClient:     HDFS_BYTES_READ=2665

14/09/07 17:50:34 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=124429

14/09/07 17:50:34 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=2283

14/09/07 17:50:34 INFO mapred.JobClient:   File Input Format Counters 

14/09/07 17:50:34 INFO mapred.JobClient:     Bytes Read=2540

14/09/07 17:50:34 INFO mapred.JobClient:   Map-Reduce Framework

14/09/07 17:50:34 INFO mapred.JobClient:     Map output materialized bytes=2983

14/09/07 17:50:34 INFO mapred.JobClient:     Map input records=61

14/09/07 17:50:34 INFO mapred.JobClient:     Reduce shuffle bytes=2983

14/09/07 17:50:34 INFO mapred.JobClient:     Spilled Records=348

14/09/07 17:50:34 INFO mapred.JobClient:     Map output bytes=3719

14/09/07 17:50:34 INFO mapred.JobClient:     Total committed heap usage (bytes)=176033792

14/09/07 17:50:34 INFO mapred.JobClient:     CPU time spent (ms)=1180

14/09/07 17:50:34 INFO mapred.JobClient:     Combine input records=305

14/09/07 17:50:34 INFO mapred.JobClient:     SPLIT_RAW_BYTES=125

14/09/07 17:50:34 INFO mapred.JobClient:     Reduce input records=174

14/09/07 17:50:34 INFO mapred.JobClient:     Reduce input groups=174

14/09/07 17:50:34 INFO mapred.JobClient:     Combine output records=174

14/09/07 17:50:34 INFO mapred.JobClient:     Physical memory (bytes) snapshot=245370880

14/09/07 17:50:34 INFO mapred.JobClient:     Reduce output records=174

14/09/07 17:50:34 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=1276059648

14/09/07 17:50:34 INFO mapred.JobClient:     Map output records=305 

    

3) 이제 wordcount를 실행한 출력값이 정상적으로 생성됐는지 확인해보겠습니다. 

    fs 명령어의 cat 파라미터를 사용해서 HDFS에 저장된 출력값을 확인해보겠습니다.

우선은 fs -lsr로 어떤 파일들이 있는지 확인 해보겠습니다.(namenode이나 datanode 아무곳에서나 확인 가능!)


dakao@ubuntu:/home/hadoop/hadoop/hadoop-1.2.1$ ./bin/hadoop fs -lsr wordcount_output/

-rw-r--r--   3 dakao supergroup          0 2014-09-07 17:50 /user/dakao/wordcount_output/_SUCCESS

drwxr-xr-x   - dakao supergroup          0 2014-09-07 17:50 /user/dakao/wordcount_output/_logs

drwxr-xr-x   - dakao supergroup          0 2014-09-07 17:50 /user/dakao/wordcount_output/_logs/history

-rw-r--r--   3 dakao supergroup      13774 2014-09-07 17:50 /user/dakao/wordcount_output/_logs/history/job_201409071442_0001_1410137416094_dakao_word+count

-rw-r--r--   3 dakao supergroup      51778 2014-09-07 17:50 /user/dakao/wordcount_output/_logs/history/job_201409071442_0001_conf.xml

-rw-r--r--   3 dakao supergroup       2283 2014-09-07 17:50 /user/dakao/wordcount_output/part-r-00000 


    

- Result

dakao@ubuntu:/home/hadoop/hadoop/hadoop-1.2.1$ ./bin/hadoop fs -cat wordcount_output/part-r-00000

# 39

$HADOOP_BALANCER_OPTS" 1

$HADOOP_DATANODE_OPTS" 1

$HADOOP_HOME/conf/slaves 1

$HADOOP_HOME/logs 1

$HADOOP_JOBTRACKER_OPTS" 1

$HADOOP_NAMENODE_OPTS" 1

$HADOOP_SECONDARYNAMENODE_OPTS" 1

$USER 1

'man 1

(fs, 1

-o 1

/tmp 1

1000. 1

A 1

All 1

CLASSPATH 1

Command 1

ConnectTimeout=1 1

Default 1

Empty 2

Extra 3

File 1

HADOOP_BALANCER_OPTS="-Dcom.sun.management.jmxremote 1

HADOOP_CLASSPATH= 1

HADOOP_CLIENT_OPTS 1

HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote 1

HADOOP_HEAPSIZE=2000 1

HADOOP_HOME_WARN_SUPPRESS="TRUE" 1

HADOOP_IDENT_STRING=$USER 1

HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote 1

HADOOP_LOG_DIR=${HADOOP_HOME}/logs 1

HADOOP_MASTER=master:/home/$USER/src/hadoop 1

HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote 1

HADOOP_NICENESS=10 1

HADOOP_OPTS 1

HADOOP_OPTS=-server 1

HADOOP_PID_DIR=/var/hadoop/pids 1

HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote 1

HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves 1

HADOOP_SLAVE_SLEEP=0.1 1

HADOOP_SSH_OPTS="-o 1

HADOOP_TASKTRACKER_OPTS= 1

Hadoop-specific 1

JAVA_HOME 1

JAVA_HOME. 1

JAVA_HOME=/home/hadoop/hadoop/jdk1.7.0_67 1

JAVA_HOME=/usr/lib/j2sdk1.5-sun 1

Java 2

MB. 1

NOTE: 1

Optional. 1

Otherwise 1

Required. 1

Seconds 1

See 1

SendEnv=HADOOP_CONF_DIR" 1

Set 1

The 6

This 1

Unset 2

When 1

Where 1

a 3

ace-t 1

amount 1

appended 1

applies 1

are 4

arrive 1

attack. 1

be 4

best 1

between 1

by 9

can 4

clusters, 1

code 1

commands 1

commands. 1

configuration 1

correctly 1

daemon 1

daemons. 1

default. 8

defined 1

dfs, 1

directory 2

distcp 1

distributed 1

e.g., 1

elements. 1

environment 2

etc) 1

export 21

faster 1

file, 1

files 2

following 1

for 2

from. 1

fsck, 1

going 1

hadoop 2

hadoop. 1

heap 1

here. 1

host:path 1

hosts. 1

implementation 1

in 3

instance 1

is 5

it 2

java 1

large 1

log 1

master 1

maximum 1

modify 1

multiple 1

naming 1

nice'. 1

nodes. 1

of 2

on 1

only 2

optional. 1

options 1

options. 2

others 1

otherwise 1

pid 1

potential 1

priority 1

processes. 1

remote 2

representing 1

required 1

rsync'd 1

rsyncs 1

run 1

running 1

runtime 1

scheduling 1

service 1

set 2

should 2

slave 3

sleep 1

so 1

specific 1

specified 1

ssh 1

stored. 2

string 1

symlink 1

than 1

that 3

the 4

them. 1

there 1

this 3

to 9

use, 1

use. 1

useful 1

users 1

variable 1

variables 1

when 1

where 2

where, 1

written 1 

잘 이해가 가지 않더라도 그냥 이런식으로 되어지는구나..라고만 느끼자! 필 충만! 


2. 개발 환경 구성

여기에서는 이클립스와 JDK1.7을 셋팅 해보겠습니다.

  1) eclipse download - 클릭!

  2) JDK download - 클릭!     


참고 : 2014/07/02 - [Language/Java] - Mac에서 Jdk8 설치 되는 장소!


우선 /Users/AceT/app/hadoop 이라는 디렉토리에 ide 디렉토리와 java 디렉토리를 만들었습니다.

AceTui-MacBook-Pro:hadoop AceT$ pwd

/Users/AceT/app/hadoop

AceTui-MacBook-Pro:hadoop AceT$ ls

ide java 



jdk 심볼릭 링크 걸기!(java디렉토리에서)

 ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home hadoop_java1.7


잘걸어져있나 확인!

ls -alr

total 8

lrwxr-xr-x  1 AceT  staff   63  9 15 16:16 hadoop_java1.7 -> /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home

drwxr-xr-x  5 AceT  staff  170  9 15 15:21 ..

drwxr-xr-x  3 AceT  staff  102  9 15 16:16 .


심볼릭 링크 삭제는 rm 명령어를 통해 삭제하면 된다.

ex) rm (심볼릭 링크이름)

     rm hadoop_java1.7


이클립스를 기동 시킨 뒤  환경설정에서 Java쪽을 1.7로 바꿔준다. 디폴트로 1.8로 되어있었음! 

(기존에 1.6, 1.8이 셋팅되어있었기 때문에..이클립스가 그냥 기동되었던것 같다. jdk가 기존에 셋팅이 되어있지 않으신 분들은 셋팅을 해야 합니다. 즉, 터미널에서 java -version 쳤을 때 뭔가 나와야 한다는 것이다.) 


[이클립스 기동]




[환경 설정]

 - Eclipse > 환경설정...


- Java 버전 수정!

  -- Compiler

 

  -- JRE


이제는 maven 프로젝트를 하나 만듭니다.



simple하고 프로젝트를 만들어봅니다.


아래와 같이 hadoop-map-reduce라는 메이븐 프로젝트가 만들어졌습니다.(reduce인데..오타났네요 ㅠ)



자! 이제 대망의 맵리듀스 코딩을 해보겠습니다.

참고자료는 현재 사내스터디 책인 "하둡완벽가이드 개정3판" 으로 하겠습니다.^-^


코딩을 하기전에 input data가 필요 합니다. 그래서 기상 데이터를 분석해보도록 하겠습니다.

사용할 데이터는 국립기후자료센터(NCDC) 입니다. 


책의 부록을 보면 http://hadoopbook.com/code.html 의 사이트를 소개 합니다.

가보면 github 주소를 알려줍니다.goooood~^0^ 

input data : https://github.com/tomwhite/hadoop-book/tree/master/input/ncdc

                         sample.txt를 다운 받으신 뒤 하둡서버에 올려주시면 되겠습니다~

또한 hadoop 명령어 fs -put을 통해서 hdfs에 put을 해놓습니다.

dakao@ubuntu:/home/hadoop/hadoop/hadoop-1.2.1$ 

hadoop fs -put input/ncdc/sample.txt input/ncdc/sample.txt


소스 : https://github.com/tomwhite/hadoop-book/tree/master/ch02/src/main/java


이제 이클리스를 기동하시고! 차례대로 따라하시면 됩니다.

1) 이클립스 기동!

2) pom.xml hadoop-core 추가! dependency는 메이븐레파지토리 사이트에서 원하는 jar에 맞게 가져오시면 됩니다.

<dependencies>  

   <dependency>

      <groupId>org.apache.hadoop</groupId>

      <artifactId>hadoop-core</artifactId>

      <version>1.2.1</version>

   </dependency>

</dependencies> 


3) 코딩! 3부분 코딩- Map / Reduce / main




4) jar로 묶기

  4-1) Export 하기


  4-2) jar 만들기 - Java > JAR file 선택



  4-3) jar file명 넣기 - hadoop-acet-example.jar



  4-5) Main class 지정 - 이 설정 때문인지..삽질 좀 했네요 ㅠㅠ 



5) 만들어진 jar를 하둡이 셋팅 된 서버에 옮겨놓습니다.



6) 실행 합니다!

   $hadoop jar hadoop-acet-example.jar input/ncdc/sample.txt output


중요! 아래와 같이 MaxTemperature라는 메인 클래스를 넣었을 때는..동작하지 않았었습니다..

 - 실행 - hadoop jar hadoop-acet-example.jar MaxTemperature input/ncdc/sample.txt output

 - 동작 X - $ hadoop jar hadoop-acet-example.jar MaxTemperature input/ncdc/sample.txt output

                    Usage: MaxTemperature <input path> <output path> 



7) 결과


8) file 확인 - hadoop fs -lsr output


9) file 내용 확인 - hadoop fs -cat /user/dakao/output/part-r-00000


맵-리듀스의 실행동작을 알아보았습니다. 대충 감이 오네요 후후~

하지만 더 중요한 것은!!! 맵과 리듀스의 코드겠죵?! 더더더 중요한 것은 하둡의 핵심인 HDFS와 MapReduce의 아키텍처입죠!

차근차근 이해하면서 제대로 알아가봐야겠네요^0^

그럼 오늘은 여기까쥐~!! 


참고 

1) http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html#Inputs+and+Outputs

2) https://github.com/rgan/hadoop-mapreduce-example

3) https://github.com/tomwhite/hadoop-book/tree/master/input/ncdc

4) 하둡 완벽가이드 개정3판


      - END -

저작자 표시 비영리 변경 금지
신고

'BigDATA > Hadoop' 카테고리의 다른 글

What is MapReduce??  (0) 2014.12.02
부록. 하둡설치(CDH)-클라우데라 배포판  (0) 2014.10.07
04. 하둡 예제 실행 및 코딩해보기!  (0) 2014.09.15
부록. 하둡 설치  (0) 2014.09.11
03. 맵리듀스 시작하기 - 맵-리듀스 개념  (5) 2014.09.01
02. About HDFS..  (0) 2014.08.28

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

부록. 하둡 설치

BigDATA/Hadoop 2014.09.11 01:25
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

하둡을 설치하기전에 해야할 일!

바로 리눅스 설치....

사실 하둡보다 리눅스 설치가 더 힘들었다..


setting~~



result :




환 경 : 맥북 프로 - Parallels

         setting OS - Ubuntu 14.04.1-server-amd64.iso   - 2014.09.04 최신버전!


목표 : 

  • 총 4대 : 네임노드 서버(Hadoop01) 1대, 데이터노드(Hadoop02, Hadoop03, Hadoop04) 3대 
  • openssh setting(Server, Client) - sudo apt-get install openssh-client openssh-server
  • mac에서 터미널로 접근(ssh hadoop01@xx.xx.xx.xx)
  • hadoop 계정 생성(홈디렉토리 지정)
  • Hadoop ver 1.x setting
  • JDK 1.6 이상 setting


1) mac 터미널로 접근을 해보자!

openssh를 설치하지 않으면! 접근 NO~~ - Connection refused!




그러므로 먼저 ssh를 셋팅하자!

sudo apt-get install openssh-client openssh-server



참고 사이트 : 우분투  SSH 셋팅 관련


이제는 하둡을 셋팅하기 위해 계정을 설정 해보자.

2) 하둡 실행 계정 생성

먼저 root로 로그인을 해야하기 때문에 처음 셋팅 시 root의 암호를 지정해줘야한다.

   $ sudo passwd


   root로 로그인하기 su root or su -


   login이후 계정생성!  계정은 반드시!! 전부 dakao로 해주어야한다!!! 그렇지 않으면 ssh 할 때 문제가..ㅠ.ㅠ..

   ex) adduser dakao --home /home/hadoop/hadoop


팁 : 유저변경 후 권한은 chown -R dakao:dakao /home/  이런식으로 하면 다카오계정에 다카오그룹이 홈이하로~


3) 하둡 설치-생성한 계정으로! ex) su dakao

wget을 이용!

wget "http://mirror.apache-kr.org/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz"


압축해제! tar -xvf hadoop-1-2-1.tar.gz


tip) chmod 명령어로 파일 또는 디렉토리 권한 설정을할 수 있음.


4) hosts 설정

root권한으로 /etc/hosts에 아래와 같이 상황에 맞게 수정한다.

10.231.15.1    search-nn-hadoop01

10.231.15.2    search-dn-hadoop02

10.231.15.3    search-dn-hadoop03

10.231.15.4    search-dn-hadoop04


5) 인코딩 확인

인코딩 확인 - utf-8이 아니라면 수정해줘야한다! 

     어디에서? 당근 루뜨로! vi /etc/sysconfig/i18n

     수정 후, source /etc/sysconfig/i18n

dakao01@ubuntu:~/hadoop-1.2.1$ echo $LANG

en_US.UTF-8


6) 자바 설치

명령어로 해보려하였지만..그냥 오라클 사이트가서 다운로드 뒤 파일지라로 업로드 하였음!

/home/hadoop01/hadoop/jdk1.7.0_67


setting 후 .profile에 추가!

export JAVA_HOME=/home/hadoop/hadoop/jdk1.7.0_67

export HADOOP_HOME=/home/hadoop/hadoop/hadoop-1.2.1

export PATH=$PATH:$HADOOP_HOME/bin:$JAVA_HOME/bin


source .profile


적용 후! java -version 과 hadoop을 쳐보면 됩니다.


java -version

dakao01@ubuntu:~$ java -version

java version "1.7.0_67"

Java(TM) SE Runtime Environment (build 1.7.0_67-b01)

Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)


hadoop

Warning: $HADOOP_HOME is deprecated.


Usage: hadoop [--config confdir] COMMAND

where COMMAND is one of:

  namenode -format     format the DFS filesystem

  secondarynamenode    run the DFS secondary namenode

  namenode             run the DFS namenode

  datanode             run a DFS datanode

  dfsadmin             run a DFS admin client

  mradmin              run a Map-Reduce admin client

  fsck                 run a DFS filesystem checking utility

  fs                   run a generic filesystem user client

  balancer             run a cluster balancing utility

  oiv                  apply the offline fsimage viewer to an fsimage

  fetchdt              fetch a delegation token from the NameNode

  jobtracker           run the MapReduce job Tracker node

  pipes                run a Pipes job

  tasktracker          run a MapReduce task Tracker node

  historyserver        run job history servers as a standalone daemon

  job                  manipulate MapReduce jobs

  queue                get information regarding JobQueues

  version              print the version

  jar <jar>            run a jar file

  distcp <srcurl> <desturl> copy file or directories recursively

  distcp2 <srcurl> <desturl> DistCp version 2

  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive

  classpath            prints the class path needed to get the

                       Hadoop jar and the required libraries

  daemonlog            get/set the log level for each daemon

 or

  CLASSNAME            run the class named CLASSNAME

Most commands print help when invoked w/o parameters.


7) SSH 설정

  - SSH공개키를 생성(ssh-keygen -t rsa) - 명령어 수행 후 엔터신공! enter x 3 :D

dakao01@ubuntu:~$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/hadoop/hadoop/.ssh/id_rsa): 

Created directory '/home/hadoop01/hadoop/.ssh'.

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /home/hadoop/hadoop/.ssh/id_rsa.

Your public key has been saved in /home/hadoop01/hadoop/.ssh/id_rsa.pub.

The key fingerprint is:

55:cc:3e:f2:50:bf:61:d6:28:fc:73:8d:60:79:0f:56 dakao01@ubuntu

The key's randomart image is:

+--[ RSA 2048]----+

|           o.    |

|           .+   E|

|          .+ o + |

|         .o O X .|

|        S  = X *.|

|            . = +|

|               o |

|                 |

|                 |

+-----------------+

 

공개키는 홈디렉토리 .ssh 폴더에 생성됩니다. 이제 생성된 공개키를 ssh-copy-id 명령어를 이용해 다른 서버에 복사합니다. ssh-copy-id 명령어는 대상 서버의 .ssh 디렉토리안에 있는 authorized_keys파일에 공개키를 입력합니다.


 - ssh-copy-id명령어 수행(우선 범위는 hadoop02)

dakao01@ubuntu:~$ ssh-copy-id -i /home/hadoop/hadoop/.ssh/id_rsa.pub dakao02@search-dn-hadoop02

The authenticity of host 'search-dn-hadoop02 (10.211.55.10)' can't be established.

ECDSA key fingerprint is 93:ba:c4:69:8b:e6:d7:f9:ee:2a:e2:39:5d:88:53:ff.

Are you sure you want to continue connecting (yes/no)? yes

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

dakao02@search-dn-hadoop02's password: 


Number of key(s) added: 1


Now try logging into the machine, with:   "ssh 'dakao02@search-dn-hadoop02'"

and check to make sure that only the key(s) you wanted were added.


 - dakao02서버에서 확인 - vi로 authorized_keys 확인! 

dakao02@ubuntu:~/.ssh$ ls

 

authorized_keys  id_rsa  id_rsa.pub


 - 테스트!

 search-nn-hadoop01 서버에서 ssh 명령어를 통해 붙어보자! 암호를 묻지 않고 붙는다면 OK!!

dakao01@ubuntu:~$ ssh search-dn-hadoop02

Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64)


 * Documentation:  https://help.ubuntu.com/


  System information as of Wed Sep  3 23:00:02 PDT 2014


  System load:  0.0               Processes:           160

  Usage of /:   3.0% of 61.88GB   Users logged in:     1

  Memory usage: 12%               IP address for eth0: ip가 나오지용!

  Swap usage:   0%


  Graph this data and manage this system at:

    https://landscape.canonical.com/


dakao02@ubuntu:~$ 


서로서로 전부 복사를 해줘야한다. 확인은 암호를 입력하지 않아도 쌍방향으로 서로 SSH에 접속이 되는지 보면 된다.

즉, authorized_keys 파일에는 자기자신을 포함 모든 키 정보가 들어가있어야 한다!


8) 하둡 환경설정 파일 수정!

    설치 작업의 끝이 보이는군요~~~ㅎㅎㅎㅎ

    슈퍼맨 서버 한대에 설정을 합니다! 그런 뒤에 압축해서 다른 서버에서 사용하도록 합니다.^-^b

              

    

 파일명

 용 도

 hadoop-env.sh

 하둡을 실행하는 쉘 스크립트 파일에서 필요한 환경 변수를 설정

 하둡 홈 디렉토리 아래에 있는 bin 디렉토리에 있는 쉘 스크립트 파일이 hadoop-env.sh를 사용합니다. 

 이 파일에는 JDK경로, ClassPath, 데몬 실행 옵션 등 다양한 환경변수를 설정할 수 있습니다.

 masters 

 보조 네임노드를 실행할 서버를 설정합니다.

 slaves

 데이터노드를 실행할 서버를 설정합니다. 

 core-site.xml

 HDFS맵-리듀스에서 공통적으로 사용할 환경 정보를 설정!

 hadoop-core-1.2.1.jar에 포함돼 있는 core-default.xml을 오버라이딩한 파일입니다.

 core-site.xml에 설정값이 없을 경우, core-default.xm에 있는 기본값을 사용합니다.

 hdfs-site.xml

 HDFS에서 사용할 환경 정보를 설정합니다. 

 hadoop-core-1.2.1.jar에 포함돼 있는 hdfs-default.xml를 오버라이딩한 파일 입니다. 

 hdfs-site.xml에 설정값이 없을 경우. hdfs-default.xml에 있는 기본값을 사용합니다.

 mapred-site.xml

 맵-리듀스에서 사용할 환경정보를 설정합니다. 

 hadoop-core-1.2.1.jar에 포함돼 있는 mapred-default.xml을 오버라이드한 파일입니다. 

 mapred.site.xml에 설정값이 없을 경우, mapred-default.xml에 있는 기본값을 사용합니다.


 - hadoop-env.sh 수정

   JDK_HOME  파라미터를 실제 JDK가 설치된 경로로 수정합니다.

   열어보시면 주석으로 막혀있습니다. 

   기존 :

    # The java implementation to use.  Required.

  # export JAVA_HOME=/usr/lib/j2sdk1.5-sun


   추가 :

   # modify ace-t

 export JAVA_HOME=/home/hadoop/hadoop/jdk1.7.0_67

  

  hadoop-env.sh에는 다양한 옵션들을 설정할 수 있습니다. 이 부분은 우선은 pass~~

  책 - 34~35page! 에 나와있습니다. 참고하세요^-^/


  - masters 수정

    masters 파일에는 보조 네임노드를 실행할 서버를 설정합니다.

    2개 이상의 보조 네임노드를 설정할 수 있으며, 한 줄에 하나의 서버를 기재하면 됩니다.

    서버는 호스트명 혹은 IP로 기재!


    현재 서버는 4대이며, 아래와 같이 구성해보도록 하겠습니다.

    search-nn-hadoop01 - 네임노드

    search-dn-hadoop02 - 보조 네임노드 겸 데이터노드

    search-dn-hadoop03 - 데이터 노드

    search-dn-hadoop04 - 데이터 노드


  - slaves 수정

    데이터노드를 실행할 서버를 설정! 2개 이상의 데이터노드를 설정할 수 있으며, 한줄에 하나의 서버를 기재하면 됩니다.

    서버는 호스트명 혹은 IP로 기재!


  - core-site.xml 수정

 fs.default.name과 hadoop.tmp.dir 속성을 추가하고, 다른 속성들은 core-default.xml에 있는 기본값을 사용!    

<configuration> 

 <property>

   <name>fs.default.name</name>

   <value>hdfs:search-nn-hadoop01:9000</value>

 </property>

 <property>

   <name>hadoop.tmp.dir</name>

   <value>/home/hadoop/hadooap/hadoop-data/

 </property>

</configuration>


fs.default.name : 데이터노드는 여러 작업을 진행하기 위해 반드시 네임노드의 주소를 알고 있어야 합니다.

                        예를 들어 네임노드로 하트비트나 블록 리포트를 보낼 때 바로 이값을 참조해서 네임노드를 호출 합니다.

hadoop.tmp.dir : 하둡에서 발생하는 임시 데이터를 저장하기 우한 공간 입니다. 

attempt-xxxx, history..등등  MR작업 등 하둡에서 무엇인가 동작할 때 아직은 잘모르겠지만 로그성 같은 저장 합니다.


 - hdfs-site.xml 수정

   dfs.replication : 이 친구는 HDFS의 저장될 데이터의 복제본 개수를 의미 합니다.

   dfs.http.address : 네임노드용 웹서버의 주소값입니다. 기본값은 0.0.0.0:50070으로 설정돼 있습니다.

   완전 분산 모드로 설치할 경우 반드시 이 속성을 설정해야 합니다.

   이 속성이 없으면 보조 네임노드가 네임노드에 접속하지 못하기 때문 입니다.

<configuration>

  <property>

    <name>dfs.replication</name>

    <value>3</value>

  </property>

  

  <property>

    <name>dfs.http.address</name>

    <value>search-nn-hadoop01:50070</value>

  </property>

  

  <property>

    <name>dfs.secondary.http.address</name>

    <value>search-dn-hadoop02:50090</value>

  </property>

</configuration>


 - mapred-site.xml 수정

   mapred.job.tracker 속성을 추가하며,아래와 같이 작성 되어집니다.

   또한 잡트래커(JobTrakcer) 데몬의 주소를 의미하며, 데이터노드에서 이 주소로 맵-리듀스 작업을 요청하게 됩니다.

<configuration>

  <property>

    <name>mapred.job.tracker</name>

    <value>search-nn-hadoop01:9001</value>

  </property>

</configuration>


여기까쥐~!! 한대의 서버에다가 설정을 하였습니다. 이제는 압축을 한 뒤에 각각의 서버에 복사 해보도록 하겠습니다!


9) 압축하기

dakao01@ubuntu:~$ tar cvfz hadoop-1.2.1.tar.gz hadoop-1.2.1/


10) 각 서버에 복사하기(SCP명령어 사용)

scp [원본경로] [전송될 서버의 계정@전송될 호스트명:전송될 디렉토리]

dakao01@ubuntu:~$ scp hadoop-1.2.1.tar.gz dakao02@search-dn-hadoop02:/home/hadoop02/hadoop

hadoop-1.2.1.tar.gz 


각 서버 search-dn-hadoop02, search-dn-hadoop03search-dn-hadoop04에 전송한다!


11) 압축 해제! (원본을 가지고 있는 서버에서 수행하시면 됩니다.)

ssh dakao@search-dn-hadoop03 "cd /home/hadoop03/hadoop; tar xvzf hadoop-1.2.1.tar.gz; chmod -R 775 hadoop-1.2.1/"


12) 전송 및 압축 해제가 잘되었는지 확인하고! 위에서 언급하였던 core-site.xml에서 경로부분을 수정하여 줍니다.

   음...hadoop01, hadoop02, hadoop03, hadoop04이런식이 아닌 hadoop으로 경로를 맞춰주면 더 편하겠네요!

   ex) 아래의 value부분의 서버에 맞게 경로를 맞춰줍니다.

   <name>hadoop.tmp.dir</name>

   <value>/home/hadoop02/hadooap/hadoop-data/


13) 마지막으로 .profile의 내용이 안먹히는 현상이 있다면 source .profile를 해줍니다.

      java -version or hadoop 등 명령어 수행 해보신 뒤에 말이죠!^^;


14) 하둡 실행 전 해야할 일!

리눅스에서 실행 중인 방화벽 서비스를 종료해야 합니다. 하둡의 여러 데몬들은 특정 포트로 RPC또는 HTTP통신을 하게 됩니다. 방화벽은 기본적인 포트를 제외하고 대부분 포트를 차단하고 있기 때문에 하둡이 정상적으로 실행되지 않을 수 있습니다.

그래서 실행 중인 방화벽 서비스를 정지하고, 서버가 부팅할 때도 방화벽이 실행되지 않도록 chkconfig명령어를 실행해야 합니다. root권한으로 실행해야 합니다. 반드시!


   (1) service iptables stop

ubuntu에서는 명령어가 조금 달랐다. 루트로 접속한 뒤에 ufw status는 상태를!(inactive : stop, active : ing)

ufw disable은 정지를! ufw enable은 시작을! 

(참고 http://www.cyberciti.biz/faq/ubuntu-start-stop-iptables-service/ )

root@ubuntu:/home/hadoop01/hadoop# sudo ufw status    - 방화벽 상태

Status: inactive

root@ubuntu:/home/hadoop01/hadoop# sudo ufw disable

Firewall stopped and disabled on system startup


   (2) chkconfig iptables off

ubuntu는 이것 역시 달랐다!


찾아봤더니..sysv-rc-conf라는 것이 있었다.

(참고 : http://askubuntu.com/questions/221293/why-is-chkconfig-no-longer-available-in-ubuntu)


install : sudo apt-get install sysv-rc-conf


설치 후 sysv-rc-conf --list  or sysv-rc-conf --list iptalbes 을 보면 현황을 알수있다.

sysv-rc-conf iptables off를 하면 off가 되어진다.

root@ubuntu:/home/hadoop01/hadoop# sysv-rc-conf iptables off

root@ubuntu:/home/hadoop01/hadoop# sysv-rc-conf --list iptables

iptables     2:off 3:off 4:off 5:off


15) 하둡 실행!(실행하기 빡세군요..ㄷㄷ)

 루트에서 다시 원래의 계정으로 돌아오신 뒤에 /home/hadoop01/hadoop/hadoop-1.2.1/bin 의 hadoop을 실행시켜 보면 아래와 같은 정보를 볼 수 있습니다.

dakao01@ubuntu:~/hadoop-1.2.1/bin$ ./hadoop

Warning: $HADOOP_HOME is deprecated.


Usage: hadoop [--config confdir] COMMAND

where COMMAND is one of:

  namenode -format     format the DFS filesystem

  secondarynamenode    run the DFS secondary namenode

  namenode             run the DFS namenode

  datanode             run a DFS datanode

  dfsadmin             run a DFS admin client

  mradmin              run a Map-Reduce admin client

  fsck                 run a DFS filesystem checking utility

  fs                   run a generic filesystem user client

  balancer             run a cluster balancing utility

  oiv                  apply the offline fsimage viewer to an fsimage

  fetchdt              fetch a delegation token from the NameNode

  jobtracker           run the MapReduce job Tracker node

  pipes                run a Pipes job

  tasktracker          run a MapReduce task Tracker node

  historyserver        run job history servers as a standalone daemon

  job                  manipulate MapReduce jobs

  queue                get information regarding JobQueues

  version              print the version

  jar <jar>            run a jar file

  distcp <srcurl> <desturl> copy file or directories recursively

  distcp2 <srcurl> <desturl> DistCp version 2

  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive

  classpath            prints the class path needed to get the

                       Hadoop jar and the required libraries

  daemonlog            get/set the log level for each daemon

 or

  CLASSNAME            run the class named CLASSNAME

Most commands print help when invoked w/o parameters.


네임노드를 초기화 시키는 작업을 해보겠습니다.


./hadoop namenode -format


오류내역


위의 오류는 확인해보니... </value>를 해주지 않았었네요ㅠㅠ


다시 수행해보겠습니다.

dakao01@ubuntu:~/hadoop-1.2.1/bin$ ./hadoop namenode -format

Warning: $HADOOP_HOME is deprecated.


14/09/04 21:41:39 INFO namenode.NameNode: STARTUP_MSG: 

/************************************************************

STARTUP_MSG: Starting NameNode

STARTUP_MSG:   host = ubuntu/127.0.1.1

STARTUP_MSG:   args = [-format]

STARTUP_MSG:   version = 1.2.1

STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013

STARTUP_MSG:   java = 1.7.0_67

************************************************************/

14/09/04 21:41:39 INFO util.GSet: Computing capacity for map BlocksMap

14/09/04 21:41:39 INFO util.GSet: VM type       = 64-bit

14/09/04 21:41:39 INFO util.GSet: 2.0% max memory = 1013645312

14/09/04 21:41:39 INFO util.GSet: capacity      = 2^21 = 2097152 entries

14/09/04 21:41:39 INFO util.GSet: recommended=2097152, actual=2097152

14/09/04 21:41:39 INFO namenode.FSNamesystem: fsOwner=dakao01

14/09/04 21:41:39 INFO namenode.FSNamesystem: supergroup=supergroup

14/09/04 21:41:39 INFO namenode.FSNamesystem: isPermissionEnabled=true

14/09/04 21:41:40 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100

14/09/04 21:41:40 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)

14/09/04 21:41:40 INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 0

14/09/04 21:41:40 INFO namenode.NameNode: Caching file names occuring more than 10 times 

14/09/04 21:41:40 INFO common.Storage: Image file /home/hadoop01/hadooap/hadoop-data/dfs/name/current/fsimage of size 113 bytes saved in 0 seconds.

14/09/04 21:41:40 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/home/hadoop01/hadooap/hadoop-data/dfs/name/current/edits

14/09/04 21:41:40 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/home/hadoop01/hadooap/hadoop-data/dfs/name/current/edits

14/09/04 21:41:40 INFO common.Storage: Storage directory /home/hadoop/hadooap/hadoop-data/dfs/name has been successfully formatted.

14/09/04 21:41:40 INFO namenode.NameNode: SHUTDOWN_MSG: 

/************************************************************

SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1

************************************************************/


위에보시면 /home/hadoop/hadooap/hadoop-data/dfs/name has been successfully formatted.라고 나오시면 됩니다!

초기화 완료!


이제는 bin디렉토리에 있는 start-all.sh를 통해 하둡과 관련된 모든 데몬을 실행시켜 보겠습니다.

slaves 파일과 ssh 공개키 설정이 제대로 됐다면 데이터노드용 서버에서 데이터노드와 태스크트래커 데몬을 각각 실행 합니다. 


매우 중요!!

error01) 계정과 홈디렉토리를 구분이 되게끔 하려고했으나..아래처럼..찾지 못하는 현상이 있으므로..계정과 홈디렉토리는 각 서버마다 맞춰줘야 합니다.!!

dakao@ubuntu:~/hadoop-1.2.1/bin$ ./start-all.sh

starting namenode, logging to /home/hadoop01/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-dakao-namenode-ubuntu.out

search-dn-hadoop02: bash: line 0: cd: /home/hadoop01/hadoop/hadoop-1.2.1/libexec/..: No such file or directory

search-dn-hadoop02: bash: /home/hadoop01/hadoop/hadoop-1.2.1/bin/hadoop-daemon.sh: No such file or directory


error02) java.io.IOException: Incomplete HDFS URI, no host: 네임노드, 데이터노드 안뜨는 현상!

/home/hadoop/hadoop/hadoop-1.2.1/conf 에서 core-site.xml 부분에...잘못 적었다!! -0-;;

<configuration>

 <property>

   <name>fs.default.name</name>

   <value>hdfs://search-nn-hadoop01:9000</value> - good hdfs:// 인데..hdfs:로 해놨었다..ㅠ.ㅠ..

 </property>

 <property>

   <name>hadoop.tmp.dir</name>

   <value>/home/hadoop/hadoop/hadoop-data/</value>

 </property>

</configuration>


위와같이 올바르게 작성한 뒤 다시!!! hadoop namenode -format이라는 것을 통해 다시 빌드 시켜줘야한다!!! 



결과

dakao@ubuntu:/home/hadoop/hadoop/hadoop-1.2.1/bin$ ./start-all.sh 

Warning: $HADOOP_HOME is deprecated.  <-- 요녀석이 안뜰려면 hadoop-env.sh 에서 export HADOOP_HOME_WARN_SUPPRESS="TRUE" 를 export해주면 된다.


starting namenode, logging to /home/hadoop/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-dakao-namenode-ubuntu.out

search-dn-hadoop02: starting datanode, logging to /home/hadoop/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-dakao-datanode-ubuntu.out

search-dn-hadoop03: starting datanode, logging to /home/hadoop/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-dakao-datanode-ubuntu.out

search-dn-hadoop04: starting datanode, logging to /home/hadoop/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-dakao-datanode-ubuntu.out

search-dn-hadoop02: starting secondarynamenode, logging to /home/hadoop/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-dakao-secondarynamenode-ubuntu.out

jobtracker running as process 3927. Stop it first.

search-dn-hadoop04: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-dakao-tasktracker-ubuntu.out

search-dn-hadoop02: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-dakao-tasktracker-ubuntu.out

search-dn-hadoop03: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-dakao-tasktracker-ubuntu.out



잘 떴나 확인!

 - 네임노드 서버에서 jps명령어를 통해 NameNode와 JobTracker를 확인!

dakao@ubuntu:/home/hadoop/hadoop/hadoop-1.2.1/bin$ jps

7114 Jps

6824 NameNode

7004 JobTracker


 - 데이터노드 서버에서 jps명령어를 통해 DataNode와 TaskTracker 등을 확인!

dakao@ubuntu:/home/hadoop/hadoop/hadoop-1.2.1/conf$ jps

7165 TaskTracker

6913 DataNode

7248 Jps

7038 SecondaryNameNode


 - END -

            





저작자 표시 비영리 변경 금지
신고

'BigDATA > Hadoop' 카테고리의 다른 글

부록. 하둡설치(CDH)-클라우데라 배포판  (0) 2014.10.07
04. 하둡 예제 실행 및 코딩해보기!  (0) 2014.09.15
부록. 하둡 설치  (0) 2014.09.11
03. 맵리듀스 시작하기 - 맵-리듀스 개념  (5) 2014.09.01
02. About HDFS..  (0) 2014.08.28
01. 하둡 소개  (0) 2014.08.27

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

03. 맵리듀스 시작하기 - 맵-리듀스 개념

BigDATA/Hadoop 2014.09.01 14:34
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

회사 위키에 정리해서 복사&붙여넣기를 하니..깨져서 나오는 현상이 있어서 하루패드의 마크다운 기능을 사용해보았습니다.

 

목 차

맵-리듀스 개념
맵-리듀스 아키텍처

1.맵-리듀스 개념

  1. 맵-리듀스 패턴(Scatter-Gather의 한 형태[Hohpe and Woolf])은 클러스터에서 많은 장비의 장점을 활용해 처리하며서 데이터가 위치한 노드에서 최대한 많은 처리가 실행되도록 작업을 조직하는 방법이다. 맵-리듀스는 구글의 맵-리듀스 프레임워크[Dean and Ghemawat]로 유명해졌다. 맵-리듀스란 이름은 함수형 프로그래밍 언어에서 컬렉션에 대해 맵과 리듀스 연산을 하는 데서 영감을 얻은 것이다.

  2. 맵리듀스 프로그래밍 모델은 단순하게 맵(map)과 리듀스(reduce)라는 두 개의 메소드로 다음과 같은 동작을 수행합니다.

     : (k1, v1) → list(k2, v2)

    리듀스 : (k2, list(v2))→ list(k3, v3)

* 맵 메소드는 키(k1)와 값(v1)으로 구성된 데이터를 입력받아 이를 가공하고 분류한 후 새로운 키(k2)와 값(v2)으로 구성된 목록을 출력 합니다.
이때 맵 메소드가 반복해서 수행되다 보면 새로운 키(k2)를 가지는 여러 개의 데이터가 만들어집니다. 리듀스 메소드의 새로운 키(k2)로 그룹핑된 값의 목록(list(v2))를 입력 데이터로 전달받습니다. 이후 값의 목록(list(v2))에 대한 집계 연산을 실행해 새로운 키(k3)와 값(v3)으로 구성된 목록을 생성 합니다.

예를 들어서 맵리듀스로 "read a book"과 "write a book"이라는 두 줄의 문장으로 구성된 텍스트 파일을
입력받아 전체 글자 수를 계산해 보겠습니다.

 (1) 맵-리듀스는 입력 파일을 키와 값 형식의 데이터로 분류 합니다. 위의 예제에서는 키는 라인 번호 이고 값은 문장 입니다.

 (2) 키와 값 형식의 데이터는 맵 메소드의 입력 데이터로 전달 됩니다.

 (3) 맵 메소드는 라인 번호별로 문장을 체크해 키에 해당하는 글자별로 글자 수를 출력합니다.

 (4) 맵-리듀스는 맵 메소드의 출력 데이터를 정렬하고, 병합합니다.

 (5) 4번의 결과가 리듀스 메소드의 입력 데이터로 전달 됩니다.

 (6) 리듀스 메소드는 새로운 키인 글자별로 각 글자 수를 합산해서 출력 합니다.

 (7) 리듀스 메소드의 출력 데이터를 하둡 파일 시스템에 저장 합니다.

그림_a) 맵리듀스 개념 예제

 

Tip) 굿팁!

  • 맵 작업은 한 집합에 대해서만 적용할 수 있고, 리듀스 작업은 한 키에 대해서만 적용할 수 있다. 이러한 제약조건에서도 잘 동작하려면 프로그램의 구조를 다르게 생각해야 한다.
  • 맵-리듀스는 클러스터에서 계산의 병령화를 쉽게 해주는 패턴이다.
  • 맵 작업은 집합으로부터 데이터를 읽어 관련된 키-값 쌍으로 압축한다. 맵은 한번에 레코드 하나만 읽으므로 병렬화될 수 있고 해당 레코드를 저장한 노드에서 실행된다.
  • 리듀스 작업은 한 키에 대해 맵 작업의 결과로 나온 많은 값을 취해 출력 하나로 요약한다. 각 리듀스 함수는 한 키에 대해 작용하기 때문에 키로 병렬화할 수 있다.

2. 맵-리듀스 아키텍처

  1. 시스템 구성

맵-리듀스 시스템은 클라이언트, 잡트래커, 태스크트래커로 구성 됩니다.

* 클라이언트 
사용자가 실행한 맵-리듀스 프로그램과 하둡에서 제공하는 맵리듀스 API를 의미 합니다. 사용자는 맵-리듀스 API로 맵-리듀스 프로그램을 개발하고, 개발한 프로그램을 하둡에서 실행할 수 있습니다.

* 잡트래커(JobTracker)
클라이언트가 하둡으로 실행을 요청하는 맵-리듀스 프로그램은 잡(Job)이라는 하나의 작업 단위로 관리됩니다. 잡트래커는 하둡 클러스터에 등록된 전체 잡의 스케줄링을 관리하고 모니터링 합니다.
전체 하둡 클러스터에서 하나의 잡트래커가 실행되며(죽으면???), 보통 하둡의 네임노드 서버에서 실행됩니다. 
※ 반드시 네임노드 서버에서 실행할 필요는 없음. 페이스북 같은경우 잡트래커를 별개의 서버에서 동작하도록 구성 함.

또한 사용자가 새로운 잡을 요청하면 잡트래커는 잡을 처리하기 위해 몇 개의 맵과 리듀스를 실행할지 계산합니다. 이때 태스크트래커는 잡트래커의 작업 수행 요청을 받아 맵리듀스 프로그램을 실행합니다. 잡트래커와 태스크트래커는 하트비트(heardbeat)라는 메소드로 네트워크 통신을 하면서 태스크트래커의 상태와 작업 실행 정보를 주고받게 됩니다. 만약 태스크트래커에 장애가 발생하면 잡트래커는 다른 대기 중인 태스크트래커를 찾아 태스크를 재실행하게 됩니다.

* 태스크트래커(TaskTracker)
태스크트래커는 사용자가 설정한 맵-리듀스 프로그램을 실행하며, 하둡의 데이터노드에서 실행되는 데몬입니다. 태스크트래커는 잡트래커의 작업을 요청받고, 잡트래커가 요청한 맵과 리듀스 개수만큼 맵 태스크(map task)와 리듀스 태스크(Reduce Task)를 생성 합니다. 여기서 맵 태스크와 리듀스 태스크란 사용자가 설정한 맵과 리듀스 프로그램입니다.


2.맵-리듀스 작동 방식

"복잡하지만 이해하여 BOA요!"

그림_c) 맵-리듀스의 작동방식

1) 맵리듀스잡실행

사용자는 잡에 대한 실행 정보를 설정한 후(직접 개발을 해야 무슨소린지 알수 있을듯..ㅋㅋ) waitForCompletion 메소드를 호출해 잡을 실행합니다.

※ 잡 제출 시 waitForCompletion()은 2초에 한번씩 진행 과정을 조사하여 변경이 생기면 콘솔로 보여준다.


2) 신규 잡 제출(Job Submission)

잡 인터페이스에서는 새로운 잡클라이언트 객체가 생성되고, 이 객체가 잡트래커에 접속해 잡을 실행해줄 것을 요청 합니다. 이때 잡트래커는 잡클라이언트에게 새로운 Job ID를 반환합니다.(잡트래커 상에서 getNewJobId()호출) Job ID를 전달받은 잡클라이언트는 사용자가 설정한 출력 경로를 확인하는데, 이미 존재하는 경로를 입력했으면 에러가 발생하고 맵리듀스 프로그램이 종료됩니다.


3) 입력 스플릿 생성

잡클라이언트는 잡의 입력 데이터에 대한 입력 스플릿(input split)을 계산합니다. 당연히 입력 경로를 잘못 입력해서, 입력 스플릿을 계산할 수 없다면 에러가 발생하고 맵리듀스 프로그램은 종료됩니다. 입력 스플릿이 계산되고 나면 입력 스플릿 정보, 설정 파일, 맵리듀스 JAR파일을 HDFS에 저장하고, 잡트래커에게 잡을 시작할 준비가 끝났음을 알려줍니다.

  • 입력 스플릿이란?
    하나의 맵에서 처리해야 하는 입력 파일의 크기 입니다. 하둡은 맵리듀스 잡의 입력 데이터를 입력 스플릿이라는 고정된 크기의 조각으로 분리합니다. 하둡은 생성된 입력 스플릿마다 맵 태스크를 하나씩 생성 합니다. 그리고 입력 스필릿을 해당 맵 태스크의 입력 데이터로 전달합니다. 입력 데이터가 HDFS의 기본 블록 사이즈인 64MB보다 큰 경우에만 입력 스플릿이 생성됩니다. ※ 입력 스플릿의 크기는 하둡 환경설정 파일인 mapred-site.xml에서 수정할 수 있습니다. 입력 스플릿의 최소 바이트 크기는 mapred.min.split.size 프로퍼티이며, 기본값은 0 바이트 입니다.


4) 잡 할당

잡 클라이언트의 메시지를 받은 잡트래커는 잡을 큐에 등록하고, 잡스케줄러가 큐(Queue)에 가져와서 초기화 합니다. 초기화 후 잡스케줄러는 잡클라이언트가 HDFS에 등록한 입력 스플릿 정보를 가져와 입력 스플릿의 개수만큼 맵 태스크를 생성하고 ID를 부여합니다. 태스크트래커는 주기적으로 잡트래커의 하트비트(heartbeat)라는 메소드를 호출해서 자신의 상태정보를 잡트래커에게 알려줍니다. 잡트래커는 하트비트 메소드를 통해 전달된 저옵를 이용해 어떠한 태스크트래커에게 태스크 실행을 요청할지 결정한 후, 해당 태스크트래커에 태스크 실행을 요청합니다.


5) 매퍼 실행

태스크트래커는 잡트래커가 할당해준 맵 태스크를 실행 합니다. 맵 태스크는 사용자가 설정한 매퍼 클래스이며, 입력 스필릿은 키와 값의 형태로 맵 태스크의 입력 데이터로 전달됩니다. 또한 맵 태스크는 맵 메소드의 정의돼 있는 로직을 실행하고, 출력 데이터를 메모리 버퍼에 저장합니다. 이때 파티셔너는 해당 출력 데이터가 어떤 리듀스 태스크에 전달돼야 할지를 결정하고, 그에 맞는 파티션을 지정해줍니다. 파티션에서는 메모리에 있는 데이터를 키에 따라 정렬한 후, 로컬 디스크에 저장해줍니다. 파티션별로 디스크 저장이 완료되면 이 파일들은 하나의 출력 파일로 병합되고 정렬 됩니다.


6) 정렬, 병합

리듀스 태스크는 사용자가 설정한 리듀서 클래스 입니다. 리듀스 태스크는 자신이 필요한 맵 태스크의 모든 출력 데이터가 있어야만 작업을 실행할 수 있습니다. 그렇다면 어떻게 맵 태스크의 출력 데이터를 복사할까요? 맵 태스크는 출력이 완료되면 자신을 실행한 태스크트래커에게 작업이 정상적으로 끝났다고 알려줍니다. 이 메시지를 받은 태스크트래커는 잡트래커에게 해당 맵 태스크의 상태와 맵 태스크의 출력 데이터 경로를 알려줍니다. 리듀스 태스크에서는 주기적으로 잡트래커에게 맵 태스크의 출력 데이터 경로를 물어보며, 출력 데이터 경로가 정상적으로 조회되면 해당 출력 데이터를 로컬 노드로 복사합니다. 이때 파일이 크면 디스크로 복사하고, 작을 경우 메모리로 복사 합니다.


7) 리듀서 실행

리듀스 태스크는 모든 맵 태스크의 출력 데이터를 복사한 후, 맵 태스크의 출력 데이터를 병합합니다. 병합이 완료되면 리듀스 메소드를 호출해서 분석 로직을 실행 합니다.


8) 출력 데이터 저장

리듀스 태스크는 출력 데이터를 HDFS에 part-nnnn이라고 저장합니다. 여기서 nnnn은 파티션 ID를 의미하며, 00000부터 1씩 증가됩니다.


시작하세요! 하둡 프로그래밍과 하둡완벽 가이드 책을 맵-리듀스 부분을 병행하며 보고 있는데..책의 장단점들이 있네요 ㅎㅎㅎㅎ 

# 이전 글 
2014/08/27 - [BigDATA/Hadoop] - 01. 하둡 소개 
2014/08/28 - [BigDATA/Hadoop] - 02. About HDFS..

#참고 문헌 :
1. 시작하세요! 하둡프로그래밍 - 정재화 지음
2. 빅데이터 세상으로 떠나는 간결한 안내서 NoSQL - 마틴 파울러 지음
3. 하둡 완벽 가이드 개정3판

저작자 표시 비영리 변경 금지
신고

'BigDATA > Hadoop' 카테고리의 다른 글

04. 하둡 예제 실행 및 코딩해보기!  (0) 2014.09.15
부록. 하둡 설치  (0) 2014.09.11
03. 맵리듀스 시작하기 - 맵-리듀스 개념  (5) 2014.09.01
02. About HDFS..  (0) 2014.08.28
01. 하둡 소개  (0) 2014.08.27
[하둡교육 3일차] Pig  (0) 2013.06.05

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

  • Favicon of http://anyjava.tistory.com BlogIcon anyjava 2014.09.03 13:17 신고 답글 | 수정/삭제 | ADDR

    오홀! 굳굳 멋져!! 앞으로도 기대하겠습니다~ ㅎㅎ

    • Favicon of http://acet.pe.kr BlogIcon String Ace-T 2014.09.03 13:24 신고 수정/삭제

      ㅎㅎㅎ 아직 쪼렙이라...ㅋㅋㅋ
      언능 고렙되어서 저의 생각을 심오하게 포스팅에 녹이고 싶네요! ㅎㅎㅎ
      anyjava님의 활약도 요즘 장난 아니던데요?!!
      화이팅 입니다^-^

  • good 2016.08.02 23:20 신고 답글 | 수정/삭제 | ADDR

    맵 리듀스에 대해서 자세히 알려주셔서 감사합니다~
    따로 정리해서 포스팅해도 될까요??

    • Favicon of http://acet.pe.kr BlogIcon String Ace-T 2016.08.02 23:22 신고 수정/삭제

      넵~댓글 감사합니다^-^ 참조 링크만 하나 달아주시면 감사요! 열공 즐프하세요~~

    • good 2016.08.05 16:13 신고 수정/삭제

      감사합니다~

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

02. About HDFS..

BigDATA/Hadoop 2014.08.28 20:04
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

 

목차

HDFS 기초

HDFS 아키텍처

HDFS 명령어 사용

정리

HDFS 기초

HDFS는 수십 테라바이트 또는 페타바이트 이상의 대용량 파일을 분산된 서버에 저장하고, 많은 클라이언트가 저장된 데이터를 빠르게 처리할 수 있게 설계된 파일 시스템 입니다.

HDFS과 기존 대용량 파일 시스템(DAS, NAS, SAN)의 가장 큰 차이점은 저사양 서버를 이용해 스토리지를 구성할 수 있다는 것 입니다.

HDFS는 다음과 같이 네 가지 목표를 가지고 설계됐습니다.

1) 장애 복구

     HDFS를 구성하는 분산 서버는 다양한 장애가 발생할 수 있습니다. 그러나 장애를 빠른 시간에 감지하고, 대처할 수 있게 설계돼 있습니다.(Really??)

     HDFS는 데이터를 저장하면, 복제 데이터도 함께 저장해서 데이터 유실을 방지! 또한 분산 서버 간에는 주기적으로 상태를 체크해 빠른 시간에 장애를 인지하고, 대처할 수 있게 도와줍니다.

2) 스트리밍 방식의 데이터 접근

    HDFS에 파일을 저장하거나, 저장된 파일을 조회하려면 스트리밍 방식으로 데이터에 접근해야 합니다.

    기존의  파일 시스템은 사용자가 빠르게 데이터에 접근하는 것을 목표로 하지만, HDFS는 기존 파일 시스템들과는 달리 배치 작업에 적합하도록 설계돼 있고, 낮은 데이터 접근 지연 시간보다는 높은 데이터 처리량에 중점을 두고 있습니다.

Tip. Hadoop Streaming - 하둡 스트리밍

Hadoop streaming is a utility that comes with the Hadoop distribution. The utility allows you to create and run Map/Reduce jobs with any executable or script as the mapper and/or the reducer. For example:

발번역..(big grin) => 하둡 스트리밍은 하둡배포에 딸려있는 하나의 유틸리티 입니다.  이 유틸리티는 당신이 어떤 실행 가능한 것이나 스크립트를 가지고 mapper나 또는 reducer를 생성하거나 Map/Reduce jobs를 실행 시킬수 있습니다. 예를 들어서:

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper /bin/cat \ -reducer /bin/wc

참고 URL : http://hadoop.apache.org/docs/r1.2.1/streaming.html#Hadoop+Streaming

 3) 대용량 데이터 저장

     HDFS는 하나의 파일이 기가바이트에서 테라바이트 이상의 사이즈로 저장될 수 있게 설계 됐습니다. 높은 데이터 전송 대역폭과 하나으 ㅣ클러스터에서 수백 대의 노드를 지원할 수 있어야 합니다. 또한 하나의 인스턴스에서는 수백만 개 이상의 파일을 지원 합니다.

4) 데이터 무결성

    HDFS는 한번 저장한 데이터는 더는 수정할 수 없고, 읽기만 가능하게 해서 데이터 무결성을 유지 합니다. 데이터 수정은 불가능하지만 파일 이동, 삭제, 복사할 수 있는 인터페이스는 제공합니다. Hadoop 2.0 알파ver 부터는 HDFS에 저장된 파일에 append가 제공.

HDFS 아키텍처

 1) HDFS는?

     -  블록 구조의 파일 시스템 입니다.

     - HDFS에 저장하는 파일은 특정 사이즈의 블록으로 나눠져 분산된 서버에 저장 됩니다.

     - 블록 사이즈는 기본적으로 64MB로 설정되어있고 변경이 가능 합니다.

     - 여러 개의 블록은 동일한 서버에 저장되는 것이 아니라 여러 서버에 나눠서 저장 됩니다.

★ 왜 64MB 인가?? 외국인형이 stackoverflow에 질문 올린 글! 참조~

   HDFS blocks are large compared to disk blocks, and the reason is to minimize the cost of seeks

   발번역 (big grin) - HDFS 블록들은 디스크 블록들과 비교했을 때 크다. 그리고 이유는 최저의 비용으로 찾을 수 있다는 것이다.


 

그림_a) HDFS의 파일 복제 구조

 

 

 

320MB의 파일을 HDFS에 저장했을 때 블록이 복제되는 것을 나타낸 그림 입니다. 

파일은 다섯 개의 블록으로 분리 된 후, 블록당 3개씩 HDFS에 저장돼 있습니다. 

HDFS는 블록을 저장할 때 기본적으로 3개씩 블록의 복제본을 저장 합니다.(default) 

역시나! HDFS의 블록사이즈처럼 복제본의 수도 하둡 환경 설정 파일에서 수정할 수 있습니다. 

어떻게 복제가 되는지는 뒷부분에 자세히 다루도록 하겠습니다.^0^~good~ 

복제단위는 위와같이 블록단위라는것만 기억하도록 합시다!

 

 2) 네임노드(NameNode)와 데이터 노드 (DataNode)

HDFS는 마스터(Master)-슬레이브(Slave) 아키텍처로 구성 됩니다. 

즉, 마스터 역할을 하는 네임노드(NameNode)서버가 한대, 슬레이브 역할을 하는 데이터노드(DataNode) 서버가 여러 대로 구성 됩니다. 

그림을 보기전에 용어와 역할을 조금 살펴보면.. 

 - 네임노드 :  HDFS의 모든 메타데이터를 관리하고, 클라이언트가 HDFS에 저장된 파일에 접근 할 수 있게 함.(접근 가능케하는 정보가 있겠죵?-디렉토리명, 파일명 등) 

 - 데이터노드 : HDFS에 저장할 때 블록으로 나눠진 데이터는 여러 대의 데이터노드에 분산저장 됨. 

 - 애플리케이션 : 사용자가 구현한 애플리케이션은 HDFS에 파일을 저장하거나. 저장된 파일을 읽기 위해 HDFS 클라이언트(이하 클라이언트)를 사용하며, 클라이언트 API 형태로 사용자에게 제공 됩니다.  

 - RACK : Hadoop data nodes (servers) are installed in racks. Each rack typically contains multiple data node servers with a top of rack switch for network communication. 

               “Rack awareness” means that the name node knows where each data node server is and in which rack. 

              영어라서 당황 스러우셨죠? 발번역 -  하둡 데이터노드들은 rack에 설치가 되어져있습니다. 

               각각의 rack은 보통 네트워크 통신을 하기 위한 상위 rack switch에 여러개의 데이터노드들로 구성되어져있습니다.

              "Rack awareness"는 노드네임이 각 rack의 데이터노드서버들이 어디에 있는지 아는 의미 입니다.

 

   참고 사이트 : http://www.ibmbigdatahub.com/blog/running-hadoop-cloud 

                         http://wiki.apache.org/hadoop/topology_rack_awareness_scripts

 

자! 아래의 네임노드 관련 그림을 보시면!

그림_b) HDFS 아키텍처

 

 

네임노드와 데이터노드의 구조를 살펴보았습니다.

 

3) 파일 저장

이제 전체 아키텍처를 알았으니 조금 detail하게 HDFS에 파일을 저장할 때의 동작 방식을 알아보겠습니다.

 우선 그림_c를 보도록 하겠습니다.

 

그림_c) HDFS의 파일 저장 과정

 

 

 

 1) 사용자가 개발한 프로그램인 애플리케이션이 클라이언트에게 파일 저장을 요청합니다.

 2) 클라이언트는 네임노드에게 사용자가 요청한 파일 경로를 생성할 것을 요청합니다.

 2-1) 네임노드는 해당 파일 경로가 기존에 존재할 경우 에러 처리를 합니다. 기존에 존재하지 않는 파일 경로라면 메모리에 파일 경로를 생성한 후, 다른 클라이언트가 해당 경로를 수정하지 못하게 락(lock)을 겁니다.

 3) 네임노드는 클라이언트에게 해당 파일을 저장할 데이터노드의 목록을 반환 합니다. 이러한 데이터노드의 목록은 하나의 파이프라인을 형성합니다. 파이프라인에는 HDFS의 환경설정 파일에 설정된

     블록의 복제 개수(dfs.replication)만큼 데이터노드가 들어 있습니다.

 4) 클라이언트는 첫 번째 데이터노드에게 데이터를 전송합니다.

 5) 첫번째 데이터노드는 전송받은 데이터를 로컬 디스크에 저장한 후, 두번째 데이터노드로 데이터를 전송합니다. 두번째 데이터노드도 전송받은 데이터를 로컬에 저장한 후, 세 번째 데이터노드로 데이터를 전송합니다.

     세번째 데이터도 전송받은 데이터를 로컬 디스크에 저장합니다.

 6) 첫 번째 데이터노드는 클라이언트에게 파일 저장이 완료됐음을 응답합니다.

 7) 클라이언트는 애플리케이션에게 파일 저장이 완료됐음을 응답합니다.

 

Q) 파이프라인 형성이라함은?

     How? 디자인 패턴 중 Chain of responsibility Pattern으로 구현이 되어있을라나?? 네임노드의 메타데이터(conf)를 가지고??

 

4) 파일 읽기

  이제는 HDFS에 저장된 파일을 어떠한 방식으로 읽게 되는지 알아보겠습니다. 그림_d 참조!

 

그림_d)

 

 

    1) 사용자가 개발한 프로그램인 애플리케이션이 클라이언트에게 파일 읽기를 요청 합니다.

    2) 클라이언트는 네임노드에게 애플리케이션이 요청한 파일이 어떤 블록에 저장돼 있는지 블록의 위치 정보를 요청 합니다.

    3) 네임노드는 메타데이터에서 요청된 파일의 복제 블록이 저장된 위치를 확인한 후 해당 데이터노드의 목록을 반환 합니다.

        이때 데이터노드의 목록은 요청 중인 클라이언트와 가까운 순서대로 정렬해서 반환 됩니다. 만약 클라이언트가 데이터노드라면 클라이언트는 로컬에 있는 파일을 읽게 됩니다.

        Q) 가까운 순서의 기준은???? 데이터노드에서 다른 데이터노드를 접근한다는 말??? 갑자기 클라이언트가 데이터노드라면..에서 헷깔리는 문구 임.

    4) 클라이언트는 데이터노드에게 블록을 조회할 것을 요청합니다.

    5) 데이터노드는 클라이언트에게 요청한 데이터를 전송합니다.

    6) 클라이언트는 애플리케이션에게 전송받은 데이터를 전달합니다.

 

5) 보조 네임노드(Secondary Name Node)

HDFS에서 보조 네임노드라는 친구가 있습니다.  왜 보조 네임노드가 나왔을까요? 네임노드에 무슨 문제가????

네임노드는 HDFS의 메타데이터를 관리하기 위해 에디트(EditLog)와 파일 시스템 이미지(FsImage)파일을 사용합니다.

    •  에디트 로그는 HDFS의 메타데이터에 대한 모든 변화(저장,삭제, 파일 위치 변경 등)를 기록하는 로그 파일 입니다.
      또한 에디트 로그는 용량에 제한 없이 커질 수 있으며, 네임노드의 로컬 파일 시스템에 파일로 저장 됩니다.
    • 파일 시스템 이미지 파일은 파일 시스템의 네임스페이스(디렉토리명, 파일명, 상태정보)와 파일에 대한 블록 매핑 정보를 저장하는 파일입니다.
      한마디로 표현하면 HDFS의 스냅샷 이라고 할 수 있습니다. 파일 시스템 이미지도 에디트 로그처럼 네임노드의 로컬 파일 시스템에 파일로 저장 됩니다.

그렇다면 네임노드는 메타데이터를 관리하기 위해 위의 두파일을 어떻게 사용할까요???

네임노드는 파일 시스템의 네임스페이스(디렉토리명, 파일명, 상태정보)와 블록 매핑 정보를  메모리에서 유지하며, 네임노드가 구동할 경우 다음과 같은 단계로 파일 시스템 이미지 파일과 에디트 로그를 사용 합니다.

    1. 네임노드가 구동되면 로컬에 저장된 파일 시스템 이미지 파일과 에디트 로그 파일을 조회.
    2. 에디트 로그 파일에 있는 내용을 토대로 메모리에 올라와 있는 파일 시스템 이미지를 갱신.(메모리 갱신)
    3. 메모리에 올라와 있는 파일 시스템 이미지를 로컬 파일에 있는 파일 시스템 이미지 파일에 적용.(로컬 갱신)
    4. 에디트 로그 파일을 초기화.

앞서 에디트 로그의 파일은 용량에 제한 없이 커질 수 있다고 하였습니다. 만약 에디트 로그 파일이 너~~~무 크다면 2번 단계에서 진행할 때 많은 시간이 소용될 것 입니다.

또한 파일 시스템 이미지 파일을 파일에 변경이 있을 때마다 갱신한다면 파일 시스템 이미지 파일은 기가바이트 이상으로 커지게 되며, 메모리에 로딩하지 못하는 사태가 일어날 수도 있습니다.

이러한 문제를 해결하기 위해 HDFS는 보조 네임노드를 사용 합니다.

보조 네임노드주기적으로 네임노드의 파일 시스템 이미지 파일을 갱신(메모리, 로컬 갱신)하는 역할을 하며, 이러한 작업을 체크포인트(Check Point)라고 합니다.

※ 보조 네임노드를 체크포인팅 서버라고 표현하기도 함.

 

그림_f) 보조 네임노드의 체크포인팅 단계

 

 

 

 1) 보조 네임노드는 네임노드에게 에디트 로그 파일을 롤링할 것을 요청.

    ※ 로그롤링은 현재 로그파일의 이름을 변경하고, 원래 이름으로 새 로그 파일을 만드는 것 입니다.

 2) 네임노드는 기존 에디트 로그 파일을 롤링한 후, 새로운 에디트 로그 파일을 생성.

 3) 보조 네임노드는 롤링된 에디트 로그 파일과 파일 시스템 이미지 파일을 다운로드 합니다.

 4) 보조 네임노드는 기존 파일 시스템 이미지 파일을 메모리에 올리고, 에디트 로그 파일에 있는 로그를 메모리에 올라와 있는 파일 시스템 이미지에 갱신. 

     갱신이 완료되면 새로운 파일 시스템 이미지 파일이 생성되며, 이 파일이 체크포인트용으로 사용 됩니다.(병합)

 5) 보조 네임노드는 체크포인트용 파일 시스템 이미지 파일을 네임노드에게 전송.

 6) 네임노드는 기존의 파일 시스템 이미지 파일을 체크포인트용 파일 시스템 이미지 파일로 롤링!

     또한 에디트 로그 파일도 2단계에서 생성된 에디트 로그 파일로 변경합니다.

 

 체크포인팅이 완료되면 파일 시스템 이미지 파일은 최신 내역으로 갱신되며, 에디트 로그 파일의 크기고 축소 됩니다.

 체크 포인팅은 1시간마다 한번씩 일어나며, 하둡 환경설정 파일에서 fs.checkpoint.period 속성값을 수정해서 제어할 수 있습니다.

 보조 네임노드는 네임노드의 파일 시스템 이미지를 축소 시켜주는 역할을 담당하지, 백업 서버가 아닙니다!

 

HDFS 명령어 사용

하둡은 사용자가 HDFS를 쉽게 제어할 수 있게 쉘 명령어를 제공 합니다. 이 쉘 명령어는 FileSystem Shell(이하 fs 쉘) 이라고 하며, 다음과 같은 형식으로 하둡 홈 디렉토리에서 실행할 수 있습니다.

./bin/hadoop fs -cmd [args] 

cmd는 사용자가 설정한 명령어이고, args는 해당 명령어를 실행할 때 필요한 파라미터를 의미 합니다.

fs쉘에서 어떤 명령어가 제공되는지는 "hadoop fs -help"라고 입력하면 확인할 수 있습니다.

 

명령어

명령어내용사용법비고
    파일 목록 보기 - ls, lsr
ls현재 디렉토리만을 출력./bin/hadoop fs -ls [디렉토리|파일...] 
lsr현재 디렉토리의 하위 디렉토리 정보까지 출력./bin/hadoop fs -lsr [디렉토리|파일...] 
   파일 용량 확인 - du, dus
 du 지정한 디렉토리나 파일의 사용량을 확인,
 바이트 단위로 결과를 출력!
./bin/hadoop fs -du 
 dus 전체 합계 용량만 출력./bin/hadoop fs -dus <디렉토리/파일...>경로를 지정하지 않을 경우, 사용자 계정의 홈 디렉토리에 있는
모든 디렉토리의 사용량을 합산해서 출력
 파일 내용 보기 - cat, text
cat  지정한 파일의 내용을 화면에 출력./bin/hadoop fs -cat [파일...] 텍스트 파일만 출력할 수 있습니다.
text 지정한 파일의 내용을 화면에 출력./bin/hadoop fs -text [파일...]zip파일 형태로 압축된 파일도 텍스트 형태로 화면에 출력 
 파일 복사 - put, get, getmerge, cp, copyFromLocal, copyToLocal    
 put지정한 로컬 파일 시스템의 파일 및 디렉토리를
목적지 경로로 복사합니다.
 ./bin/hadoop fs -put [로컬 디렉토리|파일...] [목적지 디렉토리|파일...] 
 copyFromLocalput 명령어와 동일한 기능을 제공.  ./bin/hadoop fs -copyFromLocal[로컬 디렉토리|파일...] [목적지 디렉토리|파일...] 
getHDFS에 저장된 데이터를
로컬 파일 시스템으로 복사
  ./bin/hadoop fs -get<ignoreCrc> <-crc> [소스 디렉토리|파일...] [로컬 디렉토리|파일...]
※ -crc 옵션을 사용하면 로컬 파일 시스템에 체크섬 파일도 복사 됨.
     -ignoreCrc 옵션을 사용하면 해당 파일의 체크섬을 확인하지 않음.
HDFS는 파일의 무결성을 확인하기 위해 체크섬(checksum) 기능을
사용하는데, 체크섬을 숨김파일로 저장하고, 해당 파일을 조회할 때
체크섬을 사용해 무결성을 확인. 
 getmerge지정한 경로에 있는 모든 파일의 내용을 합친 후,
로컬 파일 시스템에 단 하나의 파일로 복사.
./bin/hadoop fs -getmerge [소스 디렉토리|파일...] [로컬 파일명] 
 cp지정한 소스 디렉토리 및 파일을 목적지 경로로
복사하는 기능을 제공.
./bin/hadoop fs -cp [소스 디렉토리|파일...] [목적지 디렉토리|파일] 
 copyToLocal get 명령어와 동일한 기능을 제공../bin/hadoop fs -copyToLocal<ignoreCrc> <-crc> [소스 디렉토리|파일...] [로컬 디렉토리|파일...]   
 디렉토리 생성 - mkdir   
 mkdir지정한 경로에 디렉토리를 생성할 수 있음../bin/hadoop fs -mkdir [디렉토리]HDFS에 이미 존재하는 디렉토리를 생성할 경우 오류가 발생. 
 파일 이동 - mv, moveFromLocal  
 mv소스 디렉토리 및 파일을 목적지 경로로 옮김. ./bin/hadoop fs -mv [소스 디렉토리|파일...] [목적지 디렉토리|파일]여러 개의 파일을 이동시킬 경우, 반드시 목적지 경로를
디렉토리로 설정해야 함.
 moveFromLocalput 명령어와 동일하게 동작하지만
로컬 파일 시스템으로 파일이 복사된 후 소스 경로의
파일은 삭제 됨.
 ./bin/hadoop fs -moveFromLocal [소스 디렉토리|파일...] [로컬디렉토리|파일] 
 파일 삭제하기 - rm
 rm지정한 디렉토리나 파일을 삭제 함. ./bin/hadoop fs -rm [디렉토리|파일...]  디렉토리는 반드시 비어 있는 경우에만 삭제할 수 있음.
 디렉토리 삭제하기 - rmr   
 rmr지정한 파일 및 디렉토리를 삭제 함. ./bin/hadoop fs -rmr [디렉토리|파일...]  비어있지 않은 디렉토리도 정상적으로 삭제 함.
 카운트값 조회 - count   
 count기본적으로 지정한 경로에 대한 전체 디렉토리 개수,
전체 파일 개수, 전체 파일 사이즈, 지정한 경로 이름을 출력. 
./bin/hadoop fs -count <-q> [디렉토리|파일...] HDFS는 디렉토리에서 생성할 수 있는 파일 개수나 파일 용량을
제한할 수 있음. -q 옵션을 사용할 경우, 이러한 쿼터 정보를 확인. 
파일의 마지막 내용 확인 - tail    
 tail지정한 파일의 마지막 1KB의 내용을 화면에 출력 함. ./bin/hadoop fs -tail <-f> [파일]  -f 옵션 사용시 해당 파일에 내용이 추가될 때 화면에 출력된 내용도
함께 갱신. 
권한 변경 - chmod, chown, chgrp    
 chmod지정한 경로에 대한 권한을 변경. ./bin/hadoop fs -chmod <-R> [권한모드...] [디렉토리|파일...]  -R 옵션 사용 시 하위 디렉토리 설정도 모두 변경 됨. 
 chown지정한 파일과 디렉토리에 대한 소유권을 변경하는 명령어. ./bin/hadoop fs -chown <-R> [변경 사용자명:변경 그룹명] [디렉토리|파일...]   -R 옵션 사용 시 하위 디렉토리 설정도 모두 변경 됨.  
 chgrp지정한 파일과 디렉토리에 대한 소유권 급만 변경. ./bin/hadoop fs -chown <-R> [변경 그룹명] [디렉토리|파일...]    -R 옵션 사용 시 하위 디렉토리 설정도 모두 변경 됨.  
0 바이트 파일 생성 - touchz    
 touchz크기가 0바이트인 파일을 생성. ./bin/hadoop fs -touchz [파일...]   지정한 파일이 이미 0바이트 이상인 상태로 저장돼 있다면 오류 발생. 
 복제 데이터 개수 변경 - setrep   
 setrep설정한 파일의 복제 데이터 개수를 변경할 수 있음. ./bin/hadoop fs -setrep <-R> -w [복제데이터개수] [디렉토리|파일...]   -R 옵션 사용 시 하위 디렉토리에 있는 파일의 복제 데이터 개수도 변경 됨. 
 휴지통 비우기 - expunge   
 expunge주기와 상관 없이 휴지통을 비운다.  ./bin/hadoop fs -expungeHDFS에서는 삭제한 파일을 ".Trash/"라는 임시 디렉토리에 저장한 후, 
일정 시간이 지난 후에 완전히 삭제합니다. 
 파일 형식 확인 - test   
 test지정한 경로에 대해[-ezd] 옵션으로 경로가 이미 존재하는지
파일 크기가 0인지, 디렉토리인지 확인 함. 
./bin/hadoop fs -test -ezd [디렉토리|파일]     체크 결과가 맞을 경우 0을 출력 한다. 
통계 정보 조회 - stat    
 stat지정한 경로에 대한 통계 정보를 조회 ./bin/hadoop fs -stat <출력 포맷> [디렉토리|파일...]  별도의 옵션을 설정하지 않을 경우, 해당 디렉토리 혹은 파일이 
최종 수정된 날짜를 출력 함. 

 

 ※ 표 stat 명령어의 출력 포맷 옵션

옵 션내 용
%b블록 단위의 파일 크기
%F디렉토리일 경우 "directory", 일반 파일일 경우 "regular file" 출력
%n디렉토리명 혹은 파일명
%o블록 크기
%r복제 파일 개수
%y디렉토리 및 파일의 갱신일자를 yyyy-MM-dd HH:mm:ss 형식으로 출력
%Y디렉토리 및 파일의 갱신일자를 유닉스 타임스탬프 형식으로 출력

 


 

참고하면 좋을 것 같은 사이트

 http://wiki.apache.org/hadoop/FAQ

 

2014/08/27 - [BigDATA/Hadoop] - 01. 하둡 소개

 

참고 BOOK

시작하세요! 하둡프로그래밍(기초부터 실무까지 하둡의 모든 것), 정재화 저

 

    - END -


저작자 표시 비영리 변경 금지
신고

'BigDATA > Hadoop' 카테고리의 다른 글

부록. 하둡 설치  (0) 2014.09.11
03. 맵리듀스 시작하기 - 맵-리듀스 개념  (5) 2014.09.01
02. About HDFS..  (0) 2014.08.28
01. 하둡 소개  (0) 2014.08.27
[하둡교육 3일차] Pig  (0) 2013.06.05
[하둡교육 3일차] Zookeeper  (0) 2013.06.05

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

01. 하둡 소개

BigDATA/Hadoop 2014.08.27 17:39
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

 

 

목차

빅데이터 3대 요소

하둡이란?

하둡의 과제

하둡 배포판 살펴보기

정리

빅데이터 3대 요소

1) 크기(Volume) - 기존 파일 시스템에 저장하기 어려울뿐더러 데이터 분석을 위해 사용하는 기존 DW 같은 솔루션에서 소화하기 어려울 정도로 급격하게 데이터의 양이 증가 함.

2) 속도(Velocity) - 데이터가 매우 빠른 속도로 생성되기때문에 데이터의 생산, 저장, 유통, 수집, 분석이 실시간으로 처리돼야 함.

3) 다양성(Variety) - 다양한 종류의 데이터들이 빅 데이터를 구성하고 있음(정형, 반정형, 비정형 데이터)

 

하둡이란?

하둡은 2005년에 더그 커팅(Doug Cutting)이 구글이 논문으로 발표한 GFS(Google File System)와 맵리듀스(MapReduce)를 구현한 결과물 입니다.

처음에는 오픈소스 검색엔진인 너치(Nutch)에 적용하기 위해 시작됐다가 이후 독립적인 프로젝트로 만들어졌고, 2008년에는 아파치 최상위 프로젝트로 승격 됨.

하둡은 분산 파일 시스템인 HDFS(Hadoop Distributed File System)에 데이터를 저장하고, 분산 처리 시스템인 MapReduce를 이용해 데이터를 처리 합니다.

즉, 하둡을 통해 정말 큰 데이터를 저장할 수 있고, 그 데이터를 이용해서 연산을 수행할 수 있습니다. 이를 위한 2가지가 바로 HDFS와 MapReduce(2ver에서는 YARN) 입니다.

 

하둡은 비즈니스에 효율적으로 적용할 수 있게 다양한 서브 프로젝트가 제공 되어집니다. 이러한 프로젝트가 상용화되면서 하둡 에코시스템(Hadoop Ecosystem)이 구성됐습니다.

 

그림1. 하둡 에코시스템

 

 

 

하둡의 과제
    1. 고가용성 지원 X :  하둡의 가장 큰 문제는 바로 고가용성(HA: High Availability) 을 지원하지 않습니다.
                                   그래서 클라우데라, 야후, 페이스북 같은 업체에서는 자신만의 고가용성 솔루션을 만들어 공개했습니다.
                                   하둡 2.0 버전에서 네임노드의 고가용성을 지원하겠다고 발표했었다고 하니..현재 2.0버전이 나왔으니 진짜 지원을 하는지 나중에 하둡2.0스터디를할 때 집고 넘어가야겠습니다.

    2. 파일 네임스페이스 제한 : 네임노드가 관리하는 메타 정보는 메모리로 관리되기 때문에 메모리의 크기에 따라 HDFS에 저장하는 파일과 디렉터리 개수가 제한을 받음.

    3. 데이터 수정 불가 : 하둡의 또 다른 단점은 한 번 저장한 파일은 더는 수정할 수 없다는 것 입니다. HDFS에 파일을 저장하면 파일의 이동이나 이름 변경과 같은 작업은 가능하지만 저장된 파일의 내용은 수정할 수 없습니다.
                                    그래서 파일 읽기나 배치 작업만이 하둡에 적당합니다. 이러한 문제점도 조금씩 개선되고 있습니다. 하둡0.21 버전에서는 기존에 저장된 파일에 내용을 불일 수 있는 append 기능이 제공됩니다.

    4. POSIX 명령어 미지원 : 기존 파일 시스템에서 사용하던 rm, mv 같은 POSIX 형식의 파일 명령어를 이용할 수 없습니다. 하둡에서 제공하는 별도의 쉘 명령어와 API를 이용해 파일을 제어해야만 합니다.

하둡 배포판 살펴보기

주요 하둡 배포판 

    • Cloudera(클라우데라) Hortonworks(호튼웍스)
    • MapR Technologies(MapR 테크놀로지스)
    • Amazon(아마존)
    • Hstreaming

 

참고

책 : 시작하세요! 하둡 프로그래밍(기초에서 실무까지 하둡의 모든것, 정재화 지음)

 

하둡 기초 용어 설명

http://www.slideshare.net/madvirus/ss-28761748

하둡2 YARN

http://www.slideshare.net/madvirus/2-yarn

 

- 끝 -

저작자 표시 비영리 변경 금지
신고

'BigDATA > Hadoop' 카테고리의 다른 글

03. 맵리듀스 시작하기 - 맵-리듀스 개념  (5) 2014.09.01
02. About HDFS..  (0) 2014.08.28
01. 하둡 소개  (0) 2014.08.27
[하둡교육 3일차] Pig  (0) 2013.06.05
[하둡교육 3일차] Zookeeper  (0) 2013.06.05
[하둡교육 2일차] Hadoop 설치  (0) 2013.06.04

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[하둡교육 3일차] Pig

BigDATA/Hadoop 2013.06.05 11:44
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



Pig set up


1) [root@localhost root]# wget http://www.dazum.net/hadoop/pig-0.10.0.tar.gz : 소스를 가져온다
2) [root@localhost root]# tar xvf pig-0.10.0.tar.gz                                             : 압축을 푼다

3) [root@localhost root]# ln -s pig-0.10.0 pig          : 심볼릭 링크 걸어준다 버전 관리를 위해)

4) [root@localhost root]# vi /etc/profile                  : 환경 셋팅을 해준다. root 기준임.

    export PIG_HOME=/home/root/pig
    export PIG_CLASSPATH=$HADOOP_HOME/conf
    pathmunge /home/root/pig/bin


[root@localhost root]# source /etc/profile             : 프로파일을 적용 해준다.

5) pig

[root@localhost root]# pig                                     : pig 실행
Warning: $HADOOP_HOME is deprecated.

2013-06-05 10:29:49,282 [main] INFO  org.apache.pig.Main - Apache Pig version 0.10.0 (r1328203) compiled Apr 19 2012, 22:54:12
2013-06-05 10:29:49,282 [main] INFO  org.apache.pig.Main - Logging error messages to: /home/root/pig_1370395789279.log
2013-06-05 10:29:49,479 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://node01:9000/
2013-06-05 10:29:49,647 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: node01:9001
grunt>


some node

[root@localhost ~]# hadoop dfsadmin -safemode leave


prepare example

1) [root@localhost ~]# vi pig.txt

    aaa,100
    bbb.200
    ccc,300
    bbb,400


2) [root@localhost ~]# hadoop fs -put pig.txt .


3) [root@localhost ~]# hadoop fs -ls
Warning: $HADOOP_HOME is deprecated.
Found 1 items
-rw-r--r--   2 root supergroup         32 2013-06-05 11:07 /user/root/pig.txt



pig

grunt> ls
hdfs://node01:9000/user/root/pig.txt<r 2>    32
grunt> cat pig.txt
aaa,100
bbb.200
ccc,300
bbb,400
grunt>


grunt> cp pig.txt pig2.txt
grunt> ls
hdfs://node01:9000/user/root/pig.txt<r 2>    32
hdfs://node01:9000/user/root/pig2.txt<r 2>    32


grunt> illustrate c;

여러가지 커맨드들이 있으며, pig는 map Reduce를 간단히 처리 할 수 있도록 해준다.


교육 자체가..실습보단 하는 걸 보여주었다..아쉽게 직접해봐야 포스팅도 알찰텐데..ㅠ_ㅠ 

직접 해보면서 정리를 해야 할 것 같다..ㅎㅎ 


-끝-



저작자 표시 비영리 변경 금지
신고

'BigDATA > Hadoop' 카테고리의 다른 글

03. 맵리듀스 시작하기 - 맵-리듀스 개념  (5) 2014.09.01
02. About HDFS..  (0) 2014.08.28
01. 하둡 소개  (0) 2014.08.27
[하둡교육 3일차] Pig  (0) 2013.06.05
[하둡교육 3일차] Zookeeper  (0) 2013.06.05
[하둡교육 2일차] Hadoop 설치  (0) 2013.06.04

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[하둡교육 3일차] Zookeeper

BigDATA/Hadoop 2013.06.05 10:26
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



Zookeeper 필요성

하둡 이전에 이미 있었던 녀석이다.

특징

 1) in-Memory DB(file DB) : 메모리상에 모든걸 다 가지고 있음.(전원이 나가도 무관 - 디스크에 백업은 함, 전원을 키면 디스크에서 읽어들여 다시 메모리에 올림.)

 2) 분산 : 데이터 백업에 대해서 고민 하지 않아도 된다.

             서버 3대에 Zookeeper가 있다면, 분산으로 같은 데이터를 메모리, disk에 가지고 있다.

 

하둡이 왜 Zookeeper가 필요로 했나?

일반적인 분산 시스템 구조 : Master/Slave

Master가 죽으면 다 죽음. HDFS에서 Master가 메타데이터를 가지고 있고, Slave가 데이터를 가지고 있음.


성능을 고려 했을 때, 


(출처 : http://zookeeper.apache.org/doc/trunk/images/zkservice.jpg)


최근 HA방식(마스터 2개) - Active, Stand-By : Active에 부하 심함 

=> Active, Active 방식(데이터 동기화 문제 있음) => Leader/Follower 구조 (리더 권한은 서로 주고 받음)

ex) update시 Follower를 통해 Reader에 요청을 넘기고 Reader가 우선 자기 자신에 파일에 쓰고 나머지도 브로드 캐스팅 해줌. (메모리 저장), done 보고 , Reader가 commit


Zookeeper 데이터 모델

 - 디렉토리만 있음.(데이터를 가지는 디렉토리)

 - 임시노드(세션이 삭제되면 임시노드도 삭제)

 - 시퀀스 노드

 - 고속처리

    초당 : 5만번 변경, 20만번 읽기


Zookeeper API - 참고 : http://zookeeper.apache.org/doc/r3.4.1/api/

 - String create(..) 

 - void delete(..)

   등등


Zookeeper의 Watch 기능 

 클라이언트는 특정 znode에 Watch를 설정 -> znode 변경이 발생하면 클라이언트에게 알려 줌.

 노드 변경 시 Zookeeper가 알려 줌.(push 서비스라 생각하면 됨.)


Zookeeper는 최소 3대로 해야 좋다.

 

출처 : http://cfile7.uf.tistory.com/image/183AD14F4D40129D2C08C4










저작자 표시 비영리 변경 금지
신고

'BigDATA > Hadoop' 카테고리의 다른 글

03. 맵리듀스 시작하기 - 맵-리듀스 개념  (5) 2014.09.01
02. About HDFS..  (0) 2014.08.28
01. 하둡 소개  (0) 2014.08.27
[하둡교육 3일차] Pig  (0) 2013.06.05
[하둡교육 3일차] Zookeeper  (0) 2013.06.05
[하둡교육 2일차] Hadoop 설치  (0) 2013.06.04

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[하둡교육 2일차] Hadoop 설치

BigDATA/Hadoop 2013.06.04 13:22
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



하둡을 설치 하기 위해 교육은 오라클 버추얼 박스로 진행 하였다.

아쉽게 전체적인 셋팅을 소개 할 수는 없을 것 같다. 강사님이 미리 준비해오고 셋팅 다해오셨다 ㅋㅋ;;


1. JDK 설치

  OpenJdk는 하둡에서 오류가 난다고 한다. 오라클 sun jdk를 셋팅 하도록 하자.


2. JAVA_HOME 설정

  보통 일반 계정이라면 .bash_profile에 셋팅을 해주지만 이번 교육에서는 root로 잡아줬기 때문에

  /etc/profile에서 PATH를 잡아주었다.


3. 하둡 복사 및 설치

   하둡..이것 또한 미리 가져와있다 ㅋㅋ; hadoop-1.0.4-bin.tar.gz이라는 파일!!

   tar xvf hadoop-1.0.4-bin.tar.gz 로 압축을 해제 해준다.



자주 쓰는 하둡 명령어

confirm daemon

[root@localhost conf]# hadoop dfsadmin -report


start-all.sh

stop-all.sh


ssh
ssh-keygen
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys


/media/sf_shared/sample_data

root@localhost sample_data]# hadoop fs -put /media/sf_shared/sample_data/cite75_99.txt /usr/root/test/cite.txt


hadoop  fs -put /media/sf_shared/sample_data/apat63_99.txt /usr/root/test/apat.txt


[root@localhost usr]# hadoop fs -lsr /
Warning: $HADOOP_HOME is deprecated.

drwxr-xr-x   - root supergroup          0 2013-06-04 13:14 /home
drwxr-xr-x   - root supergroup          0 2013-06-04 13:14 /home/root
drwxr-xr-x   - root supergroup          0 2013-06-04 13:14 /home/root/hadoop-1.0.4
drwxr-xr-x   - root supergroup          0 2013-06-04 13:14 /home/root/hadoop-1.0.4/tmp
drwxr-xr-x   - root supergroup          0 2013-06-04 13:21 /home/root/hadoop-1.0.4/tmp/mapred
drwx------   - root supergroup          0 2013-06-04 13:21 /home/root/hadoop-1.0.4/tmp/mapred/system
-rw-------   2 root supergroup          4 2013-06-04 13:21 /home/root/hadoop-1.0.4/tmp/mapred/system/jobtracker.info
drwxr-xr-x   - root supergroup          0 2013-06-04 13:27 /usr
drwxr-xr-x   - root supergroup          0 2013-06-04 13:27 /usr/root
drwxr-xr-x   - root supergroup          0 2013-06-04 13:29 /usr/root/test
-rw-r--r--   2 root supergroup  236902953 2013-06-04 13:29 /usr/root/test/apat.txt
-rw-r--r--   2 root supergroup  264075414 2013-06-04 13:27 /usr/root/test/cite.txt


[root@localhost usr]# hadoop fsck /usr/root/test/cite.txt -files -blocks -locations -racks
Warning: $HADOOP_HOME is deprecated.

FSCK started by root from /192.168.56.102 for path /usr/root/test/cite.txt at Tue Jun 04 13:30:27 KST 2013
/usr/root/test/cite.txt 264075414 bytes, 4 block(s):  OK
0. blk_1184698969449250244_1005 len=67108864 repl=2 [/default-rack/192.168.56.103:50010, /default-rack/192.168.56.102:50010]
1. blk_-4684336584511364745_1005 len=67108864 repl=2 [/default-rack/192.168.56.103:50010, /default-rack/192.168.56.102:50010]
2. blk_4237572107572422623_1005 len=67108864 repl=2 [/default-rack/192.168.56.103:50010, /default-rack/192.168.56.102:50010]
3. blk_-3592843786766369632_1005 len=62748822 repl=2 [/default-rack/192.168.56.103:50010, /default-rack/192.168.56.102:50010]

Status: HEALTHY
 Total size:    264075414 B
 Total dirs:    0
 Total files:    1
 Total blocks (validated):    4 (avg. block size 66018853 B)
 Minimally replicated blocks:    4 (100.0 %)
 Over-replicated blocks:    0 (0.0 %)
 Under-replicated blocks:    0 (0.0 %)
 Mis-replicated blocks:        0 (0.0 %)
 Default replication factor:    2
 Average block replication:    2.0
 Corrupt blocks:        0
 Missing replicas:        0 (0.0 %)
 Number of data-nodes:        2
 Number of racks:        1
FSCK ended at Tue Jun 04 13:30:27 KST 2013 in 2 milliseconds


---------------------mapReduce's sample-----------------------------------

hadoop-examples-1.0.4.jar

jar <jar>            run a jar file


[root@localhost hadoop-1.0.4]# hadoop jar hadoop-examples-1.0.4.jar
Warning: $HADOOP_HOME is deprecated.

An example program must be given as the first argument.
Valid program names are:
  aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.
  aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files.
  dbcount: An example job that count the pageview counts from a database.
  grep: A map/reduce program that counts the matches of a regex in the input.
  join: A job that effects a join over sorted, equally partitioned datasets
  multifilewc: A job that counts words from several files.
  pentomino: A map/reduce tile laying program to find solutions to pentomino problems.
  pi: A map/reduce program that estimates Pi using monte-carlo method.
  randomtextwriter: A map/reduce program that writes 10GB of random textual data per node.
  randomwriter: A map/reduce program that writes 10GB of random data per node.
  secondarysort: An example defining a secondary sort to the reduce.
  sleep: A job that sleeps at each map and reduce task.
  sort: A map/reduce program that sorts the data written by the random writer.
  sudoku: A sudoku solver.
  teragen: Generate data for the terasort
  terasort: Run the terasort
  teravalidate: Checking results of terasort
  wordcount: A map/reduce program that counts the words in the input files.


Usage: wordcount <in> <out>


[root@localhost hadoop-1.0.4]# hadoop jar hadoop-examples-1.0.4.jar wordcount /usr/root/test/cite.txt /usr/root/test/output/wc
Warning: $HADOOP_HOME is deprecated.

13/06/04 13:39:55 INFO input.FileInputFormat: Total input paths to process : 1
13/06/04 13:39:55 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/06/04 13:39:55 WARN snappy.LoadSnappy: Snappy native library not loaded
13/06/04 13:39:55 INFO mapred.JobClient: Running job: job_201306041320_0001
13/06/04 13:39:56 INFO mapred.JobClient:  map 0% reduce 0%
13/06/04 13:40:13 INFO mapred.JobClient:  map 13% reduce 0%
13/06/04 13:40:16 INFO mapred.JobClient:  map 19% reduce 0%
13/06/04 13:40:17 INFO mapred.JobClient:  map 33% reduce 0%
13/06/04 13:40:19 INFO mapred.JobClient:  map 39% reduce 0%
13/06/04 13:40:20 INFO mapred.JobClient:  map 45% reduce 0%
13/06/04 13:40:22 INFO mapred.JobClient:  map 52% reduce 0%
13/06/04 13:40:23 INFO mapred.JobClient:  map 59% reduce 0%
13/06/04 13:40:25 INFO mapred.JobClient:  map 66% reduce 0%
13/06/04 13:40:26 INFO mapred.JobClient:  map 71% reduce 0%
13/06/04 13:40:28 INFO mapred.JobClient:  map 78% reduce 0%
13/06/04 13:40:29 INFO mapred.JobClient:  map 85% reduce 0%
13/06/04 13:40:32 INFO mapred.JobClient:  map 92% reduce 0%
13/06/04 13:40:35 INFO mapred.JobClient:  map 100% reduce 0%
13/06/04 13:41:08 INFO mapred.JobClient:  map 100% reduce 8%
13/06/04 13:41:14 INFO mapred.JobClient:  map 100% reduce 42%
13/06/04 13:41:15 INFO mapred.JobClient:  map 100% reduce 67%
13/06/04 13:41:17 INFO mapred.JobClient:  map 100% reduce 72%
13/06/04 13:41:20 INFO mapred.JobClient:  map 100% reduce 76%
13/06/04 13:41:23 INFO mapred.JobClient:  map 100% reduce 83%
13/06/04 13:41:26 INFO mapred.JobClient:  map 100% reduce 87%
13/06/04 13:41:29 INFO mapred.JobClient:  map 100% reduce 89%
13/06/04 13:41:30 INFO mapred.JobClient:  map 100% reduce 93%
13/06/04 13:41:38 INFO mapred.JobClient:  map 100% reduce 98%
13/06/04 13:41:39 INFO mapred.JobClient:  map 100% reduce 100%
13/06/04 13:41:44 INFO mapred.JobClient: Job complete: job_201306041320_0001
13/06/04 13:41:44 INFO mapred.JobClient: Counters: 29
13/06/04 13:41:44 INFO mapred.JobClient:   Job Counters
13/06/04 13:41:44 INFO mapred.JobClient:     Launched reduce tasks=2
13/06/04 13:41:44 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=198184
13/06/04 13:41:44 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
13/06/04 13:41:44 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
13/06/04 13:41:44 INFO mapred.JobClient:     Launched map tasks=4
13/06/04 13:41:44 INFO mapred.JobClient:     Data-local map tasks=4
13/06/04 13:41:44 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=81790
13/06/04 13:41:44 INFO mapred.JobClient:   File Output Format Counters
13/06/04 13:41:44 INFO mapred.JobClient:     Bytes Written=297057497
13/06/04 13:41:44 INFO mapred.JobClient:   FileSystemCounters
13/06/04 13:41:44 INFO mapred.JobClient:     FILE_BYTES_READ=899236112
13/06/04 13:41:44 INFO mapred.JobClient:     HDFS_BYTES_READ=264084033
13/06/04 13:41:44 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=1262356574
13/06/04 13:41:44 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=297057497
13/06/04 13:41:44 INFO mapred.JobClient:   File Input Format Counters
13/06/04 13:41:44 INFO mapred.JobClient:     Bytes Read=264083609
13/06/04 13:41:44 INFO mapred.JobClient:   Map-Reduce Framework
13/06/04 13:41:44 INFO mapred.JobClient:     Map output materialized bytes=363133337
13/06/04 13:41:44 INFO mapred.JobClient:     Map input records=16522438
13/06/04 13:41:44 INFO mapred.JobClient:     Reduce shuffle bytes=363133337
13/06/04 13:41:44 INFO mapred.JobClient:     Spilled Records=57419402
13/06/04 13:41:44 INFO mapred.JobClient:     Map output bytes=330165166
13/06/04 13:41:44 INFO mapred.JobClient:     CPU time spent (ms)=97010
13/06/04 13:41:44 INFO mapred.JobClient:     Total committed heap usage (bytes)=673988608
13/06/04 13:41:44 INFO mapred.JobClient:     Combine input records=33041386
13/06/04 13:41:44 INFO mapred.JobClient:     SPLIT_RAW_BYTES=424
13/06/04 13:41:44 INFO mapred.JobClient:     Reduce input records=16518948
13/06/04 13:41:44 INFO mapred.JobClient:     Reduce input groups=16518948
13/06/04 13:41:44 INFO mapred.JobClient:     Combine output records=33037896
13/06/04 13:41:44 INFO mapred.JobClient:     Physical memory (bytes) snapshot=838295552
13/06/04 13:41:44 INFO mapred.JobClient:     Reduce output records=16518948
13/06/04 13:41:44 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=2260516864
13/06/04 13:41:44 INFO mapred.JobClient:     Map output records=16522438

---------------------mapReduce's sample-----------------------------------


------------------------------add another server~-----------------------------------

1) change host name

/etc/sysconfig/network


add node03


2) hadoop tar xvf


#node01 server

(1) conf/slaves add node03

[root@localhost conf]# pwd
/home/root/hadoop-1.0.4/conf


[root@localhost conf]# vi slaves 


add node03


(2) /etc/hosts  add node03

[root@localhost conf]# vi /etc/hosts

192.168.56.102 node01

192.168.56.103 node02
192.168.56.104 node03


(3) /etc/profile, hosts, conf files copy node01-> node03  also copy ndoe01 -> node2


root@localhost conf]# scp /etc/hosts node03:/etc/

root@localhost conf]# scp /etc/hosts node02:/etc/


[root@localhost conf]# scp /home/root/hadoop-1.0.4/conf/* node03:/home/root/hadoop-1.0.4/conf/

[root@localhost conf]# scp /home/root/hadoop-1.0.4/conf/* node02:/home/root/hadoop-1.0.4/conf/


[root@localhost conf]# scp /etc/profile node03:/etc/


if you set up pssh...you don't this work!

------------------------------add another server~-----------------------------------



-----------------------------start damon----------------------------------------------



[root@localhost conf]# ssh node03 /home/root/hadoop-1.0.4/bin/hadoop-daemon.sh start datanode


but you have to delete..iptalbes already start..

1) [root@localhost conf]# ssh node03 /home/root/hadoop-1.0.4/bin/hadoop-daemon.sh stop datanode

2) root@localhost conf]# ssh node03 service iptables stop
iptables: Flushing firewall rules: [  OK  ]
iptables: Setting chains to policy ACCEPT: filter [  OK  ]
iptables: Unloading modules: [  OK  ]

3) [root@localhost conf]# hadoop dfsadmin -report


result :  Datanodes available: 3 (3 total, 0 dead)


-----------------------------start damon----------------------------------------------


---------------balancing--------------------------------------

[root@localhost conf]# hadoop balancer -threshold 1


[root@localhost conf]# hadoop balancer -threshold 1
Warning: $HADOOP_HOME is deprecated.

13/06/04 14:14:15 INFO balancer.Balancer: Using a threshold of 1.0
Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved
13/06/04 14:14:16 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.56.102:50010
13/06/04 14:14:16 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.56.104:50010
13/06/04 14:14:16 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.56.103:50010
13/06/04 14:14:16 INFO balancer.Balancer: 2 over utilized nodes: 192.168.56.102:50010 192.168.56.103:50010
13/06/04 14:14:16 INFO balancer.Balancer: 1 under utilized nodes:  192.168.56.104:50010
13/06/04 14:14:16 INFO balancer.Balancer: Need to move 349.76 MB bytes to make the cluster balanced.
13/06/04 14:14:16 INFO balancer.Balancer: Decided to move 161.66 MB bytes from 192.168.56.102:50010 to 192.168.56.104:50010
13/06/04 14:14:16 INFO balancer.Balancer: Will move 161.66 MBbytes in this iteration
Jun 4, 2013 2:14:16 PM            0                 0 KB           349.76 MB          161.66 MB
13/06/04 14:17:09 INFO balancer.Balancer: Moving block 8103612282426249076 from 192.168.56.102:50010 to 192.168.56.104:50010 through 192.168.56.103:50010 is succeeded.
13/06/04 14:17:12 INFO balancer.Balancer: Moving block -1466839656797754499 from 192.168.56.102:50010 to 192.168.56.104:50010 through 192.168.56.103:50010 is succeeded.
13/06/04 14:17:24 INFO balancer.Balancer: Moving block -3592843786766369632 from 192.168.56.102:50010 to 192.168.56.104:50010 through 192.168.56.103:50010 is succeeded.
13/06/04 14:17:46 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.56.103:50010
13/06/04 14:17:46 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.56.104:50010
13/06/04 14:17:46 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.56.102:50010
13/06/04 14:17:46 INFO balancer.Balancer: 1 over utilized nodes: 192.168.56.103:50010
13/06/04 14:17:46 INFO balancer.Balancer: 1 under utilized nodes:  192.168.56.104:50010
13/06/04 14:17:46 INFO balancer.Balancer: Need to move 123.12 MB bytes to make the cluster balanced.
13/06/04 14:17:46 INFO balancer.Balancer: Decided to move 161.66 MB bytes from 192.168.56.103:50010 to 192.168.56.104:50010
13/06/04 14:17:46 INFO balancer.Balancer: Will move 161.66 MBbytes in this iteration
Jun 4, 2013 2:17:46 PM            1            187.84 MB           123.12 MB          161.66 MB
13/06/04 14:18:39 INFO balancer.Balancer: Moving block 715304243492723016 from 192.168.56.103:50010 to 192.168.56.104:50010 through 192.168.56.103:50010 is succeeded.
13/06/04 14:21:11 INFO balancer.Balancer: Moving block 4843232263157045166 from 192.168.56.103:50010 to 192.168.56.104:50010 through 192.168.56.103:50010 is succeeded.
13/06/04 14:21:12 INFO balancer.Balancer: Moving block -8956265055413503717 from 192.168.56.103:50010 to 192.168.56.104:50010 through 192.168.56.102:50010 is succeeded.
13/06/04 14:21:13 INFO balancer.Balancer: Moving block -5391126869938599807 from 192.168.56.103:50010 to 192.168.56.104:50010 through 192.168.56.103:50010 is succeeded.
13/06/04 14:21:16 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.56.104:50010
13/06/04 14:21:16 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.56.103:50010
13/06/04 14:21:16 INFO net.NetworkTopology: Adding a new node: /default-rack/192.168.56.102:50010
13/06/04 14:21:16 INFO balancer.Balancer: 0 over utilized nodes:
13/06/04 14:21:16 INFO balancer.Balancer: 0 under utilized nodes:
The cluster is balanced. Exiting...
Balancing took 7.005833333333333 minutes

---------------balancing--------------------------------------


----------------map, Reduce sample --------------------------

[root@localhost hadoop-1.0.4]# javac -classpath hadoop-core-1.0.4.jar:lib/commons-cli-1.2.jar -d sample_source/classes/ sample_source/sources/WordCount02.java


[root@localhost hadoop-1.0.4]# jar -cvf sample_source/WordCount.jar -C sample_source/classes .


root@localhost hadoop-1.0.4]# hadoop jar sample_source/WordCount.jar WordCount02.WordCount02 /usr/root/test/cite.txt /usr/root/test/output/wc02



WordCount02.java



----------------map, Reduce sample --------------------------


하둡 관련 좋은 사이트 

http://fniko.tistory.com/4





 







저작자 표시 비영리 변경 금지
신고

'BigDATA > Hadoop' 카테고리의 다른 글

03. 맵리듀스 시작하기 - 맵-리듀스 개념  (5) 2014.09.01
02. About HDFS..  (0) 2014.08.28
01. 하둡 소개  (0) 2014.08.27
[하둡교육 3일차] Pig  (0) 2013.06.05
[하둡교육 3일차] Zookeeper  (0) 2013.06.05
[하둡교육 2일차] Hadoop 설치  (0) 2013.06.04

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바