본문 바로가기

Old Posts226

[Java] 자바 가비지 컬렉션 기초(Garbage Collection Basic) 자바 개발자라면 '가비지 컬렉션(Garbage Collection)'에 대해서 고민하게 되는 순간이 온다. 토이 프로젝트나 작은 프로젝트에서는 가비지 컬렉션에 대한 관심이 적다. 가비지 컬렉터의 선택이 성능에 미치는 영향보다는 어떤 알고리즘을 사용했는지, 어떤 라이브러리를 사용하는지, 어떤 설정으로 구동하는지가 더 중요하다. 하지만 일정 규모 이상의 프로젝트를 진행하다보면 결국 가비지 컬렉터의 선택까지 고민하게 된다. 실력있는 자바 개발자라면 가비지 컬렉션의 동작에 대한 이해를 하고 자신이 구현하는 애플리케이션에 맞는 적당한 가비지 컬렉터를 선택, 설정들을 튜닝할 줄 알아야한다. 가비지 컬렉션(Garbage Collection) C언어나 C++ 같은 언어에서 메모리 관리는 프로그래머의 책임이다. 필요한 .. 2021. 8. 10.
[Hadoop] HDFS 아카이브(HAR) 생성 및 사용법 예제 하둡 파일시스템, HDFS의 가장 큰 단점은 파일의 개수가 늘어나면 네임노드의 메모리 부하가 늘어난다는 점이다. 따라서 하둡 파일시스템을 사용할 때, 작은 파일을 여러개 생성하기보다는 큰 파일을 적게 생성해서 사용하는게 좋다. 하지만 일반 사용자들에게 HDFS를 오픈하면 작은 파일들이 여러개 생기는 경우를 피할 수 없다. 하둡은 이런 상황에 대비할 수 있게 HDFS위에 저장되는 파일의 개수를 줄일 수 있는 방안으로 HAR(Hadoop Archive) 기능을 제공한다. HAR(Hadoop Archive) 하둡의 아카이브는 우리가 일반적으로 사용하는 파일의 압축과 비슷한 개념이다. tar 명령으로 디렉토리에 존재하는 파일들을 하나의 아카이브 파일로 묶어주는 동작과 마찬가지로 하둡은 특정 디렉토리의 서브 디렉.. 2021. 8. 9.
[Hadoop] 하둡 클라이언트에서 커버로스(Kerberos) 인증 사용하기 - 여러 계정 인증 동시사용 (UserGroupInformation) 여러 사용자가 동시에 접근하는 하둡 클러스터를 서비스할 때, 데이터나 리소스에 대한 보안 강화를 위해 '커버로스(Kerberos)' 인증을 사용할 수 있다. 커버로스 인증을 사용하는 클러스터에 접근하려면 Principal과 Keytab 혹은 패스워드를 이용해 인증을 받고, 발급받은 커버로스 티켓을 이용해서 하둡을 사용하게 된다. HDFS 클라이언트가 네임노드 혹은 데이터 노드와 통신하면서 데이터를 받아오는 과정에서도 커버로스 인증을 사용할 수 있다. 하둡은 UserGroupInformation이라는 클래스를 이용해 커버로스 프로토콜을 사용할 수 있도록 프로그래머에게 편의를 제공한다. 메이븐 의존성 일단은 커버로스 인증을 사용하는 하둡 클라이언트를 테스트해보기 위해 다음 메이븐 의존성을 추가해보자. org.. 2021. 8. 8.
[Hadoop] TestDFSIO - 하둡 클러스터 성능 측정 도구 사용법 및 예제 구축한 하둡 클러스터의 입출력 성능을 측정하고 싶은 경우가 있다. 새로 구매한 서버들을 이용해서 클러스터를 구축했을 때 성능이 어느정도까지 뽑히는지 체크하거나 일정 수준 이상의 입출력 성능을 제공하기 위해서 어느정도의 장비를 투입해야하는지 가늠하기 위함이다. 하둡은 여러가지 클러스터 성능 측정 도구를 제공하고 있다. 그 중에 클러스터의 입출력 속도 측정을 위한 'TestDFSIO'라는 벤치마크 도구에 대한 사용법과 예제를 정리해보겠다. TestDFSIO란? 하둡 릴리즈의 'hadoop-mapreduce-client-jobclient-{버전}-tests.jar' 파일에 패키징되어 있는 TestDFSIO는 클러스터의 하둡 클러스터의 입출력 성능을 측정할 수 있는 도구다. 하둡 소스코드처럼 TestDFSIO .. 2021. 8. 8.
[Hadoop] HDFS, Yarn, MapReduce를 위한 유닛테스트 및 JUnit 사용법 및 예제 - MiniCluster 하둡 클러스터를 사용하는 클라이언트 프로그램을 작성하다보면 유닛테스트를 어떻게 해야하는지 고민이 생긴다. 유닛 테스트를 위한 테스트 클러스터를 별도로 구축해놓는 것도 이상하고, 실제 운영되는 클러스터에 유닛 테스트를 돌리는 것도 애매하다. 유닛 테스트는 대부분 간단한 동작만 테스트하는데 가벼운 방법이 필요하다. 다행히 하둡은 JUnit 같은 유닛 테스트 케이스 작성을 위한 '미니클러스터(Mini cluster)'를 제공한다. 하둡 클라이언트를 테스트하기위해 'MiniDFS', 'MiniYARN', 'MiniMR' 클러스터가 제공되며 이 포스트에서는 MiniDFS 클러스터를 이용해서 테스트케이스를 작성해보겠다. MiniCluster 의존성 설정 메이븐 프로젝트를 사용하는 경우 다음 의존성을 pom.xml .. 2021. 8. 8.
[Hadoop] 도커(Docker)로 하둡(Hadoop) 띄우기 하둠 HDFS 코드리뷰를 진행하면서 테스트용 클러스터를 만들 필요가 있었다. 실제 개발 장비에 설치되어 있는 하둡 클러스터를 이용해서 프로그램을 작성, 동작을 디버깅해볼 수도 있었지만 도커에 하둡을 띄워보면 어떨까하는 생각이 들어서 관련 자료를 찾아보며 정리를 했다. 하둡 도커 이미지 만들기 우선 하둡에 구동시킬 도커 이미지를 만들어보자. 우선 CentOS 이미지를 이용해 리눅스 컨테이너를 구동한다. docker run -it --name hadoop-base centos CentOS 컨테이너의 yum 패키지를 업데이트하고 필요한 라이브러리들을 설치한다. 필요한 라이브러리들은 다음 명령으로 설치할 수 있다. 이 과정에서 약간 시간이 걸린다. yum update yum install wget -y yum .. 2021. 8. 7.
[Linux] tmux 설치와 사용법 및 예제 정리 원격 서버에 접속해서 작업을 하다보면 터미널 화면을 분할해서 사용해야하는 경우가 많다. 특히 하나의 터미널 창에 여러개의 터미널 화면을 분할해서 사용하는 'Terminal multiplexer'라는 종류의 소프트웨어를 사용하면 터미널 환경에서의 생산성은 물론이고, 고수의 느낌을 조금이나마 풍길 수 있다. Terminal multiplexer 소프트웨어 중에 tmux라는 프로그램을 사용하고 있는데 설치 방법과 간략한 사용법을 정리해보았다. tmux 설치 tmux는 각 운영체제의 패키지 관리자를 이용해서 설치할 수 있다. 우선 macOS에서는 brew를 이용해 설치할 수 있다. $ brew install tmux 우분투 리눅스에서는 apt-get을 이용해서 설치할 수 있다. $ sudo apt-get ins.. 2021. 8. 7.
[Linux] 엣지 트리거(Edge Trigger, ET)와 레벨 트리거(Level Trigger, LT)의 차이점 시스템에서 특정 이벤트의 발생을 감지하기 위해서 트리거(Trigger)라는 개념을 사용한다. 트리거는 원래 전기전자에서 사용하는 개념이지만 시스템 프로그래밍에서도 비슷한 개념을 사용한다. 트리거는 '레벨 트리거(Level Trigger)'와 '엣지 트리거(Edge Trigger)'로 구분할 수 있다. 예를 들기 위해 0과 1의 값을 가질 수 있는 어떤 변수를 생각해보자. 어떤 시스템에서 이벤트를 감지할 수 있는 센서라고 생각해도 좋다. 이 변수는 조건에 따라 0이 되기도하고 1이되기도 한다. 이를 그래프로 그려보면 위 그림처럼 0과 1이 번갈아가면서 바뀌는 것처럼 그려볼 수 있다. 레벨 트리거(Level Trigger) 우선 레벨트리거는 상태 변수의 현재 상황을 기준으로 동작한다. 상태변수가 1인 경우를.. 2021. 8. 7.
[Linux] RAID 0, RAID 1, RAID 10, RAID 01 차이점 데이터를 저장하는 디스크는 언제든지 고장이 날 수 있다. 따라서 2차 저장장치인 디스크에 데이터를 저장했다고해서 영구적으로 데이터의 영속성이 보장되는 것은 아니다. 디스크에 저장된 데이터의 가용성을 확보하기 위해서 '레이드(RAID, Redundant Array of Independent Disks 혹은 Redundant Array of Inexpensive Disks)' 구성을 사용하는 경우가 많다. 레이드는 그 구성 방법에 따라 RAID 0, RAID 1, RAID10, RAID 01 설정을 많이 사용한다. 레이드 뒤쪽에 오는 숫자가 직관적이지 않아서 어떻게 구성하는 방법인지 헷갈릴 때가 많다. 0과 1은 '스트라이핑(Striping)'과 '미러링(Mirroring)'을 의미하며 01을 SM으로 기억.. 2021. 8. 6.