1. visual studio 2017 설치

https://www.visualstudio.com/downloads/

(해당 버전에서는 CL.exe 가 디폴트 포함되어 있지 않기 때문에 C++ 환경을 선택해주어야 함)

(visual studio 설치시 python 과 anaconda는 같이 설치했기 때문에 해당버전을 사용)


2. CUDA 설치

https://developer.nvidia.com/cuda-downloads



3. 설치준비

SET CONDA_SSL_VERIFY=false

conda install 사용시 SSL에러가 발생한다면 verify를 잠시 해제하고 사용한다.



conda install pip six nose numpy scipy

conda install mingw libpython


4. Theano설치 - (conda install theano)

(설치 디렉토리로 이동)


git clone https://github.com/Theano/Theano.git

cd Theano

python setup.py develop

conda list



5. 환경변수 설정

- PATH 정보

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX64\x64

- THEANO_FLAGS

값 : floatX=float32,device=gpu,nvcc.fastmath=True,lib.cnmem=0.81



6. Keras 설치 - (pip install keras)

(설치 디렉토리로 이동)


git clone https://github.com/fchollet/keras

cd keras

python setup.py develop

conda list


cd keras/examples

ipython mnist_mlp.py


7. cuDNN

 기설치한 cuda와 호환되는 버전을 다운로드 후 설치된 위치로 디렉토리 copy (bin,include,lib)


참고사이트 

http://bryan7.tistory.com/709

http://jangjy.tistory.com/258


*기타 참고명령

  1. (neuralnets) C:\conda install theano
  2. (neuralnets) C:\conda install mingw libpython
  3. (neuralnets) C:\pip install tensorflow
  4. (neuralnets) C:\pip install keras

Proxy 사용할 경우 .condarc 파일 생성 후
proxy_servers:
    http: http://url:8080
    https: https://url:8080


Oozie 와의 연동

1. Ambari로 Oozie 설치 후 아래와 같이 설정

- custom oozie-site

    oozie.action.jobinfo.enable = true

    oozie.action.launcher.yarn.timeline-service.enabled = false

    oozie.service.ProxyUserService.proxyuser.root.groups = * 

    oozie.service.ProxyUserService.proxyuser.root.hosts = * 

- Advanced oozie-site

oozie.service.AuthorizationService.security.enabled=false



2. oozie관련 xml을 작성하여 지정된 위치에 업로드

(hdfs://node01:8020/user/john/oozie-sample.xml)


<workflow-app xmlns="uri:oozie:workflow:0.5" xmlns:sla="uri:oozie:sla:0.2" name="tenant_test"> <global> <job-tracker>${resourceManager}</job-tracker> <name-node>${nameNode}</name-node> </global> <start to="hdfs8"/> <action name="hdfs8"> <ssh xmlns="uri:oozie:ssh-action:0.1"> <host>root@node01</host> <command>/home/root/apps/bin/run-oozie-sample-mr.sh</command> <args>${wf:user()}</args> <args>/user/${wf:user()}/work</args> </ssh> <ok to="end"/> <error to="fail"/> </action> <kill name="fail"> <message>FAIL</message> </kill> <end name="end"/>

</workflow-app>


3. xml에서 사용할 property 설정

(/home/root/apps/config/example.properties)


# Set the Name Node URI e.g. hdfs://sandbox.hortonworks.com:8020 name.node=hdfs://node01:8020 # Set the Resource Manager URI e.g. sandbox.hortonworks.com:8050 resource.manager=node02:8050 nameNode=${name.node} jobTracker=${resource.manager} oozie.wf.application.path=hdfs://node01:8020/user/john/oozie-sample.xml oozie.use.system.libpath=true


4. oozie 실행

 oozie job -oozie http://node01:11000/oozie -config example.properties -doas john -run


5. 참고

  • user 변경

Oozie client 로 job submit 을 할 때는 user.name 속성이 적용되지 않음(os 계정)
user.name oozie command 옵션 중 -doas <userid> 를 사용

 

  • group 변경

Job submit 시 properties 파일에 oozie.job.acl 설정 추가
예: oozie.job.acl=<groupId>



'BigData' 카테고리의 다른 글

Spark에서 Hive ACID Table 접근시 오류  (0) 2017.10.12
Apache hive - transaction  (0) 2017.09.26
Hadoop Security for Multi tenant #3  (0) 2017.03.24
Hadoop Securiy for Multi tenant #2  (0) 2017.01.20
Hadoop Securiy for Multi tenant #1  (0) 2017.01.17

Livy오픈소스를 활용한 Spark impersonation


Hadoop 설정변경이 필요합니다.

1. Hadoop core-site.xml

a. core-site.xml
<property>
<name>hadoop.proxyuser.centos{계정명}.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.centos{계정명}.groups</name>
<value>*</value>
</property>

b. ambari의 경우 custom core-site로 추가

2. Livy configuration

a. livy.conf
livy.impersonation.enabled = true
livy.server.csrf_protection.enabled=false  
(true로 두고 Post로 실행할 경우, Missing Required Header for CSRF protection에러나면  Headers에 추가 X-Requested-By = ambari )


b. ambari의 경우 Spark > Advanced livy-conf 변경

livy.environment = production

livy.impersonation.enabled = true

livy.server.csrf_protection_enabled = false


3. Rest API - Test

a. POST - http://localhost:8998/sessions

   RequestBody {"kind": "spark", "proxyUser": "john"}


b.POST - http://localhost:8998/sessions/{sessionId}/statements

  RequestBody {"code": "var readMe = sc.textFile(\"/user/john/input-data/sample.csv\"); readMe.take(5);"}

c. GET - htpp://localhost:8998/sessions/{sessionId}/statements



'BigData' 카테고리의 다른 글

Apache hive - transaction  (0) 2017.09.26
Hadoop Security for Multi tenant #4  (0) 2017.04.03
Hadoop Securiy for Multi tenant #2  (0) 2017.01.20
Hadoop Securiy for Multi tenant #1  (0) 2017.01.17
Flume-Kafka-Elasticsearch 테스트  (0) 2016.03.14

<개요>

객체지향 디자인은 일반적으로 서양에서 일반적으로 다루는 철학적 사상을 배경으로 하고 있기 때문에 동양 사고에 익숙한 사람들은 잘 와닿지가 않는 듯 하다.

 

 현장에서 경험하고 여러가지를 공부하여 이해한바를 바탕으로 큰 특징을 잡아서 설계관점에서 접근해보면 좋을 것 같다는 생각에 정리를 해본다.

 

 

<내용>

1. 상호의존

 

- 객체지향 디자인에서 나오는 산출물을 크게 정적, 동적으로 나누어 본다면 정적에서는 Class Diagram, 동적에서는 Seq Diagram으로 볼 수 있는데 이는 결국 각 객체의 의존관계를 표현하기 위함이다.

<그림-1 다이어그램의 분류>

 

 

 

<그림-2 Class Diagram>

 

<그림-3 Seq Diagram>


 

 우리나라 사람들이 이러한 Diagram을 그리기 어려워 하는 것도 결국 사고의 방식이 서양과 다르기 때문이 아닌가 생각해본다. 서양인들은 카테고라이징에 강하고 동양인들은 릴레이션에 강하다고 한다.

(호랑이, 원숭이, 바나나 중에서 관계가 있는 것끼리 묶으라고 하면 서양인들은 같은 동물인 호랑이, 원숭이를 선택하고 동양인들은 원숭이, 바나나를 선택한다고 한다...)

 

 - Class Diagram은 결국 우리가 개발할 때 필요한 객체들을 카테고라이징 한 결과물이고

 - Seq Diagram은 그 객체들이 주고 받는 메시지를 정의한 것이다.

 

 - 특히 Seq Diagram상의 메시지는 기능 (method, function, API등) 의 argument, return 타입을 정의하기 때문에 매우 중요하며 각 객체가 주고받는 내용을 포함하기 때문에 결국 각 객체의 책임을 명확하게 정리하는데 많은 도움이 된다.

 

 <Tip>

 Class Diagram은 분류에 집중하고, Seq Diagram은 메시지와 Life Cycle에 집중하면 좋은 결과물이 나온다.

 

 핵심 : 내가 처리할 수 있는 것은 필요한 정보를 받아서 처리 후 결과를 다른 객체에 알려준다. 내가 모든 것을 처리하지 않는다.

 

 

 

2. Coupling & Cohesion

 

 - 이렇게 각 객체를 도출하여 개발을 할 때 어떤 객체가 특정 객체에서만 참조 된다면?

   이런 경우 우리는 Coupling이 강하다고 한다.

 - 이렇게 만들어진 객체는 다른 객체와 협력하기 어렵다. 즉, 재사용성이 낮다.

 - 여러 곳에서 두루 사용될 수 있도록 객체를 설계해야 하며 이를 Cohesion이 높다고 한다.

 - 수년간 프로그램 개발을 하면서 얻었던 몇가지 Tip을 공유하자면 !

 

  <Tip> - 추후 자세히 설명!

  a. Seq Diagram에서 표현되는 메시지, 즉 메소드의 인자값을 유연하게 가져가야한다.

 

  b. ~ is a~ 의 관계보다 ~ has a ~ 의 관계를 가져가도록 노력해야 한다.

 

  c. Class를 설계할 때에도 ConcreateClass보다 Interface와 Abstract를 적극 활용한다.


 

 

3. God Object 를 피하라

 - 1,2번과 연관이 있는 내용이다.

 - 즉 혼자서 모든 것을 처리하는 객체를 만드는 것을 피해야한다.

 - 특히 개발기간이 짧고 소수의 개발자가 투입될 때 많이 나타나는 모양인데 프로젝트 종료 후 반드시 리팩토링을 거쳐야만 한다!!

 - Design Pattern에서 언급되는 대표적인 Anti-Pattern으로 유지보수성이 매우 낮고

  (만든 사람만 고칠 수 있다;; 그래서 개발자로 오래 살아남는법 이라는 책에서는 이렇게 만들라고 권장한다!)

 - 모든 일을 혼자서 다 처리한다는 이야기는 결국 모든 요구사항과 연결되어 있다는 내용이고 매번 고쳐야하는 객체라는 이야기이다. 즉, 재사용성이 낮다.

 

 

<결론>

 - System이라는 말이 한자로 바꾸 가 된다.

 - 우리가 살고 있는 생태계도 여러종류의 생물, 무생물이 각각의 역할을 수행하고 다른 객체와 소통하여 유지가 되고 있는 것처럼

 - IT System도 여러가지 역할이 적절히 분배된 객체들이 잘 어울려야 안정적인 System을 구현할 수 있다.

 - 다양한 다른 객체와 원활하게 소통할 수 있도록 만들어진 객체는 오래 살아남을 수 있지만, 그렇지 않게 설계된 객체는 System상에서 오래 살아남기가 어렵다 (재사용성 측면)

 - 객체지향에 익숙하지 않거나 싫어하는 개발자는 Operation(method, function) 의 Argument나 Return Type을 신경쓰지 않는 경향이 있다. 협업을 위해서 조금만 더 신경써주세요!

 - 전역변수를 주로 사용하고 argument는 비어있고, return 은 void 가 일반적이다;;

   객체지향에서 항상 나오는 캡슐화 와도 연관이 있는데 정말 안 좋은 습관입니다.

 

 

<참조사이트>

https://en.wikipedia.org/wiki/Class_diagram

<현상>

- REST API를 설계하던 중 form data가 POST방식에서는 정상 동작하지만 PUT에서는 동작하지 않는 현상을 발견


<내용>

- POST의 경우 idempotent  하지 않으며, 리소스의 위치를 지정하지 않을 경우 리소스를 새로 생성한다.

- PUT의 경우 idempotent  하며,  리소스의 위치를 명확히 지정하여 생성/수정을 위해서 사용한다.

- PATCH의 경우 idempotent 하며, 리소스의 위치를 명확히 지정하여 일부 속성을 수정하기 위해서 사용한다.   


<확인>

- 현재 Servlet Spec에서 HTTP POST를 위해서는 form data를 사용하지만, HTTP PUT or PATCH에 대해서는 사용이 불가능하다.

 아마도 수정기능을 위해서 support할 필요가 없다고 느껴서 일지도 모르겠지만 개발을 하다보면 불편한 점을 느끼게 된다.


<해결>

- Spring에서 다음과 같은 Class를 제공한다. 

Class HttpPutFormContentFilter


이 필터는 'application/x-www-form-urlencoded' type의 HTTP PUT & PATCH request를 받아서 HTTP POST Request와 같은 형태로 이용할 수 있도록 form data를 만든다.




참고사이트

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6

http://docs.spring.io/spring/docs/current/javadoc-pi/org/springframework/web/filter/HttpPutFormContentFilter.html

https://1ambda.github.io/javascripts/rest-api-put-vs-post/


'Rest API' 카테고리의 다른 글

Spring Boot Application사용중 404 Not Found 발생  (0) 2019.09.02

<개요>

동시에 다수의 Java Process를 기동하여 JDBC Connection을 맺을때 시간이 매우 많이 소요되는 경우가 있습니다.

(timeout이 발생하기도 함)

 

이럴때는 난수발생을 체크해보시기 바랍니다.

 

<내용>

JDBC Driver에서 로그인을 하기 위해서 난수발생을 이용하는데 기본적으로

random을 사용하게 되어있습니다.

 

random에서 waiting이 발생하면서 connection을 맺지 못하는 경우가 있습니다.

이 부분을 urandom을 사용하도록 변경해보시기 바랍니다.

(random에 비해서 urandom은 속도가 빠르고 대신 보안에 취약하다고 보고가 되어있습니다.)

 

 

<방법>

JVM옵션을 아래와 같이 추가합니다.

 

-Djava.security.egd=file:///dev/urandom

 

 

 ps>리눅스 커널버전에 따라서 발생하는 경우도 있으니 같이 확인하시면 좋을 것 같습니다.

Spark Summit 2017 Boston에 다녀왔습니다.^^ 간단히 느낀점만 공유드리면,

1. Spark Ecosystem이 이제 곧 Hadoop Ecosystem을 능가할 것으로 예상합니다. 기존 분산처리시스템이 Store를 담당하는 부분은 거대하지만 정작 Execute에 대한 부분은 취약한 것을 몸은 크고 뇌는 작은 공룡에 비유하고 있습니다. 이와 반대로 뇌를 담당하는 execute영역에서는 Spark가 선두주자이며 storage는 필요에 따라 선택가능하고 HDFS외의 사례가 많음을 보이고 있습니다.

2. 특히 Spark는 기존의 약점이었던 실시간처리영역을 보완하기 위해서 많은 부분을 준비하고 있으며 Structered Streaming을 키워드로 내세우고 2.2  2.3릴리즈 준비에 박차를 가하고 있습니다. High Level API를 통해서 기존과 동일한 방식으로 코딩환경을 제공할 것으로 예상되며 Apache Beam과 유사성이 보이는데 더 지켜봐야할 것 같습니다.

3. 2010년이후 현재까지 Cpu의발전속도는 거의 없으나 Network,storage는 10배의성장을 보여주는 부분에 주목하여 이를 분산병렬처리의 핵심요소로 보고 여러가지 프로젝트가 진행되고 있었습니다. (ex, carnobdata tungsten parquet등)

전체적으로 방향성은 Store와 Execute를 분리하고 각자요건에 맞게 다양한 요소를 조합하여 사용하는 것이 대세입니다. 특히 streaming에서는 kafka를 안쓰는 곳이 없는 것 같습니다. 또한 분석영역에서 language의 점유율이 scala는 감소한반면 python은 2배가까이 증가하였습니다.

마지막으로 databricks를 포함한 많은 업체가 이러한 기능들을 클라우드상에서 서비스로 제공하기 위해서 노력하고 있습니다.

상세한 내용들은 시간을 내어 정리하고 공부해야 할 것 같습니다^^

'컨퍼런스' 카테고리의 다른 글

Azure Everywhere 2019 후기  (0) 2019.01.12
Red Hat Forum 2018 Seoul 후기  (0) 2018.11.07

Hive, MR Job의 Group별 YARN Queue 사용


0. YARN Queue

LDAP User Group별 Queue 생성


Queue Mappings : g:abiz:abiz,g:adev:adev

설정이 적용되도록  restart

1. Hive 

설치

ambari 활용

Hive 실행 및 데이터 생성

sudo su - hive
[hive@node01 ~]$ hive
hive> create table table1(a int, b int);
hive> insert into table1 values( 1,2);
hive> insert into table1 values( 1,3);
hive> insert into table1 values( 2,4);

 

LDAP 계정으로 Hive 실행


[hive@node01 ~]$ beeline
Beeline version 1.2.1000.2.5.3.0-37 by Apache Hive
beeline> !connect jdbc:hive2://node02:10000/default john
Enter password for jdbc:hive2://node02:10000/default: **** (hive)
Connected to: Apache Hive (version 1.2.1000.2.5.3.0-37)
Driver: Hive JDBC (version 1.2.1000.2.5.3.0-37)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://node02:10000/default> select sum(a) from table;
INFO : Tez session hasn't been created yet. Opening session
INFO : Dag name: select sum(a) from table(Stage-1)
INFO :
INFO : Status: Running (Executing on YARN cluster with App id application_1484727707431_0001)
INFO : Map 1: -/- Reducer 2: 0/1
INFO : Map 1: 0/1 Reducer 2: 0/1
INFO : Map 1: 0/1 Reducer 2: 0/1
INFO : Map 1: 0(+1)/1 Reducer 2: 0/1
INFO : Map 1: 0/1 Reducer 2: 0/1
INFO : Map 1: 1/1 Reducer 2: 0(+1)/1
INFO : Map 1: 1/1 Reducer 2: 1/1
+------+--+
| _c0 |
+------+--+
| 4 |
+------+--+
1 row selected (23.803 seconds)



2. MR Job (OS계정)

WordCount 실행

hadoop home (/usr/hdp/2.5.3.0-37/hadoop)에 Word Count Example 다운로드 후 압축풀기

[root@node01 hadoop]# unzip Hadoop-WordCount.zip
Archive:  Hadoop-WordCount.zip
   creating: Hadoop-WordCount/
   creating: Hadoop-WordCount/classes/
   creating: Hadoop-WordCount/input/
  inflating: Hadoop-WordCount/input/Word_Count_input.txt 
  inflating: Hadoop-WordCount/WordCount.java 
  inflating: Hadoop-WordCount/clean.sh 
  inflating: Hadoop-WordCount/build.sh 
  inflating: Hadoop-WordCount/classes/WordCount$Reduce.class 
  inflating: Hadoop-WordCount/classes/WordCount.class 
  inflating: Hadoop-WordCount/classes/WordCount$Map.class 
  inflating: Hadoop-WordCount/wordcount.jar

 

adev의 jane으로 실행

[root@node01 Hadoop-WordCount]# su - hdfs
[hdfs@node01 Hadoop-WordCount]$ hadoop fs -mkdir /user/jane
[hdfs@node01 Hadoop-WordCount]$ hadoop fs -chown jane:adev /user/jane
[hdfs@node01 Hadoop-WordCount]$ exit
[root@node01 Hadoop-WordCount]# su jane
[jane@node01 Hadoop-WordCount]$ hadoop fs -put input/ /user/jane/input

 

Word Count jar 실행

[jane@node01 Hadoop-WordCount]$ hadoop jar /usr/hdp/2.5.3.0-37/hadoop/Hadoop-WordCount/wordcount.jar WordCount input output
17/01/19 02:28:04 INFO impl.TimelineClientImpl: Timeline service address: http://node02:8188/ws/v1/timeline/
17/01/19 02:28:04 INFO client.RMProxy: Connecting to ResourceManager at node02/172.31.1.255:8050
17/01/19 02:28:04 INFO client.AHSProxy: Connecting to Application History server at node02/172.31.1.255:10200
17/01/19 02:28:05 INFO input.FileInputFormat: Total input paths to process : 1
17/01/19 02:28:05 INFO mapreduce.JobSubmitter: number of splits:1
17/01/19 02:28:05 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1484790795688_0002
17/01/19 02:28:05 INFO impl.YarnClientImpl: Submitted application application_1484790795688_0002
17/01/19 02:28:05 INFO mapreduce.Job: The url to track the job: http://node02:8088/proxy/application_1484790795688_0002/
17/01/19 02:28:05 INFO mapreduce.Job: Running job: job_1484790795688_0002
17/01/19 02:28:16 INFO mapreduce.Job: Job job_1484790795688_0002 running in uber mode : false
17/01/19 02:28:16 INFO mapreduce.Job:  map 0% reduce 0%
17/01/19 02:28:29 INFO mapreduce.Job:  map 100% reduce 0%
17/01/19 02:28:35 INFO mapreduce.Job:  map 100% reduce 100%
17/01/19 02:28:36 INFO mapreduce.Job: Job job_1484790795688_0002 completed successfully
17/01/19 02:28:36 INFO mapreduce.Job: Counters: 49
    File System Counters
        FILE: Number of bytes read=167524
        FILE: Number of bytes written=616439
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
        HDFS: Number of bytes read=384328
        HDFS: Number of bytes written=120766
        HDFS: Number of read operations=6
        HDFS: Number of large read operations=0
        HDFS: Number of write operations=2
    Job Counters
        Launched map tasks=1
        Launched reduce tasks=1
        Data-local map tasks=1
        Total time spent by all maps in occupied slots (ms)=10159
        Total time spent by all reduces in occupied slots (ms)=8196
        Total time spent by all map tasks (ms)=10159
        Total time spent by all reduce tasks (ms)=4098
        Total vcore-milliseconds taken by all map tasks=10159
        Total vcore-milliseconds taken by all reduce tasks=4098
        Total megabyte-milliseconds taken by all map tasks=10402816
        Total megabyte-milliseconds taken by all reduce tasks=8392704
    Map-Reduce Framework
        Map input records=9488
        Map output records=67825
        Map output bytes=643386
        Map output materialized bytes=167524
        Input split bytes=121
        Combine input records=67825
        Combine output records=11900
        Reduce input groups=11900
        Reduce shuffle bytes=167524
        Reduce input records=11900
        Reduce output records=11900
        Spilled Records=23800
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=144
        CPU time spent (ms)=2950
        Physical memory (bytes) snapshot=1022894080
        Virtual memory (bytes) snapshot=6457335808
        Total committed heap usage (bytes)=858783744
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters
        Bytes Read=384207
    File Output Format Counters
        Bytes Written=120766

 

WordCount 결과

[jane@node01 Hadoop-WordCount]$ hadoop fs -ls /user/jane/
Found 3 items
drwx------   - jane adev          0 2017-01-19 02:28 /user/jane/.staging
drwxr-xr-x   - jane adev          0 2017-01-19 02:17 /user/jane/input
drwxr-xr-x   - jane adev          0 2017-01-19 02:28 /user/jane/output

 


3. MR Job (HADOOP_USER_NAME parameter)

WordCount 실행 

HDFS에 user를 위한 폴더를 생성 후 input을 업로드


 

Word Count jar 실행 (HADOOP_USER_NAME=lucy)


[root@node01 Hadoop-WordCount]# HADOOP_USER_NAME=lucy hadoop jar /usr/hdp/2.5.3.0-37/hadoop/Hadoop-WordCount/wordcount.jar WordCount input output
17/01/19 04:58:54 INFO impl.TimelineClientImpl: Timeline service address: http://node02:8188/ws/v1/timeline/
17/01/19 04:58:54 INFO client.RMProxy: Connecting to ResourceManager at node02/172.31.1.255:8050
17/01/19 04:58:54 INFO client.AHSProxy: Connecting to Application History server at node02/172.31.1.255:10200
17/01/19 04:58:55 INFO input.FileInputFormat: Total input paths to process : 1
17/01/19 04:58:55 INFO mapreduce.JobSubmitter: number of splits:1
17/01/19 04:58:56 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1484800564385_0001
17/01/19 04:58:56 INFO impl.YarnClientImpl: Submitted application application_1484800564385_0001
17/01/19 04:58:56 INFO mapreduce.Job: The url to track the job: http://node02:8088/proxy/application_1484800564385_0001/
17/01/19 04:58:56 INFO mapreduce.Job: Running job: job_1484800564385_0001
17/01/19 04:59:05 INFO mapreduce.Job: Job job_1484800564385_0001 running in uber mode : false
17/01/19 04:59:05 INFO mapreduce.Job:  map 0% reduce 0%
17/01/19 04:59:12 INFO mapreduce.Job:  map 100% reduce 0%
17/01/19 04:59:19 INFO mapreduce.Job:  map 100% reduce 100%
17/01/19 04:59:19 INFO mapreduce.Job: Job job_1484800564385_0001 completed successfully
17/01/19 04:59:19 INFO mapreduce.Job: Counters: 49
    File System Counters
        FILE: Number of bytes read=167524
        FILE: Number of bytes written=616439
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
        HDFS: Number of bytes read=384328
        HDFS: Number of bytes written=120766
        HDFS: Number of read operations=6
        HDFS: Number of large read operations=0
        HDFS: Number of write operations=2
    Job Counters
        Launched map tasks=1
        Launched reduce tasks=1
        Data-local map tasks=1
        Total time spent by all maps in occupied slots (ms)=5114
        Total time spent by all reduces in occupied slots (ms)=7530
        Total time spent by all map tasks (ms)=5114
        Total time spent by all reduce tasks (ms)=3765
        Total vcore-milliseconds taken by all map tasks=5114
        Total vcore-milliseconds taken by all reduce tasks=3765
        Total megabyte-milliseconds taken by all map tasks=5236736
        Total megabyte-milliseconds taken by all reduce tasks=7710720
    Map-Reduce Framework
        Map input records=9488
        Map output records=67825
        Map output bytes=643386
        Map output materialized bytes=167524
        Input split bytes=121
        Combine input records=67825
        Combine output records=11900
        Reduce input groups=11900
        Reduce shuffle bytes=167524
        Reduce input records=11900
        Reduce output records=11900
        Spilled Records=23800
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=148
        CPU time spent (ms)=3220
        Physical memory (bytes) snapshot=1033814016
        Virtual memory (bytes) snapshot=6464356352
        Total committed heap usage (bytes)=833617920
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters
        Bytes Read=384207
    File Output Format Counters
        Bytes Written=120766

 

WordCount 결과

[lucy@node01 Hadoop-WordCount]$ hadoop fs -ls /user/lucy
Found 3 items
drwx------   - lucy adev          0 2017-01-19 04:59 /user/lucy/.staging
drwxr-xr-x   - lucy adev          0 2017-01-19 04:48 /user/lucy/input
drwxr-xr-x   - lucy adev          0 2017-01-19 04:59 /user/lucy/output



'BigData' 카테고리의 다른 글

Hadoop Security for Multi tenant #4  (0) 2017.04.03
Hadoop Security for Multi tenant #3  (0) 2017.03.24
Hadoop Securiy for Multi tenant #1  (0) 2017.01.17
Flume-Kafka-Elasticsearch 테스트  (0) 2016.03.14
Storm특징 및 Spark와의 차이점  (0) 2014.12.12

+ Recent posts