안녕하세요. 린아저씨 입니다. 오늘은 HDFS Corrupt 파일 확인 및 제거 방법에 대해 포스팅해보려고 합니다. 하둡 클러스터를 관리하다 보면 잦은 현상은 아니지만 간혹 HDFS 블록이 손상되는 경우가 발생하곤 합니다. 이때 이 손상된 블록을 Corrupt 파일 블록이라고 합니다. HDFS는 기본적으로 3 Copy를 유지하기 때문에 Corrupt 블록이 발생하더라도 데이터에 영향을 주지는 않습니다. 남아있는 2 copy의 블럭으로도 데이터를 읽는데는 아무 문제가 없기 때문입니다. 하지만 Corrupt 파일 블럭이 존재하면 이로 인해 정상적이 3 copy 블럭이 아닌 정상적인 2 copy 블럭과 깨진 1 copy 블럭이 존재하기 때문에 Corrupt 파일 블럭을 제거해주어야 합니다. 1. HDFS Co..
안녕하세요. 린아저씨 입니다. 이번에 윈도우10을 새로 설치할 일이 생겼는데 기존에 만들어두었던 윈도우 10 설치 USB가 사라져서 새로 만들겸 그 방법에 대해 포스팅하려고 합니다. 아주 쉽게 만들 수 있으니 그냥 보고 따라만 하시면 됩니다! 1. 우선 8GB 이상의 USB를 사전에 준비합니다. 윈도우 10 설치 USB 를 만들기 위해서는 반드시 8GB 이상의 용량을 준비해주셔야 합니다. USB가 준비되었다면 컴퓨터에 꽂고 정상적으로 인식되는지 확인합니다. 2. 윈도우 10 설치 도구를 다운 받습니다. 윈도우 10 설치 도구는 회원가입을 하지 않고 누구나 무료로 마이크로소프트 공식 홈페이지에서 다운받을 수 있습니다. 아래의 링크를 타고 가셔서 사진과 같이 도구 다운로드를 클릭합니다. https://www..
안녕하세요. 린아저씨 입니다. 리눅스를 사용하다 보면 프로그램을 백그라운드에서 세션과의 연결이 끊어져도 돌려야할 일이 많이 발생합니다. 그럴때 주로 사용하는 명령어가 바로 nohup 과 & 명령어 입니다. 오늘은 nohup 명령어와 & 명령어에 대해서 아주 쉽게 설명해 보려 합니다. 1. nohup 명령어란 무엇일까? nohup은 no hang up 의 약자 입니다. 해석 그대로 "끊지마!" 입니다. 내가 세션과 연결을 종료해도 지금 실행시킨 프로그램을 종료하지 마! 라는 것이죠. 즉, 로그아웃으로 세션과의 연결이 종료되더라도 nohup 으로 돌린 프로세스는 데몬 형태로 실행되게 되어 종료되지 않고 계속 실행되는 것 입니다. 2. nohup 어떻게 사용하지? 중단 없이 실행하고자 하는 프로그램 명령어 앞..
안녕하세요. 린아저씨 입니다. 우리가 리눅스 OS를 사용하면서 안쓰고 싶어서 안쓸수 없는 프로그램 중 하나가 'vi에디터' 입니다. CentOS를 쓰는 사람도, Ubuntu를 쓰는 사람도 vi 없이는 텍스트 파일 편집을 할 수 없습니다. (물론, nano 에디터도 있긴 해요!) 그래서 이번에는 "이것만 기억해" 시리즈로 vi 에디터에 대해 필수 단축키만 다뤄볼 생각입니다. (사실.. 맨날 쓰는 명령어만 써요 ^^;;) 사실 저희가 맨날 쓰는 vi 에디터는 현재는 vim 에디터 입니다. vi에서 성능이 향상된 프로그램이 vim인데 많은 사람들이 이미 vi 명령어에 익숙해져 있으니까 vim에 자동으로 alias를 걸어줘서 vi로 vim을 실행시키고 있습니다. (그리고 vim은 세글자지만 vi는 두글자라 한글..
안녕하세요. 린아저씨 입니다. 오늘은 MySQL Server 설치 방법에 대해서 포스팅하려고 합니다. 사실 Internet이 가능한 Public 환경에서라면 MySQL Server 설치는 아주 쉽습니다. 자 그럼 바로 설치해 봅시다. 1. apt Repository 업데이트 MySQL Server를 설치하기 전 apt repository를 최신으로 업데이트 해줍니다. $ sudo apt update 2. MySQL Server 설치 특정 버전을 선택할 것이 아니라면, ubuntu apt repository에서 제공해주는 버전으로 설치합니다. 20년 04월 14일 기준으로는 mysql server 5.7 버전을 제공해주고 있습니다. $ sudo apt install -y mysql-server 특별히 물어..
안녕하세요. 린아저씨 입니다. 회사에서는 모니터가 3개 세팅되어 있어서 불편함 없이 쓰지만, 집에서는 현재 모니터 한개로 쓰고 있어서 모니터 한개가 아쉬운 상황입니다. 그래서 기존에 가지고 있던 아이패드를 듀얼 모니터로 사용하는 방법에 대해 포스팅하고자 합니다. 먼저 준비물은 아이패드와 라이트닝 케이블, "duet display" 이라는 앱을 아이패드에 설치하는 것입니다. Duet Display는 12,000원 이라는 거금의 앱이긴하지만 개인적으로 아까운 금액은 아니라고 생각듭니다. 아이패드의 활용도를 +30 정도 올려주는 것 같습니다. 그렇게 Duet Display를 설치완료하면, 이번에는 윈도우에 Duet Display를 설치합니다. 윈도우는 무료에요!!! 아무 검색창에나 Duet Display라고 ..
MySQL도 버전업이 진행되면서, root 패스워드 변경 방법도 변화가 있었습니다. 기존 방법대로는 패스워드 변경이 안되는 경우가 있어서 다시 한번 정리 합니다. 제가 테스트한 버전은 ubuntu 18.04 이고, 공식 ubuntu respository에서 apt update 후에 mysql-server를 설치하게 되면, MySQL 5.7이 설치 됩니다. MySQL 5.7을 설치할 때는 별도로 root 패스워드 설정하는 과정이 나오지 않고 바로 설치가 완료됩니다. 따라서 설치가 완료되면 sudo 권한을 통해 mysql 접근해야합니다. $ sudo mysql -u root -p Eneter password: 패스워드를 물어보면 그냥 Enter를 치면 로그인이 됩니다. 이제 원하는 패스워드로 root 패스워..
top 시스템의 상태를 전반적으로 빠르게 파악 가능 (CPU, Memory, Process) 옵션 없이 입력하면 interval 간격(기본 3초)으로 화면을 갱신하며 정보를 보여줌 top 실행 전 옵션 순간의 정보를 확인하려면 -b 옵션 추가(batch 모드) -n : top 실행 주기 설정(반복 횟수) top 실행 후 명령어 shift + p : CPU 사용률 내림차순 shift + m : 메모리 사용률 내림차순 shifi + t : 프로세스가 돌아가고 있는 시간 순 k : kill; k 입력 후 PID 번호 작성. signal은 9 f : sort field 선택화면 -> q 누르면 RES 순으로 정렬 a : 메모리 사용량에 따라 정렬 b : Batch 모드로 작동 1 : CPU Core별로 사용량 ..
TMPFS(Temp File Storage) tmpfs는 유닉스 계열 운영 체제의 임시 파일 스토리지(Temp File Storage) 기능을 일컫는 이름이다. 마운트된 파일 시스템 처럼 보이지만 영구적인 기억 장치가 아닌 휘발성 메모리에 저장 된다. 덜 사용되는 페이지들을 스왑공간으로 스왑 아웃 처리를 하며, 메모리 부족현상을 피하고자 올라오는 페이지의 크기와 inode를 제한한다. (물리 RAM의 절반, RAM페이지 수의 절반) 간혹 메모리 영역이 부족으로 Target Error가 나면, tmpfs의 공간을 늘림으로 해결도 가능하다. # mount -o remount,size=10G tmpfs ramfs와 tmpfs의 차이 기본적으로 ramfs와 tmpfs는 몇가지 세세한 사항을 제외하고는 거의 동일..
Spark 를 사용하면서 Jupyter Notebook에 연동해서 사용하기도 하지만, Cli 환경에서 바로 Spark-shell에 붙어서 사용하는 경우 많다. 이때, 발생할 수 있는 Warning 중 두가지 사례에 대해 정리하려고 한다. 현재 화면은 Spark 1.6 버전이지만, Spark 2.X 버전에서도 동일하게 발생할 수 있다. 1) 경고 메세지 Failed to created SparkJLineReader 원인 spark-shell을 실행시키는 유저의 OS 홈 디렉터리 문제로 Permission denied의 경우 유저 홈 디렉터리에 접근권한이 없는 경우 발생. 아예 홈디렉터리 없는 경우에는 No such file or directory 라는 메시지 발생. 해결 spark-shell 유저의 OS ..
최근 외부망에 연결되지 않은 우분투에 호튼웍스 HDP Local Repository를 구축하면서 패키지 리스트에 apt 패키지를 등록하는 작업을 하였습니다. CentOS에는 Local Repository 생성하는 작업을 기존에 여러번 진행해 보았기 때문에 apt-key를 등록하는 방법까지 쉽게 했었지만, 이번에 우분투에 Local Repository를 등록하면 한참을 헤메었습니다. 그래서 이번 기회에 apt-key를 이용해서 gpg key를 등록하는 방법에 대해 정리하고자 합니다. apt key가 제대로 등록되어 있지 않을 경우에는 apt update 가 정상적으로 실행되지 않습니다. Command : apt-key Usage: apt-key [--keyring file] [command] [argume..
Hadoop User Experience의 약자인 Hue는 Hadoop 클러스터와 함께 사용되는 웹 기반 사용자 인터페이스입니다. Hue는 Hive Query Edit 및 Spark Job 등을 실행할 수 있고, HDFS 파일 Browsing 등이 가능합니다. 1. Identity provider 설치를 위해 WSO2 Identity Server 설치 1) https://wso2.com/identity-and-access-management/ 에서 wso2is-5.8.0.zip 다운로드 /opt/cloudera/security/saml 위치에 압축풀기 불러오는 중입니다... # cd /opt/cloudera/security/saml/wso2is-5.8.0/repository/conf # find ./ -..
Linux를 사용하다보면 ls cd 만큼 많이 사용하는게 grep 명령어 입니다. 그래서 조금 더 grep에 대해 자세히 정리하고자 합니다. grep은 입력되는 파일에서 주어진 패턴 목록과 매칭되는 라인을 검색한 다음 출력해주는 명령어 입니다. 1. 기본 문법 grep [option] pattern [file] 2. 옵션 옵션 설명 -c 매칭된 검색 결과를 출력하지 않고 매칭된 행의 총 라인 수를 출력한다. -i 매칭에 사용하는 문자의 대소문자를 구분하지 않는다. -l 패턴에 매칭된 라인이 하나라도 있는 파일의 이름만을 출력한다. -n 파일 내에서 매칭된 행 번호를 함께 출력한다. -s 에러 메시지 외에는 출력하지 않는다. -v 패턴과 매칭되지 않는 행만 출력한다. -w \로 둘러싸인 패턴표현을 하나의 ..
이제는 Disk 가격이 워낙 저렴해졌기 때문에 2T보다 작은 Disk를 사용하는게 더 이상하다. 그런데 fdisk를 이용해서는 2T까지 밖에 파티션이 되지 않아서 당황할때가 있다. 2T 이상으로 파티션을 설정할 때는 GNU에서 제공하는 parted 명령어를 사용해서 파티션을 잡아야한다. 1. 파티션 잡을 디스크 선택 # parted /dev/sdb 2. 디스크에 라벨링 (parted)mklabel gpt *기본적으로 linux partition은 MBR(Master boot Record) 방식이다. 그런데 이 MBR의 파티션당 최대 크기는 2TB이다. 따라서 18EB(엑사바이트)까지 파티션 크기를 잡을 수 있는 GPT(GUID partition Table) 방식을 써야한다. 3. 파티션 나누기 (part..
서버에서 여러 윈도우 서버로 부터 cifs 마운트를 사용해야하는 경우가 있습니다. 그런데 윈도우 서버 문제로 인해 이 cifs 마운트가 해제되는 경우가 간혹 발생하게 됩니다. 이럴 경우 사전에 마운트에 발생한 장애를 알기 쉽지 않기 때문에, 적절한 간격으로 마운트를 확인할 필요가 생겼습니다. 이때 아래와 같이 mountponit 명령어를 이용해서 mount가 정상적으로 유지되고 있는지 확인할 수 있습니다. 또한 다음과 같은 스크립트를 이용하여 쉡스크립트를 작성하여 crontab에 등록하게 되면, 원하는 간격으로 mount에 대한 상태 체크 또한 가능합니다. 사용 명령어 : mountpoint -q #!/bin/bash # 마운트가 되어있지 않으면 "Not mounted" 출력 if ! mountpoint..
1. vmware 설정하기 VMware workstation 15.5 PRO 기준으로 설명하도록 하겠습니다. 네트워크 변경에 앞서 Ubuntu 18.04 Bionic Beaver의 VMware 가상이미지는 모두 생성하셨을 거라 생각듭니다. 1)VMware Workstaion의 Edit 탭에서 Virtual Network Editor 클릭 2) Virtual Network 목록에서 VMnet8 NAT Type의 Network가 있는지 확인 2-1) VMnet8 NAT Type의 Network가 있을 경우 수정을 위해 Change Settings를 클릭 2-2) VMnet8 NAT Type의 Network가 없을 경우 Change Settings를 먼저 누른 후 Add Network를 눌러 NAT Type의..
Ubuntu 18.04 Bionic Beaver 에서는 기존 하위 버전인 Ubuntu16.04, Ubuntu14.04 등과 달리 네트워크 설정에서 달라진 부분들이 생겼습니다. 저도 처음 이부분을 접했을 때는 뭐지..? 싶으면서 당황했었지만, Ubuntu 18.04의 업데이트 Release 노트만 잘 봤어도 충분히 알 수 있었을텐데 저의 안일함에 민망해졌습니다. 우선 Ubuntu 18.04 에서는 기존에 /etc/network/interface 파일을 더 이상 사용하지 않습니다. 그리고 /etc/netplan/77-cloud-init.yaml 파일을 사용하여 네트워크를 정의하게 됩니다. yaml 파일을 사용하다보니 개인적으로 여러개의 IP를 사용하게 될 경우 기존 보다 가독성 측면에서 좀더 나아지지 않았나..
1. 파일의 존재 여부 확인하기 test 명령어 -e 옵션 사용 /// test 명령어를 대괄호[] 로 대체 가능 확인할 파일 : /tmp/my_test_file.txt #!/bin/bash file_path='my_test_file.txt' #파일이 있을 경우 메시지 출력 if test -e $file_path; then echo "$file_path : Found the file." fi ------------------------------- #파일이 없을 경우 메시지 출력 if ! test -e $file_path; then echo "$file_path : Not found the file." fi ------------------------------- #대괄호[] 사용 if [ -e $fil..
맥북은 기본적으로 OS 초기화 프로그램이 내장되어 있기 때문에 간편하게 초기화/포맷을 진행 할 수 있습니다. 1. 우선 맥북을 종료 후 시작 또는 재시작을 해주어 초기에 지구가 도는 화면에서 커맨드⌘(Command) + R 을 길게 눌러 줍니다. 2. 아래와 같은 macOS 유틸리티 화면이 나오면 정상적으로 복구 모드로 시동된 것입니다. 3. macOS 유틸리티 화면에서 네번째에 디스크 유틸리티를 선택합니다. 4. 디스크 유틸리티에서 왼쪽에서 내장 디스크를 선택해주고, 상단에 지우기를 클릭해 줍니다. 5. 디스크를 지우고 나면, 다시 macOS를 설치해줍니다. 아래 사진과 같이 두번째 macOS 다시 설치를 선택합니다. 6. 아래와 같이 설치될 macOS 버전과 계속 버튼이 나오면, 계속을 선택해 줍니다..
인터넷을 사용할 수 없는 우분투(Ubuntu) 폐쇄망(Offline) 환경에서 도커를 설치하는 방법 1. 사전 확인 사항 및 설치 프로그램 64-bit 설치 3.10 버전 이상의 리눅스 커널. 사용하고 있는 리눅스의 가장 최신 버전 커널을 사용할 것을 권고 iptables 버전 1.4 이상 $sudo apt-get install iptables git 버전 1.7 이상 $sudo apt-get install git 일반적으로 procps 또는 유사한 패키지에서 제공하는 ps 실행파일 $sudo apt-get install procps Xz Utils 4.9 이상 $sudo apt-get install xz-utils 2. Static binary archive 다운로드(https://download.do..
1. Apache Zeppline 다운로드 및 압축 풀기 https://zeppelin.apache.org/download.html Download Note: From Zeppelin version 0.6.2, Spark interpreter in binary package is compatible with Spark 2.0 & Scala 2.11 and Spark 1.6(or previous) & Scala 2.10. You can use even different version of Spark at the same time if you set different SPARK_HOME in interp zeppelin.apache.org wget http://apache.mirror.cdnetworks.c..
*Cloudera Engineering Blog에 기재된 내용 입니다. 출처 : https://blog.cloudera.com/blog/2019/06/hdfs-erasure-coding-in-production/?fbclid=IwAR1agLV-T50SV2MtWyKTDzFIBPoonR-NTR5CWdl7szJ9BAvcaME1QGR80vg Apache Hadoop 3.0에서 제공되는 주요 기능인 HDFS Erasure coding(EC)는 CDH 6.1.x 이상의 버전에서도 사용할 수 있으며, Spakr 및 MapReduce와 같은 특정 응용 프로그램에서 사용할 수 있습니다. 이전 버전의 HDFS는 여러 데이터 복사본(기존 스토리지 array의 RAID1과 유사)을 복제함으로써 Fault tolerance를 ..
Third Party 애플리케이션을 이용하여 JDBC로 Impala에 쿼리를 던지다 보니 특정 Impala Daemon에 커넥션이 집중되는 문제가 발생하였습니다. 이를 해결하기 위하여 HAProxy를 이용하여 Impala에 대한 커넥션을 Load Balancing 해주었습니다. 이를 통해 얻게된 이점으로는 1. Impala를 이용하는 애플리케이션들이 특정 Impala Daemon에 접근하지 않고 공통적인 Proxy 서버를 통해서 접근하게 됩니다. 2. Coordinator Only로 지정된 Impala Daemon들에게만 Least connection 또는 Round robin 방식으로 커넥션을 분배할 수 있습니다. 3. 특정 Impala Daemon에게 과도하게 부하가 걸리는 것을 방지할 수 있습니다...
AWS를 처음 접하면서 가장 헷갈렸던 부분이 인터넷 망에서 EC2에 접근 하기 위한 VPC를 설정하는 부분이었습니다. 따라서 까먹지 않기 위해 기록하려고 합니다. VPC 생성하기 1. 먼저 VPC 대쉬보드에 접근해서 VPC 생성을 눌러 줍니다. 2. 다음과 같이 VPC 이름 태그와 IPv4 CIDR 블록을 설정해 줍니다. 3. 다음과 같이 VPC가 생성완료 되었습니다. 4. VPC가 정상적으로 생성되고 나면 다음과 같이 목록에서 확인할 수 있습니다. 서브넷 생성하기 1. VPC를 생성하였다면 이번에는 서브넷을 생성합니다. 2. 서브넷 이름 태그와 앞서 만들었던 VPC를 선택하고, VPC의 IPv4 CIDR 범위 내에서 해당 서브넷이 가질 IPv4CIDR을 구성하여 줍니다. 3. 서브넷 생성이 완료되면 다..
AWS EC2에 접근하기 위해서는 PEM File을 이용하게 되는데, 이 때문에 EC2 끼리 패스워드 없이 접속하기 위해서 ssh-keygen 후 public key를 배포하는데 ssh-copy-id 를 이용 할 수가 없다. 이러한 문제를 해결하기 위해 방법을 찾아보니 다음과 같이 해주면 된다. cat ~/.ssh/id_rsa.pub | ssh -i "JOON-KEY-PAIR.pem" root@10.0.0.1 "cat - >> ~/.ssh/authorized_keys"
AWS 공부를 시작하면서 가장 먼저 접하는 어려움이 AWS EC2에 SSH로 접근하기 위해 pem 파일을 이용해야 한다는 점이다. 일반적으로 아래와 같이 접근할 수 있지만 굉장히 번거롭다. ssh -i ~/JOON-KEY-PAIR.pem root@10.0.0.1 물론 pem 파일을 ~/.ssh 디렉터리에 옮겨놓으면 조금 더 간단히 경로 없이 pem파일 이름만 치고도 접근가능하지만, 여전히 번거롭다. 이에 정말 간단히 접근할 수 있도록 ~/.ssh/config 파일을 만들어서 사용하려고 한다. vi ~/.ssh/config Host joon-ec2-01 HostName 10.0.0.1 User root IdentityFile ~/.ssh/JOON-KEY-PAIR.pem Host joon-ec2-02 Hos..
다음 내용은 charsyam 님께서 블로그에 올려주신 내용을 토대로하여 하였습니다. (https://charsyam.wordpress.com/2019/04/26/%EC%9E%85-%EA%B0%9C%EB%B0%9C-hive-metastore-%EC%97%90%EC%84%9C-location%EC%9D%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EA%B4%80%EB%A6%AC%EB%90%A0%EA%B9%8C/?fbclid=IwAR12jAsZA4CxAKD6dVulsj9WCxdclcr4sY38DcfZ0tU2xXNroSwklyuHZR4) CREATE TABLE `test1`( `id` bigint PARTITIONED BY ( `datestamp` date) ROW FORMAT SERDE 'org...
~/.prestoadmin/coordinator와 workers에 있는 properties.config에서 수정 및 추가할 수 있는 설정값에 대한 설명 General Properties join-disribution-type Type : String Allowed values : AUTOMATIC / PARTITIONED / BROADCAST Default value : PARTITIONED 사용할 분산 조인의 유형 입니다. PARTITIONED로 설정하면, 프레스토는 해시 분산 조인을 사용합니다. BROADCAST로 설정하면, 왼쪽 테이블의 데이터가 있는 클러스터의 모든 노드에 오른쪽 테이블을 브로드 캐스팅 합니다. PARTITIONED JOIN은 조인 키의 해시를 사용하여 두 테이블을 모두 재배포해야..
다음 설정을 추가하여 GC 문제를 진단하는데 필요한 로그를 확인한다. /root/.prestoadmin/coordinator와 workers 디렉터리의 jvm.config 파일에서 수정 -XX : + PrintGCApplicationConcurrentTime -XX : + PrintGCApplicationStoppedTime -XX : + PrintGCCause -XX : + PrintGCDateStamps -XX : + PrintGCTimeStamps -XX : + PrintGCDetails -XX : + PrintReferenceGC -XX : + PrintClassHistogramAfterFullGC -XX : + PrintClassHistogramBeforeFullGC -XX : PrintFLSS..
1. Presto와 Hive를 연동하기 위해서는 hive.properties 라는 hive 설정 정보가 담긴 파일이 필요합니다. # vi /root/.prestoadmin/catalog/hive.properties connector.name=hive-hadoop2 hive.metastore.uri=thrift://:9083(metastore-port) HA구성 시에는 다음 정보를 추가로 입력하여 준다. hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml 2. 위에서 설정한 catalog 정보를 presto server에 추가해주고 Presto 서버를 재시작해준다. #presto-admin catalog ad..