2017년 1월 5일 목요일

[Hadoop] jps 명령어에 datanode 가 안보일 시


/hadoop/logs/ 에서 데이터노드의 로그를 보면 "all directories in dfs.datanode.data.dir are invalid"라고 써있다.
해결책은 /dfs/data 를 chmod로 755로 바꾸면 된다.

또 데이터노드 아이디가 맞지 않는다고 나올 때도 있는데(영어로) 이때는 /dfs/data 파일을 지웠다가 다시 생성해준다. 하둡 실행 중에 namenode초기화를 해서 id가 중복되었던 것 같다.

[Hadoop]'jps' 명령어가 안 먹을 때


hduser @ hduser : ~ / hadoop-1.2.1 $ jps 
The program 'jps' can be found in the following packages:
 * openjdk-7-jdk
 * openjdk-6-jdk 


위와 같이 Namenode와 트랙커를 보지 못할 때


해결책 : 
아래의 .bashrc 파일에서 PATH 변수를 설정합니다. 

1) vi .bashrc 
2) export PATH = $ PATH : $ JAVA_HOME / bin 
3) source  .bashrc 

[English]Day2


Circumstance : 주위의 상황, 환경
ex)Extenuating circumstance : 피지못할 사정

Exclusive : 독점적인, 배타적인
ex)Our newspaper has exclusive access to the president, so you won't find this interview elsewhere.

elsewhere : 다른 곳에서


Looks like our online advertisements are paying off :
우리 온라인 광고가 기대했던 성과를 내고 있는 것처럼 보여요
ex)
A : Looks like our online advertisements are paying off
B : Yes, the company's orders have increased by ten percent in the first month alone when we started the banner ads.
A : That was a good suggestion. I should have implemented if earlier. I'll give my ears open next time you want to give me advices.
B : Thanks. 

pay off : 지불하다, 성과를 거두다 
implement : 시행하다 
percussive 쳐서 소리를 나게 하는 
notion 개념, 관념 
cash cow 고수익을 내는 상품 
gig 공연 
dominate 지배하다, 군림하다



2017년 1월 4일 수요일

[Algorithm]합병 정렬(Merge Sort)



합병정렬은 정렬을 
분할 : 배열을 반으로 분할한다.
정복 : 분할한 배열을 정렬한다.
합병 : 분할된 정렬들을 합쳐서 정렬한다.
순으로 진행된다.



위의 그림을 참조한다.



위 그림처럼 각각의 두 배열을 정렬하는 것(정복)은 Recursion으로 풀어볼 수 있다.
그리고 합병을 할 때 원래 배열과 같은 크기의 임시배열을 필요로 한다.

i, j, k변수로 배열을 증가를 나타내어 변수가 배열을 끝을 나타내면 불필요한 연산을 막을 수 있다. 
위 그림의 동작순서를 설명하면 arri[i] 와 arrj[j]를 비교하여 A가 H보다 작으니 추가배열 첫번째 요소에 넣고 i를 증가시킨다. 다음으로 G가 H보다 작으니, 다시 i를 증가 추가배열에 넣는다. 다시 L과 H를 비교, H가 작으니 추가배열에 요소를 넣고 요소가 추가 될 때마다 k를 증가시킴으로 정렬된 배열을 모두 합병한다. 



위와 같이 분할은 재귀로, p r은 배열 첫과 끝으로 변수를 둔다.



merge함수이다. 첫번째 while문은 합병정렬을 하며, 두번째 세번째는 while문은 i or j가 배열끝에 이르렀을 때 실행된다. 즉 두번째 세번째 반복문은 둘 중 하나만 실행되는 것이다.



시간 복잡도이다. 풀어보자면 배열요소의 수가 n일 때 n log2 n의 식이 된다.



아래는 코드다.

import java.util.*;

public class Test {
static void Merge(int data[], int p, int q, int r){
int i=p, j=q+1, k=p;
int[] tmp = new int[data.length];
while(i<=q && j<=r){
if(data[i]<=data[j])
tmp[k++]=data[i++];
else
tmp[k++]=data[j++];
}
while(i<=q)
tmp[k++]=data[i++];
while(j<=r)
tmp[k++]=data[j++];
for(i=p; i<=r; i++)
data[i]=tmp[i];
}
static void mergeSort(int A[], int p, int r){
if(p<r){
int q=(p+r)/2;
mergeSort(A,p,q);
mergeSort(A,q+1,r);
Merge(A,p,q,r);
}
}

public static void main(String[] args){
int[] A = {2, 5, 4, 9, 6, 3, 8, 0, 1, 7};
mergeSort(A,0,9);
for(int i=0;i<10; i++)
System.out.println(A[i]);
}
}


2017년 1월 2일 월요일

[English]Day1


Indignant : 열받은, 화난
ex)
The man became indignant when he found out that his secretary threw away important papers he needed for meeting.
그 남자는 비서가 회의에 필요한 중요한 서류를 버린 것을 알고 화가 많이 났다.


Ponder : 곰곰히 생각하다(철학적인 문제를)
ex)
Kevin often ponders whether true love exists.
케인은 가끔 진실한 사랑이 존재하는지 곰곰히 생각해본다.


The caterer we used last year was excellent : 
지난해 우리가 고용한 주문요리사가 정말 좋았어요.
ex)
A : The caterer we used last year was excellent.
B : Are you saying the food isn't your liking?
A : The meal we had last year was certainly much better.
B : I don't think the food isn't so bad.

cer·tain·ly[|s3:rtnli] 발음부사 틀림없이, 분명히congratulatory 축하의deemed ~로여기다dismayed 경악, 경악하게 만들다recognized 인정된 알려진 diplomatic  외교의prompting 설득 prompt 즉각적인 

rec

[Python] IndentationError, NotImplementedError 예외처리


1. IndentationError
 Tab, Enter와 같은 코드상에 공백이 있을 경우 생기는 에러


2.  NotImplementedError
 NotImplementedError는 파이썬 내장 오류로, 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 발생시키고자 사용한다.

class Bird: def fly(self): raise NotImplementedError

위의 코드는 Bird클래스를 상속하는 자식클래스들이 무조건 fly함수를 오버라이딩하게 할 때 사용한다.
위와 같이 일부러 Error를 발생시키기도 한다.

2016년 12월 23일 금요일

[Algorithm] 기본 정렬(SORT)


[종류]
Bubble Sort
Insertion Sort
Selection Sort


[Selection Sort]


실행은 i=첫번 째 배열인자 j는 i다음의 배열인자라면,
1cycle i = 1
         j = 2, 3, 4, 5
2cycle i = 2
         j = 3, 4, 5
.....
4cycle i = 4
         j = 5
이렇게 실행된다. 
오름차순 정렬이라면 i>j클시 스왑을 실행한다.





위 그림처럼 실행시간의 최단, 최장 실행시간이 없다. 모든 인자를 거치기 때문이다.
실행시간에 따른 시간복잡도는 배열이 5개라면 첫 사이클은(n-1) + 두번 째는(n-2) ...
결국 n(n-1) / 2가 실행시간이 된다.



[ Bubble Sort ]




















1cycle i = 1, 2, 3, 4     // n-1까지
         j = 2, 3, 4, 5     //i+1에서 n까지





















위의 선택정렬과 같이 버블정렬도 최단, 최장 실행시간이 없이 n(n-1)/2이다.




[ Insertion Sort ]


















실행은 1cycle은 1-2까지 정렬,
         2cycle은 1-3까지 정렬....
위 그림처럼 인자가 6개인 배열일 때 5cycle까지 돌면 정렬된다.
























삽입정렬은 정렬되어 있는 배열에 새로운 인자 삽입시 정렬을 하기위해 쓰이는데,
위 그림처럼 앞에서 부터 사이클을 도는 것보다 뒤에서 사이클 도는게 더 효율적이다.
또한 tmp라는 임시저장하는 장소로 자신이 위치할 곳을 찾은 다음, 뒤에 있는 인자들을
적절히 밀어내어 정렬은 완성시킨다.
 




















선택정렬, 버블정렬과 다르게 최장,최단 실행시간이 존재하는데,
인자가 5개인 배열일 경우
최단 시간는 5-1= 4번이다. 각각의 사이클 때 한번만에 정렬되었을 경우이다.
최장 시간는 역시 n(n-1) /2 사이클동안 인자 전부 비교했을 경우이다.