일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 동적프로그래밍
- 알고리즘
- Go언어
- 자바
- go
- HBase
- golang
- DP
- leetcode
- OOM
- programmers
- codewars
- Linux
- boj
- gradle
- 프로그래머스
- redis
- 튜토리얼
- dynamic programming
- scala
- 파이썬
- docker
- Python
- 스칼라
- 주키퍼
- 코드워
- 문제풀이
- Java
- 리눅스
- zookeeper
- Today
- Total
목록2020/10 (10)
파이문
자바로 코드를 작성할 때 gracefully 하게 종료하기 위해 ShutdownHook 을 사용하곤 한다. Runtime.getRuntime().addShutdownHook(new Thread(() -> { ... })); 프로세스를 중지하는 시나리오가 잘 있으면 좋겠지만, 강제 종료할 경우도 꽤 있을 것이다. 강제 종료의 경우 인터럽트 시그널인 kill -9 를 자주 썼었다. (각 시그널 번호가 뜻하는 의미는 인터넷에 매우 많으니 패스) SIGKILL (kill -9) 를 해도 ShutdownHook 이 되는지가 궁금했는데 결론부터 말하자면 안된다. 만약 프로세스 ShutdownHook 이 동작하게 하고 싶다면 SIGTERM(15)을 사용하도록 하자. (참고로 SIGINT(2) 도 된다. 인텔리제이에서..
왜 레디스는 싱글쓰레드로 되어 있을까? 프로그래밍이 쉽다. 동시성에서 도움이 된다. (동시성과 병렬성은 다르다!) CPU 가 보틀넥이 아니다. 비용이 효율적이다. 레디스가 싱글 쓰레드인데 어떻게 동시에 접근하지? 우선 동시성에 의미를 다시 생각해봐야 한다. 서버에서 동시성과 병렬성은 다른 컨셉을 갖고 있다. 서버에서 동시성 I/O 를 지원한다는 의미는 하나의 계산 단위만을 가진 클라이언트가 여러 흐름을 실행함으로써, 서버가 여러개의 클라이언트에 서비스를 제공할 수 있다는 의미이다. 병렬은 서버가 여러가지 일을 동시에 할 수 있다는 것이다. 예를 들면 바텐더 여러 고객들을 보고 하나의 음료만 만든다는 것은 동시성은 갖고 있지만 병렬성은 없다는 것이다. 참고 - stackoverflow.com/questio..
Catalog Table hbase shell 에서 list 명령어를 치면 안나와서 헷갈릴 수 있지만 hbase:meta 도 다른 테이블 처럼 그냥 테이블 중에 하나이다. 원래 -ROOT- 라는 테이블도 있었는데 버젼이 업데이트(0.96 이상 부터) 되면서 삭제 되었다. (참고 issues.apache.org/jira/browse/HBASE-3171) (현재 가장 유명한? HBase 책인 HBase 완벽가이드가 버젼이 0.92이여서 -ROOT- 라는 테이블 정보가 아직 있어서 헷갈렸다. 새 책 언제 나오나요?!!오라일리!!) hbase:meta 이전에는 .META. 라고 불렸던 hbase:meta 테이블은 모든 리젼에 대한 정보를 가지고 있다. 그리고 이 hbase:meta 는 주키퍼에 저장되어 있다. ..
Region-RegionServer 할당 방식 Region 이 어떻게 RegionServer 에 할당 되는걸까? StartUp (시작 시) Master 는 AssignmentManager 를 호출 한다. AssignmentManager 는 hbase:meta 의 (이미 있는) region 정보를 살펴 본다. 만약 region 이 여전히 유효하다면 (예를 들면 RegionServer 가 살아있는 상태인 경우) 할당을 한다. 만약 (할당이) 유효하지 않다면 LoadBalancerFactory 가 region 을 할당 시킨다. 로드 밸런서가 Region 을 RegionServer 에 할 >당 시킨다. hbase:meta 에 RegionServer 의 정보를 업데이트 한다. (필요하다면 RegionServer의..
hbase 테이블 별 용량 확인하기 path 는 기본적으로 zookeeper base path 이다. (변경되었다면 hbase master status 웹 UI 에서 확인할 수 있고 본인이 임의로 변경했다면 사용자가 당연히 알겠지?) 기본은 /hbase/data/default 이다. hdfs dfs -du -h /hbase/data/default
메모리 부족 swap 물리 메모리가 부족하게 되면 가상 메모리 방식을 응용한 'swap' 이 일어난다. 스왑은 저장 장치의 일부를 일시적으로 메모리 대신 사용하는 방식이다. 당연한 것이겠지만 메모리 보다 저장 장치에 접근하는 속도가 현저히 느리다. 그래서 시스템이 일시적인게 아니라 만성적으로 메모리가 부족하게 되면 스와핑 / 스왑 인 (스왑 영역을 물리 메모리 영역 으로 되돌리는 것) 과 스왑 아웃 (물리 메모리 영역을 스왑 영역으로) 이 반복되는 스래싱 (thrashing) 상태가 일어난다. 리눅스에서는 스와핑을 페이징이라고 부르기도 한다. 스와핑이 일어나지 않게 하기 (스왑으로 인해 일어나는 성능 하락을 막게 하기 위해) 위해서 아예 스와핑 옵션을 끌 수도 있다. 이 때 사용하는 값이 vm.swapp..
리눅스에서 쓰레드 몇 개 까지 만들 수 있을까? 궁금해서 찾아보았다. cat /proc/sys/kernel/threads-max 로 확인할 수 있다고 한다. (근데 여기서 말하는 결과 값은 결국 결국 쓰레드 + 프로세스 의 의미라고 한다.) 참고 stackoverflow.com/questions/344203/maximum-number-of-threads-per-process-in-linux
컬럼 패밀리에는 TTL 이라는 값을 초 단위로 세팅할 수 있다. 그러면 HBase 는 자동으로 expiration time (TTL) 에 다다른 row 는 삭제 한다. 이 삭제 작업은 모든 버젼의 row 에 해당한다. (HBase row 에는 여러 버젼이 있다. 조회 시에 나오는 값은 가장 최신 버젼의 데이터이다.) TTL 시간 값은 인코딩 되어 있고 UTC 값이다. 컬럼 패밀리에 TTL 거는 예 hbase(main):002:0> create 'ttl_demo', {'NAME' => 'cf','TTL' => 20} # 아님 요렇게도 가능하다. (결과는 같다.) hbase(main):003:0> alter 'ttl_demo', NAME => 'cf', TTL => 20 Store file(HFile) 에는..
싱글톤 클래스 예제는 보통 아래 처럼 작성되곤 한다. public static class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 이렇게 작성하면 단일 쓰레드에서는 문제가 없지만, 멀티 쓰레드(multithread) 에서는 instance 를 가져올 때 (동시 접근하여 instance 를 null 로 판단한 경우) 문제가 생길 수 있다. 가장 쉬운 방법은 getInstance 함수에 synchronized 키워드를 넣..
JDK14 자바 14 가 새로 나왔다(고 하기엔 좀 되었지만...). 엄청난 삽질로 인텔리제이에 자바 14가 돌아가도록 세팅 했다. (기회가 된다면 정리를 따로 하려고 한다.) 아무튼! 14 의 new feature 들을 하나씩 살펴보면서 정리하려고 한다. Records 새로운 예약어이다! 평소 코딩을 하다 보면 객체 값이 변하지 않기를 원하는 경우가 있다. public class OrgMessage { private final int id; private final String message; public RequestDataOrg(int id, String message) { this.id = id; this.message = message; } public int getId() { return id..