제이쿼리(Jquery) 란?


제이쿼리(jquery)는 자바스크립트로 된 프레임웍으로 프로그래머의 브라우져별 자바스크립트의 api 차이를 고려할 필요없이 동일한 코드의 작성을 지원하며, 자바스크립트의 코딩을 단순화 하였다.


즉 간단히 제이쿼리는 자바스크립트를 편리하게 사용하게 해주는 라이브러리 정도로 생각하면 된다.




자 그럼 jquery를 사용하기 위해서는 어떻게 해야하는가?

 

1.Jquery 의 CDN 주소로 포함시킨다.


      CDN 은 Contents Delivery Network 의 약자. 간단히 외부서버에서 제공하는 jquery를 include 시킨다고 생각하면 된다.


자바스크립트 라이브러리들의 cdn 주소를 확인하는 사이트 : https://cdnjs.com/



jquery 홈페이지에서 cdn 주소확인 : http://jquery.com/download/

 


 

다음의 구문을 소스에 포함시킨다.


<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>


따라서 우리는 위와 같이 jquery를 포함 시킬 것이다.(cdn 으로 jquery 를 제공하는 곳은 많기 때문에 꼭 위와 동일하지 않아도 된다)



 

2. 해당 시스템 또는 로컬 서버에 해당파일은 포함시키고 해당 주소를 작성 화면에 포함 시킨다.


http://jquery.com/download/ 에서 해당 jquery 다운로드 받고 로컬서버등에 위치시킨다.

 

<script src="jquery 파일의 주소"></script>

 

 



자 간단하게 cdn으로 jquery를 실행해 보자.



소스는 다음과 같다.


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>jquery basic</title>

<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>

<script type="text/javascript">

        jQuery(document).ready(function() {

               alert("hello jquery");

        })

</script>

</head>

<body>

</body>

</html>


hello jquery 라는 alert 창이 떳다면 정상 작동한 것이다.



이것을 자바스크립트로 구현하면 다음과 같다.


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>javascript</title>

<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>

<script type="text/javascript">

        function init(){

               alert("hello javascript");

        }

</script>

</head>

<body onload="init()">

</body>

</html>



둘 예시는 화면이 로드되는 시점에 alert의 내용을 도시하는 내용이다.


jquery 의 ready 이벤트는 다음과 같이 축약이 가능하다. 


방식 1.

jQuery(document).ready(function() {

        alert("hello jquery");

})


방식 2. jQuery 를 $ 로 축약( jQuery  = $  동일하게 사용이 가능하다)

(document).ready(function() {

        alert("hello jquery");

})


방식 3. ready 생략

(function() {

        alert("hello jquery");

})


3가지의 결과는 동일하게 나온다.


첫강 끝~

'IT > jquery' 카테고리의 다른 글

[제이쿼리(jQuery)] lesson 5  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 4  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 3  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 2  (0) 2014.11.24
JQuery의 when  (0) 2014.11.21

setTimeout은 특정 시간이후 어떤 기능을 실행 할 때 사용하는 함수이다.

setInterval 과의 차이는 반복을 할 것인가, 한번만 실행할 것인가의 차이이다

두 function 모두 동일하게 호출될 function 과 시간을 입력한다(1000 ms = 1 second)

 

- setTimeout : 주어진 시간이 되면 한번 호출

- setInterval : 인터벌 시간마다 반복 호출

 

 

* setTimeout  

 syntax>

    myTimeout= setTimeout("javascript function",milliseconds);

 ex>

    setTimeout(function(){alert("Hello")}, 3000);


* setInterval 

syntax>

   setInterval(function,milliseconds,lang)

ex>

   setInterval(function(){alert("Hello")}, 3000);

  

이 2가지 function 을 초기화 하기 위해서는 clearTimeout, clearInterval 을 사용하며,

function 실행 후 리턴에 대한 값을 가지고 있어야 한다.

 

* clearTimeout 

 ex>

 var myTimeout = setTimeout(function(){

                             console.log("Hello")

                       }, 3000); 

 function myStopFunction() {

    clearTimeout(myTimeout);

 } 


 clearInterval 


 ex>

 var myTimeout= setInterval(function(){

                             console.log("Hello")

                       }, 3000); 

 

 function myStopFunction() {

    clearInterval(myTimeout);

 }


 

'IT > javascript' 카테고리의 다른 글

String fommat 2  (0) 2015.08.03
javascript 의 arguments  (0) 2014.12.03
javascript 에서 string.format 사용  (0) 2014.11.24
yuicommpressor (js /css 압축)  (0) 2014.11.24
setTimeout 에 파라미터를 넘기는 법  (0) 2014.11.22

Mapper 와 Reducer (Combiner도 Reducer 를 상속하여 구현한다) 는 job 에 의해

 

내부의 run 메소드가 실행된다.

 

Mapper 의 경우

 public void run(Context context) throws IOException, InterruptedException {

    setup(context);

    try {

      while (context.nextKeyValue()) {

        map(context.getCurrentKey(), context.getCurrentValue(), context);

      }

    } finally {

      cleanup(context);

    }

  }

 

 

위와 같은 로직이 동작하며, mapper 를 상속하여 구현하는 map 이 호출되기 전에 setup 이

완료후에는 cleanup 이 호출되는 것을 확인할 수 있다.

 

setup -> map (해당 datanode 에서 읽은 파일의 라인수 만큼 반복) -> cleanup


즉 이런 식으로 호출된다.

 

즉 initialize 형태의 로직이 필요하다면 setup 을 상속해서

완료이후의 로직이 필요하다면 cleanup을 상속해서 처리 할 수 있다.

'IT > 빅데이터(bigData)' 카테고리의 다른 글

Hive 의 Serde 1  (0) 2014.11.25
MapReduce 데이터 흐름 분석  (0) 2014.11.25
여러 기능의 맵리듀스를 하나의 jar 로 묶을때  (0) 2014.11.22
Hadoop 의 Counter 이야기  (0) 2014.11.22
Reduce 에서 counter 조회  (0) 2014.11.22

 

여러 기능의 맵리듀스를 하나의 jar 로 묶을때 다음과 같이 ProgramDriver 에 해당 class 들을 등록하고

ProgramDriver  에 각 클래스를 등록한 class 를 jar 의 main 클래스로 잡아서 jar 로 압축한다.

 

실행시 해당 jar 에 등록된 alias 로 실행한다.

$ hadoop jar analyserDriver.jar max   < 기타 max 에서 구현된 파라미터 >

 

 public class AnalyserDriver {

 

   public static void main(String argv[]) {

     int exitCode = -1;

     ProgramDriver programDriver = new ProgramDriver();

     try {

          programDriver.addClass("standarddeviation", StandardDeviationDriver.class, 

                "A map/reduce program that calculate the standarddeviation in the input files.");

 programDriver.addClass("mode", ModeDriver.class, 

                "A map/reduce program that calculates the mode in the input files.");

programDriver.addClass("max", Max.class, 

  "A map/reduce program that max the total row in the input files.");

          programDriver.addClass("min", Min.class, 

                "A map/reduce program that min the total row in the input files.");

          programDriver.addClass("median", Median.class,

                "A map/reduce program that median the total row in the input files.");

        exitCode = programDriver.run(argv); 

    } catch (Throwable e) {

          e.printStackTrace();

    }

    System.exit(exitCode);

  }

}

 

 

'IT > 빅데이터(bigData)' 카테고리의 다른 글

MapReduce 데이터 흐름 분석  (0) 2014.11.25
Mapper 클래스 구성 및 사용  (0) 2014.11.22
Hadoop 의 Counter 이야기  (0) 2014.11.22
Reduce 에서 counter 조회  (0) 2014.11.22
hadoop counter 사용  (0) 2014.11.21

setTimeout 에 파라미터를 넘기는 법

1. string로 만들어 호출하는 법
   setTimeout( fn 및 param에 대한 스트링, 딜레이시간)   

* 기본 호출

    setTimeout("updateTimeout('value')", 5000);

 * 반복 호출

   setTimeout("updateTimeout(0)", 5000);

   function updateTimeout(i) {

       if (i == 100) return;

       $("#updateVal").val(i++);

       setTimeout("updateTimeout('"+i+"')"5000);
   }

       
    
 2. 외부에서 파라미터 전달(전역변수 사용과 큰 차이가 없다)

 for (var i = 1; i < 100; i++) {

          (function(i) {
               setTimeout(function() {
                     $("#updateVal").val(i);
                }, i * 5000);
         }(i));
    }

 
3. setTimeout 을 재구현

   기본적으로 setTimeout  의 3번째 파라미터 부터는 setTimeout에서 호출하는 function 의 파라미터로 전달 된다. 단. IE 를 제외한 다른 브라우져에서는 전달이 가능하다.

즉 아래와 같은 형태가 된다.

  setTimeout(fn, delayTime , param1, param2 ...)  

  fn(param1, param2 ...)
  {
     내부 구현
  }


  IE 에서 이기능을 제공하기 위해서는  setTimeout 을 재구현하여 사용할 수가 있다.

  var orgTimeout = setTimeout;

   window.setTimeout = function() {
      var func, delay;
      func= arguments[0];
      delay= arguments[1];

      if (arguments.length > 2) {
         var arg = Array.prototype.slice.call(arguments, 2);
         return orgTimeout (function() {
                    func.apply(null, arg);
                }, delay);
       } else {
               return orgTimeout (func, delay);
      }
    };
   
    setTimeout(updateTimeout, 5000, 0);   // 호출가능 해짐


'IT > javascript' 카테고리의 다른 글

String fommat 2  (0) 2015.08.03
javascript 의 arguments  (0) 2014.12.03
javascript 에서 string.format 사용  (0) 2014.11.24
yuicommpressor (js /css 압축)  (0) 2014.11.24
setTimeout , setInterval , clearTimeout , clearInterval 사용  (0) 2014.11.22

기본 카운터의 구현은 이전 포스트에서 다른적이 있다. 

 

hadoop 에서는 이미 counter 를 많이 사용하고 있다.

hadoop 에 jar를 올려 실행하면 실행결과 최종에 나오는 값들이 모두 카운터를 통해 구현된 값이다. 

해당 jar 실행시 아래와 같은 최종 결과가 나온다

counter 는 총 43개 이며 해당 카운터에 mapreduce 프로그램이 동작할 사용한 주요 값들을 확인할 수 있다.

대표적으로 map, combine, reduce 에 input 된 record 수와 output된 record 수를 확인 할 수 있있으며, 실행시간 shuffle 된 byte 수도 확인이 가능한다.

이것을 통해 튜닝포인트를 잡을 수가 있게 된다.

 

기본 실행 결과 예시> combiner 를 구현하지 않은 경우

INFO mapreduce.Job: Counters: 43

        File System Counters

                FILE: Number of bytes read=37834707

                FILE: Number of bytes written=76663746

                FILE: Number of read operations=0

                FILE: Number of large read operations=0

                FILE: Number of write operations=0

                HDFS: Number of bytes read=1397535171

                HDFS: Number of bytes written=21

                HDFS: Number of read operations=36

                HDFS: Number of large read operations=0

                HDFS: Number of write operations=2

        Job Counters

                Launched map tasks=11

                Launched reduce tasks=1

                Data-local map tasks=11

                Total time spent by all maps in occupied slots (ms)=88360

                Total time spent by all reduces in occupied slots (ms)=11532

        Map-Reduce Framework

                Map input records=2007594

                Map output records=2007593

                Map output bytes=33819515

                Map output materialized bytes=37834767

                Input split bytes=1474

                Combine input records=0

                Combine output records=0

                Reduce input groups=4

                Reduce shuffle bytes=37834767

                Reduce input records=2007593

                Reduce output records=1

                Spilled Records=4015186

                Shuffled Maps =11

                Failed Shuffles=0

                Merged Map outputs=11

                GC time elapsed (ms)=1029

                CPU time spent (ms)=26570

                Physical memory (bytes) snapshot=10722308096

                Virtual memory (bytes) snapshot=23048646656

                Total committed heap usage (bytes)=12089032704

        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=1397533697

        File Output Format Counters

                Bytes Written=21

위의 결과를 보면 combiner 가 구현되지 않았기 때문에 combine input records 와 output records 가 0 이며,

reduce 에서 shuffle 된 bytes 와 records 수가 매우 높은 것을 알 수 있다.

그에 따라 reduce 에서 해당 값을 처리하기 위해 11532 ms 를 소모했다.

 

아래 결과는 combiner 를 구현한 경우이다.

INFO mapreduce.Job: Counters: 43

        File System Counters

                FILE: Number of bytes read=908

                FILE: Number of bytes written=998468

                FILE: Number of read operations=0

                FILE: Number of large read operations=0

                FILE: Number of write operations=0

                HDFS: Number of bytes read=1397535171

                HDFS: Number of bytes written=21

                HDFS: Number of read operations=36

                HDFS: Number of large read operations=0

                HDFS: Number of write operations=2

        Job Counters

                Launched map tasks=11

                Launched reduce tasks=1

                Data-local map tasks=11

                Total time spent by all maps in occupied slots (ms)=86586

                Total time spent by all reduces in occupied slots (ms)=5220

        Map-Reduce Framework

                Map input records=2007594

                Map output records=2007593

                Map output bytes=33819515

                Map output materialized bytes=968

                Input split bytes=1474

                Combine input records=2007593

                Combine output records=44

                Reduce input groups=4

                Reduce shuffle bytes=968

                Reduce input records=44

                Reduce output records=1

                Spilled Records=88

                Shuffled Maps =11

                Failed Shuffles=0

                Merged Map outputs=11

                GC time elapsed (ms)=1057

                CPU time spent (ms)=24930

                Physical memory (bytes) snapshot=10712588288

                Virtual memory (bytes) snapshot=23029968896

                Total committed heap usage (bytes)=12059148288

        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=1397533697

        File Output Format Counters

                Bytes Written=21

첫번째의 결과와 다른 것은 combiner (각 datanode 에서 동작하여 분산처리됨)의 구현을 통해 reduce 에서 취합되는 데이터의 양을 최소화 시켰다. 즉 combine output 은 44 records 로 줄였으며, 그로 인해 reduce 의 input shuffle 등의 값이 현저하게 주는 것을 확인할 수 있다.

결과를 보면 maps 의 소모시간은 조금 증가하였지만, reduce 의 소모시간은 반으로 준 것을 확인할 수 있다. 

이와 같이 counter 는 개발자의 데이터 공유뿐만 아니라 mapreduce 동작의 기본값을 확인 할 수 있기 때문에 활용도가 매우 높다.

이런 기본 counter 값도 reduce 동작중 획득하여 사용할 수 있다.

mapreduce 프로그래밍을 하면 counter가 필요한 곳은 대부분 reducer 이다

counter 는 job 안에 존재하며,

reducer의 context 가 가진 counter 를 조회한다면 그 값은 mapper 들에서 취합된 값이 아니므로 항상 0 이 나온다

 

따라서, reducer 를 동작중인 job 을 획득하여 counter 를 조회하여야 한다.

보통 reduce 메소드가 돌기전에 획득해 놓고 사용하기 때문에 setup 에서 구현한다.

 

 long totalVal = 0;


 @Override

 public void setup(Context context) throws IOException, InterruptedException{

   Configuration conf = context.getConfiguration();

   Cluster cluster = new Cluster(conf);

  Job currentJob = cluster.getJob(context.getJobID());

  totalCount = currentJob.getCounters().findCounter(MATCH_COUNTER.TOTAL_COUNT).getValue();  }

 

jquery 의 when 은 deferreds 에 대한 처리 이후 실행될 함수를 정의하여 사용한다.
deferreds 란 ?
처리가 바로 완료되지 않는 작업들로 생각하면 된다. 대표적인 ajax 가 이에 포함된다.

기본 사용법
ex>

$.when($.ajax("/when.jsp")).done(function(){

console.log("완료 후 실행");
})


ajax 가 처리된 이후 done 에서 구현거나 참조된 function 이 실행됨

두개의 작업이 모두 처리된 후 수행되기를 원할 경우에는
ex>
$.when( $.ajax("/one.jsp")$.ajax("/two.jsp")).done(function(){
console.log("one, two 처리 후 실행");
});
 
 
해당 deferreds  가 실패시에 처리가 필요할 경우에는
$.when($.ajax("when.jsp")).then(successCallbackFn, errorCallbackFn);
var successCallbackFn = function(){
console.log("성공 처리 후 실행");
};
var errorCallbackFn= function(){
console.log("성공 처리 후 실행");
};
이와 같이 사용할 수 있다


'IT > jquery' 카테고리의 다른 글

[제이쿼리(jQuery)] lesson 5  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 4  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 3  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 2  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 1  (0) 2014.11.24

mapper 는 기본적으로 자신의 데이터노드에서 동작하기 때문에 여러 데이터노드의 경우 서로의 값의 공유할 수가 없다.

그에 때문에 hadoop 에서는 counter 를 통해 서로의 정보를 업데이트하여 reducer 에게 전달할 수 있다.

(단 long에 대한 증가/감소만 가능)

 

카운터의 등록은 enum 으로 등록하여야 하며, 필요한 enum 을 개발자는 생성해야 한다.

 

 아래와 같은 enum 을 생성했다며

 

 public static enum MATCH_COUNTER {

  TOTAL_COUNT

 };

 

  mapper 에서는 아래와 같은 로직을 통해 특정 값을 증가 시킬 수 있다.

  @Override

  public void map(Object key, Text value, Context context) throws IOException, InterruptedException {

    StringTokenizer itr = new StringTokenizer(value.toString());

        while (itr.hasMoreTokens()) {

   word.set(itr.nextToken());

             context.write(word, one);

             context.getCounter(MATCH_COUNTER.TOTAL_COUNT).increment(1); 

             // counter 증가

       }

  }

 

 

이렇게 증가된 값은 아래와 같이 사용할 수 있다.

 public static void main(String[] args) throws Exception {

    Configuration conf = new Configuration();

    Job job = Job.getInstance(conf, "word count");

    .... 중략

    job.waitForCompletion(true)

    long totalCnt = job.getCounters().findCounter(MATCH_COUNTER.TOTAL_COUNT)).getValue();  

     ... 중략

  }

 

 

 

 namenode 1  :  outdata { "a","b","c"} 3개

 namenode 2  :  outdata { "d,"f"} 2개

 

counter 의 값은 5가 된다.

이전 중급강습 써머리


'lindyhop(린디합)' 카테고리의 다른 글

[워크샵] smokey feet 2012  (0) 2015.01.05
[재즈무브먼트] 틱톡틱톡(Tick Tock, Tick Tock)  (0) 2014.12.08
[재즈무브먼트] 수지큐(Suzie Q)  (0) 2014.11.25
찰스턴 패턴  (0) 2014.11.21
슈가푸쉬 스타일(리더)  (0) 2014.11.21

+ Recent posts