'전체 글'에 해당되는 글 27건

  1. 2021.02.13 HDFS Balancer
  2. 2020.03.26 R 날짜, 시간 계산
  3. 2020.03.18 표본분포

2021. 2. 13. 13:35 빅데이터/HDFS

HDFS Balancer

출처 : 빅데이터 전문가의 하둡 관리 ( 9장 HDFS 데이터 리밸런싱하기 ) ISBN 9788931555752

하둡을 오랜시간 운영하다보면 스토리지에 skew가 발생해 불균형한 상태가 될 수 있다

그리고 클러스터에 새로운 노드가 들어올 때도 불균형이 발생한다.

하둡은 이런 데이터 불균형을 자동으로 해결해주진 않는다.

그 대신 하둡은 데이터 노드의 공간 사용율과 클러스터내 데이터노드의 사용률과 비교해 특정 비율 이하로 유지 할 수 있게 balancer 기능을 제공한다

balancer를 이용하면 클러스터내 블록을 분산 시켜 데이터노드가 비슷한 비율로 데이터를 갖도록 조정한다.

 

balancer를 실행하는 방법은 2가지가 있다.

  1) start-balancer.sh

  2) hdfs -balancer

 

hdfs balancer의 threshold 매개변수는 전체 클러스터의 DFS 사용률에서 각 데이터 노드의 사용률의 분산비율을 의미한다. 이 값을 기준으로 벗어나게 되면 노드들이 균형 잡힐 수 있게 재조정 한다.

 

balancer의 threshold 기본값은 10이다. 밸런서가 클러스터의 평균 디스크 사용률의 ± 10% 이상의 사용률을 갖는 데이터 노드가 없을 때 까지 데이터 블록을 이동한다는 의미이다.

threshold 조정 명령어 : hdfs balancer -threshold 5 

이 값이 작을 수록 밸런서가 수행해야 할 작업이 많아지고, 클러스터가 더 균형 잡힌 상태로 된다.

 

밸런서를 실행 할 때 클러스터에선 두가지 값을 사용한다.

 * 클러스터 전체 평균사용률 = used volume * 100 / total volume

 * 각 노드의 사용률

 

클러스터 전체 평균 사용률은 hdfs dfsadmin -report 를 통해 DFS Used : 항목으로 볼 수 있고 

namenode web을 통해서도 확인 할 수 있다

 

밸런서 툴을 실행해야 할 시점

대규모 클러스터는 정기적으로 실행하는게 좋다.

클러스터에 새로운 노드들을 추가하고 나서 밸런서를 실행하는것이 좋다.

새로운 노드 추가 후 밸런스 작업은 작업시간이 오래 걸린다.

 

밸런서의 overhead는 높지 않아서 클러스터 overhead가 높지 않을 때 주기적으로 실행하는것이 가장 좋다.

밸런서 시작 할 때 network 대역폭을 조정 할 수 있는데 기본 값은 10mb / sec 이다.

이 값을 높이면 더 빨리 끝난다. 대역폭에서 10% 까지는 클러스터에 큰 부담을 주지 않고 실행 한다.

20mb로 올리는 방법

hdfs dfsadmin -setBalancerBandwidth 20971520

 

대역폭을 올리기전에 적절한 대역폭인지 확인이 필요하다. 

ethtool eth0

 

공간확보 할 때 복제계수 낮추기를 통해서 공간을 추가 확보 할 수 있다.

hdfs-site.xml 파일에 있는 dfs.replication 값은 클러스터 레벨에서 복제 계수를 조정하는것이다.

기본값은 3인데 2로 변경할 경우 클러스터 전체 블록에 대해서 3 -> 2로 변경된다.

 

하둡은 파일별로 복제계수를 지정 할 수 있다.

hdfs dfs -setRep를 이용해 파일레벨로 복제계수를 변경 할 수 있다. (cold data에 사용하면 좋음)

hdfs dfs -setRep -w 2 -R /moneymall/tsv/etc-log/

-R : recursive로 하위 디렉토리의 전체대상으로 복제계수 변경

-w : 복제 작업이 완료 될 때 까지 기다림

 

Posted by 소율소희아빠

 

timestamp와 date형으로 변환

 

 

   R에서 날짜 및 시간 관련 자료형은 timestamp와 datetime이 있음

   

   R은 timestamp 타입에 POSIXct형과 POSIXlt 형이 있고, 날짜형에 Date형이 있음

   

   POSIXct형은 1970-01-01 부터의 초를 가짐

      - 일시형 끼리 비교하거나 시간 차를 계산 할 때 유용

 

   POSIXlt형은 년,월,일,시,분,초 각각을 리스트 형태로 가짐

      - 년, 월 등 특정 일시 요소를 다룰 때 유용

 

library(tidyverse)

library(lubridate)


# data read

reserve <- read_csv('data/reserve.csv')



# POSIXct형은 1970-01-01 부터의 초를 가진다며??
# POSIXct형 변환

as.POSIXct(reserve$reserve_datetime, format='%Y-%m-%d %H:%M:%S')
as.POSIXct(paste(reserve$checkin_date,reserve$checkin_time), format='%Y-%m-%d %H:%M:%S')


#POSIXct형 변환(첫번째 파라미터가 character vector여야 함)


parse_date_time2(reserve$reserve_datetime, orders = '%Y-%m-%d %H:%M:%S')
parse_date_time2(paste(reserve$checkin_date,reserve$checkin_time), orders = '%Y-%m-%d %H:%M:%S')



#POSIXlt형 변환


as.POSIXlt(reserve$reserve_datetime, format='%Y-%m-%d %H:%M:%S')
as.POSIXlt(paste(reserve$checkin_date,reserve$checkin_time), format='%Y-%m-%d %H:%M:%S')



#POSIXlt형 변환(첫번째 파라미터가 character vector여야 함)


fast_strptime(reserve$reserve_datetime,format='%Y-%m-%d %H:%M:%S')
fast_strptime(paste(reserve$checkin_date,reserve$checkin_time), format='%Y-%m-%d %H:%M:%S')


#Date형으로 변환


as.Date(reserve$reserve_datetime, format='%Y-%m-%d')
as.Date(paste(reserve$checkin_date,reserve$checkin_time), format='%Y-%m-%d')

 

 

 

년, 월, 일, 시, 분, 초, 요일 추출

 

 

 

#reserve_datetime을 POSIXct형으로 변환

reserve$reserve_datetime_ct <- as.POSIXct(reserve$reserve_datetime, orders = '%Y-%m-%d %H:%M:%S')

 

 

#reserve_Datetime을 POSIXlt형으로 변환

reserve$reserve_datetime_lt <- as.POSIXlt(reserve$reserve_datetime, orders = '%Y-%m-%d %H:%M:%S')

 



#POSIXct형과 Date형은 함수로 특정 일시 요소를 얻는다
#(내부에 일시 요소를 추려내기 위한 계산을 실행한다)
#POSIXlt형은 직접 특정 일시 요소를 추려낼 수 있다

 


#년도 추출

year(reserve$reserve_datetime_ct)
year(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$year


#월 추출

month(reserve$reserve_datetime_ct)
month(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$mon



#일 추출

days_in_month(reserve$reserve_datetime_ct)
days_in_month(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$mday


#요일 추출

weekdays(reserve$reserve_datetime_ct)
weekdays(reserve$reserve_datetime_lt)

 


#시간을 얻는다

hour(reserve$reserve_datetime_ct)
hour(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$hour

 


#분을 얻는다

minute(reserve$reserve_datetime_ct)
minute(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$min

 


#초를 얻는다

second(reserve$reserve_datetime_ct)
second(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$sec

 


#지정한 포맷의 문자열로 변환한다

format(reserve$reserve_datetime_ct, '%Y%m%d %H%M%S')
format(reserve$reserve_datetime_lt, '%Y%m%d %H%M%S')

 

 

 

시간차 계산

 

 

POSIXct 형끼리는 단순 계산(-)하면 초단위로 값을 return

Date형 끼리의 계산은 일단위로 값을 return

 

 

#checkin_datetime 과 reserve_datetime 간 시간차 계산

 

reserve$checkin_datetime <- as.POSIXct(paste(reserve$checkin_date, reserve$checkin_time), format='%Y-%m-%d %H:%M:%S')


#년도 차이를 계산(월 이하의 날짜 요소는 고려하지 않음)

year(reserve$checkin_datetime) - year(reserve$reserve_datetime_ct)


#월 차이를 계산(일 이하의 날짜 요소는 고려하지 않음)

(year(reserve$checkin_datetime) * 12 + month(reserve$checkin_datetime)) - 
(year(reserve$reserve_datetime_ct) * 12 + month(reserve$reserve_datetime_ct))

# difftime 함수는 시간차를 계산하는 함수이며

# 1,2번 파라미터에 일시형 데이터를 지정하며 POSIXct, POSIXlt 형 모두 지정 가능

# units 파라미터는 시간 계산 단위
# units 종류 : auto, secs, mins, hours, days, weeks
#일 단위로 계산

difftime(reserve$checkin_datetime, reserve$reserve_datetime_ct, units = 'days')


#시간단위 계산

difftime(reserve$checkin_datetime, reserve$reserve_datetime, units = 'hours')


#분단위 계산

difftime(reserve$checkin_datetime, reserve$reserve_datetime, units = 'mins')


#초단위 계산

difftime(reserve$checkin_datetime, reserve$reserve_datetime, units = 'secs')

 

 

 

일시형의 증감

 

 

R에서 일시형 데이터는 POSIXct형, Date 형에 직접 수치를 증감 시킴

 

POSIXct형은 초단위 Date형은 일단위로 수치를 증감시킴

 

lubridate 패키지의  weeks, days, hours, minutes, seconds 함수를 통해

 

원래 데이터형에 상관없이 시간 단위를 지정 할 수 있음

 

 


library(lubridate)


#reserve_datetime을 date type으로 변경

reserve$reserve_date <- as.Date(reserve$reserve_datetime, orders = '%Y-%m-%d %H:%M:%S')


#reserve_datetime, reserve_date 에 1일을 더한다

reserve$reserve_datetime_ct + days(1)

reserve$reserve_date + days(1)


#reserve_datetime에 1시간을 더한다

reserve$reserve_datetime_ct + hours(1)


#reserve_datetime에 1분을 더한다

reserve$reserve_datetime_ct + minutes(1)


#reserve_datetime에 1초를 더한다

reserve$reserve_datetime_ct + seconds(1)

 

 

 

 

 

 

 

Posted by 소율소희아빠

2020. 3. 18. 00:52 카테고리 없음

표본분포

학습목표

 

 

   - 표본분포의 개념을 이해한다

   - 중심극한 정리를 이해한다

   - t-분포에 대해서 이해한다

   - 카이제곱 분포에 대해서 이해한다

 

 

기본용어1

 

     * 통계적 추론 : 모집단에서 추출한 표본을 이용하여 모집단에 관한 추측이나 결론을 이끌어내는 과정

     * 모수 : 모집단의 특성값 ( 예 : 평균, 비율, 분산 등..)

     * 랜덤표본 : 모집단에서 랜덤하게 추출된 일부로 서로 독립이며 동일한 분포를 따름

     * 표본추출변동 : 통계량 값이 표본에 따라 달라지는것

     * 표본분포 : 표본통계량의 분포

 

 

표본평균의 기댓값과 분산

 

표본평균이 μ 이고 분산이 σ^2인 무한 모집단에서 표본의 크기 n인 랜덤표본의 표본평균 X에 대하여

   - E(X) = μ

    - Var(X) = σ^2 / n 

 

 

표본평균의 분포(정규모집단의 경우)

 

모집단의 분포가 정규분포 N(μ,σ^2) 일 때 표본크기 n인 랜덤 표본의 표본평균 X는

정규분포  X ~ N(μ, σ^2 / n)  를 따른다

 

 

중심극한정리(Central Limit Theorem)

   

   - 평균이 μ 이고, 분산이 σ^2 인 임의의 모집단에서 표본의 크기 n가 충분히 크면 정규분포를 따른다

 

 

이항분포의 정규근사

 

   - 이항분포 B(n,p)를 따르는 확률변수 X는 n이 클 때 근사적으로 정규분포 N(np, np(1-np))를 따른다

 

 

 

t-분포

 

   - X1, ...., Xn이 N(μ,σ^2) 으로 부터의 확률 표본일 때

                           t = ( X - μ ) / S / (n^0.5)  ~  t(n-1)

   - 0에 대해서 좌우 대칭이며 자유도 n이 커지면 표준정규분포에 가까워짐 

 

 

카이제곱 분포의 특징

 

   - 자유도에 따라서 모양이 결정됨

   - 비대칭분포

Posted by 소율소희아빠

블로그 이미지
소율소희아빠

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.7
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함