본문 바로가기
반응형

전체 글147

Hive Metastore 종류 및 설정 (mysql/mariadb hive-metastore) Hive Architecture 복잡한 맵리듀스 프로그래밍 없이 SQL로 맵리듀스를 사용할 수 있게 도와주는 녀석이다. SQL을 내부적으로 맵리듀스 코드로 변환해준다. 맵리듀스 외에 Tez 등의 엔진을 사용할 수도 있다. 보통 HDFS를 warehouse로 사용한다. (1) Client가 쿼리를 실행한다. (2) Driver가 쿼리플랜을 Compiler에게 요청한다. (3) Compiler는 쿼리에 해당하는 맵리듀스 코드를 생성한다. 이때, Metastore를 통해 하이브의 메타데이터(컬럼정보, 컬럼매핑 등)를 가져와 사용한다. 또한, 쿼리플랜을 생성한다. (4) 쿼리플랜을 Execution Engine에 전달한다. (5) Execution Engine은 Hadoop에 맵리듀스 잡을 요청하고, 잡의 결과.. 2019. 10. 18.
[HDFS] 네임노드 개념과 HA(High Availability, 고가용성) 구성 네임노드 장애가 나도 서비스에 문제가 발생하지 않도록 하는 네임노드 HA 구성에 대해 알아보겠습니다. 그 전에 네임노드의 역할, 네임노드 디렉토리 구조, 체크포인팅 개념을 먼저 정리하겠습니다. 1. 네임노드의 역할 (1) 메타데이터 관리 기본적으로 메타데이터는 메모리에 로딩해놓는다. fsimage 파일 어떤 시점에서 HDFS 메타데이터에 대한 스냅샷 파일이다. 가장 최근에 체크포인팅(fsimage + edits => fsimage)을 한 시점까지의 메타데이터를 갖고 있다. 파일 퍼미션, 엑세스 시간, HDFS 파일 위치, HDFS 블록 메타정보가 기록되어 있다. dfs.namenode.name.dir 경로에 저장이 된다. (디스크에도 저장) 네임노드 시작할 때 fsimage를 메모리에 로딩한다. edit.. 2019. 10. 15.
[BOJ 1012 유기농배추] BFS와 DFS로 풀기 (python) 문제조건 연결요소(덩어리)의 개수를 찾는다. 가로, 세로와 행열 인덱스 주의하자. 핵심개념 pypy는 최대 재귀깊이가 10만으로 설정되어 있다. 이걸 넘으면 런타임에러가 발생한다. sys.setrecursionlimit(10**6) 100만으로 늘려준다. (참ㅋㅋㅋㅋㅋ) DFS가 BFS보다 메모리를 적게 쓰긴 하는구나. 코드 DFS (메모리 30276 KB) dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] import sys sys.setrecursionlimit(10**6) #재귀 깊이 설정 (10만 -> 100만) def dfs(x, y, _cnt): dist[x][y] = _cnt for k in range(4): nx, ny = x+dx[k], y+dy[k] if 0 2019. 10. 14.
[SWEA] 구슬탈출 2 문제조건 빨간구슬, 파란구슬 두 개가 동시에 위치 이동을 한다. (정점의 위치가 변한다!) 빨간구슬, 파란구슬은 같은 위치에 있을 수 없다. (장애물정점의 위치도 변한다!) 한 번 이동 시, 갈 수 있을 때까지 쭈욱 간다. 핵심개념 BFS에서 queue에는 x,y 좌표 한 개만 담으라는 법은 없다. 빨간구슬의 (x,y), 파란구슬의 (x,y)를 같이 담는다. 종료조건을 먼저 생각하자. 1) 움직인 횟수 10번 넘었거나 (실패) 2) 10번 안 넘었지만 탈출할 수 없거나 (실패) 3) 빨간구슬이 탈출에 성공했거나 코드 from collections import deque n, m = map(int, input().split()) a = [list(map(str, input())) for _ in range.. 2019. 10. 9.
[BOJ13549 숨바꼭질3] BFS (Python) 문제조건 걷기 (x+1 또는 x-1 이동)는 1초가 걸리고, 순간이동(2*x 이동)은 0초가 걸린다. 핵심개념 그래프 문제로 안 보이지만, 그래프로 변형해서 푼다. BFS로 최단거리를 구하려면 가중치가 1이어야 한다. 그런데 가중치가 1이 아닌 경우(0초 같은), deque를 사용한다. 코드 from collections import deque MAX = 200000 check = [False]*MAX dist = [-1]*MAX n,m = map(int,input().split()) check[n] = True dist[n] = 0 q = deque() q.append(n) while q: now = q.popleft() if now*2 < MAX and check[now*2] == False: q.a.. 2019. 10. 7.
[BOJ1261 알고스팟] BFS (Python) 문제조건 벽이 있으면 뚫고 이동, 벽이 없으면 그냥 이동한다. 핵심개념 가중치(부수는 벽의 개수)는 벽이 있느냐 마느냐에 따라 0이거나 1이다. 가중치가 1이면 deque의 왼쪽, 0이면 deque의 오른쪽을 사용한다. (2개의 큐인 것처럼 활용) 코드 from collections import deque n, m = map(int, input().split()) miro = [list(map(int, input())) for _ in range(m)] check = [[False] * n for _ in range(m)] dist = [[-1] * n for _ in range(m)] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] # 처음 위치 q = deque() q.append.. 2019. 10. 7.
[BOJ2206 벽 부수고 이동하기] BFS (Python) 문제조건 벽은 한 번만 부술 수 있다. (파란간선 개념) 핵심개념 벽을 부순 횟수에 따라 정점에서 할 수 있는 것이 달라진다. 벽을 부순 횟수를 기준으로 쪼개야 한다. 코드 from collections import deque n, m = map(int, input().split()) miro = [list(map(int, input())) for _ in range(n)] check = [[False] * m for _ in range(n)] # 방문한 칸 수 (-1은 방문하지 않은 것) dist = [[[-1] * 2 for _ in range(m)] for _ in range(n)] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] # 처음 위치 q = deque() q.appen.. 2019. 10. 7.
[BOJ3055 탈출] BFS (python) 문제조건 물은 1분이 지날 때마다 인접한 곳에 물이 찬다. 단, 돌이거나 비버의 소굴은 물이 차지 않는다. 고슴도치는 물과 돌은 못 간다. 핵심개념 물 차는 시간을 미리 구해놓는다. (토마토 문제 방법으로 구하면 된다.) 위, 아래, 왼쪽, 오른쪽 인접한 곳을 탐색한다. 코드 from collections import deque n, m = map(int, input().split()) a = [list(map(str, input())) for _ in range(n)] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] # 물 차는 시간 먼저 구하기 (토마토 문제랑 동일) # 구하는 김에 고슴도치랑 비버의굴 위치도 구하기 water = [[-1] * m for _ in range(n)].. 2019. 10. 7.
[BOJ14226 이모티콘] BFS (Python) 문제조건 화면 이모티콘 개수는 클립보드 이모티콘 개수에 따라 달라진다. 핵심개념 BFS에서 하나의 정점이 여러 개의 정보를 갖고 있으면 안 된다. 화면 이모티콘 개수는 클립보드 이모티콘 개수에 따라 정보가 달라진다. 클립모드 이모티콘 개수를 기준으로 나눠서 BFS를 사용한다. 코드 from collections import deque n = int(input()) dist = [[-1]*1001 for _ in range(1001)] q = deque() q.append((1, 0)) dist[1][0] = 0 while q: s, c = q.popleft() # (1) 화면 이모티콘을 클립보드에 복붙 if dist[s][s] == -1: q.append((s, s)) dist[s][s] = dist[s.. 2019. 10. 6.
반응형