Cloudera PvC를 설치하기 위해 사전에 준비해야할 업무에 대해서 설명합니다.
// Cloudera CDP Private Cloude Base Trial 관련 자료
CDP Private Cloud Trial Version 다운로드 : https://www.cloudera.com/downloads/cdp-private-cloud-trial.html
CDP Private Cloud 설치 문서 : https://surgach.tistory.com/62
CDP Private Cloud 문서 : https://docs.cloudera.com/cdp-private-cloud/latest/index.html
// CDP OS Requirements
CDP Operating System Requirements
파일시스템은 표준 파티션으로 해야하고 LVM 으로하면 안됨
File System : ext3, ext4, xfs, s3
Kudu File System : ext4, xfs
/etc/fstab noatime option 설정(file read시 metadata write 금지)
- /dev/sdb1 /data1 ext4 defaults,noatime 0
- mount -o remount /data
/etc/security/limits.d/20-nproc.conf 가 /etc/security/limits.conf 의 설정을 override
- nproc을 65536 혹은 262144로 설정
// 사전 준비사항
-- File System Partition Sizing
/usr 1GB
/var 5GB ~ 1TB -- /var/log 에 hadoop application log가 생성됨
/opt 15GB
/data datanode dfs 영역(가능한 최대 용량 설정, 없으면 /dfs에 생성됨)
-- Hostname 설정
sudo hostnamectl set-hostname hadoop1 : 호스트명 설정, hostname(hadoop1.futuresoft.co.kr)으로 설정 확인
-- DNS 서비스 혹은 hosts 파일 설정
DNS 서버 구축
sudo vi /etc/hosts 에 최소 3대의 클러스터 서버들을 IP FQDN hostname 형식으로 등록
192.168.0.151 hadoop1.futuresoft.co.kr hadoop1
Microsoft Windows PC의 경우 \windows\system32\drivers\etc의 hosts 파일 수정
-- NTP 서비스 설정
NTP 서버 구축
-- Apply latest update to linux system
sudo yum update –y 모든 프로그램을 최신 프로그램으로 업데이트
sudo reboot : 재부팅하여 설치를 위한 준비 완료
// CDP Configuration Sell Script 복사 및 설정 : 아래 STEP 1 ~ STEP 10의 내용을 실행하는 shell script
CDP 설치 계정(hadoop)에 파일 복사(혹은 root 계정에 복사하고 root 권한으로 실행)
chmod +x cdp_preconfiure.sh //실행 옵션 설정
sudo ./cdp_preconfigure.sh // 아래 구성 내용 자동 설정
shell script 실행 후 설정 적용을 위해 재부팅됨
cdp_preconfigure.sh // 파일 실행
-- STEP 1: Setup IPv6 disable in /etc/sysctl.onf
ip addr | grep inet6 로 IPv6 설정 여부 확인(inet 정보가 나오면 enable)
echo "net.ipv6.conf.ens33.disable_ipv6 = 1" >> /etc/sysctl.conf
/etc/sysctl.conf 파일에 아래 내용 추가
# net.ipv6.conf.ens33.disable_ipv6=1 // 안해도 될듯
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6=1
# net.ipv6.conf.lo.disable_ipv6=1 // 안해도 될듯
sysctl -p 로 변경사항 적용
ip addr | grep inet6로 빈 결과가 나오는지 확인
-- STEP 2: Setup vm.swappiness in /etc/sysctl.conf
sudo vi /etc/sysctl.conf 파일에 vm.swappiness=1 추가(1은 swap 사용 최소화, 60이 기본값, 100은 적극 사용)
혹은 sed -i "$ a\sysctl -w vm.swappiness=1 " /etc/sysctl.conf 로 추가
sudo sysctl -w vm.swappiness=1 실행중 설정
cat /proc/sys/vm/swappiness 로 설정값 확인
sysctl -p로 변경사항 적용
-- STEP 3: Disable firewall daemon
systemctl list-unit-files | grep firewalld : 방화벽 설정 확인
sudo systemctl stop firewalld : 방화벽 중지
sudo systemctl mask firewalld : 방화벽을 다른 프로세스가 실행 금지
sudo systemctl disable firewalld : 방화벽 init에서 실행 금지
sudo systemctl status firewalld
-- STEP 4: Modify secure linux configuration in /sec/selinus/config
setenforce 0 : 설치중에만 해제(0 : Permissive, 1 : Enforcing)
또는 sudo vi /etc/selinux/config 파일에 SELINUX=disabled 추가(영구 해제 설정)
sestatus로 설정 확인(disabled)
-- STEP 5: Modify THP(Transparent Huge Page) configuration in /etc/rc.d/rc.local
vi /etc/rc.d/rc.local 아래 내용 반영 (/etc/rc.local로 symbolic link)
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
chmod +x /etc/rc.d/rc.local 로 실행 권한 부여
cat /proc/meminfo | grep -i hugepages_total 로 설정값이 0인지 확인)
sudo systemctl restart network 네트워크를 재부팅하여 설정값 적용
-- STEP 6: Modify ulimit configuration in /etc/security/limits.conf
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 65536
* hard nproc 65536
-- STEP 7: Configure JDK environments in /usr/java
/usr/java/<java-version>으로 /lib/jvm/<java-version>을 symbolic link
- cd /usr
- mkdir java
- ln -s /lib/jvm//java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64 /usr/java/jdk1.8
java -version -- JAVA 설정 및 사용 버전 확인
-- STEP 8: Configure JAVA environment in /etc/profile
/etc/profile 혹은 /etc/profile.d/cloudera.sh 에 아래 JAVA 환경정보 설정
/etc/profile에 아래 환경정보 설정(모든 계정에 동일한 환경 설정)
- export JAVA_HOME=/usr/java/jdk1.8
- export PATH=$JAVA_HOME/bin:$PATH // PATH에 JAVA bin 디렉토리를 등록
- export CLASSPATH=/opt/jara:$CLASSPATH // CLASSPATH에 사용자 jar 디렉토리 추가
source /etc/profile -- profile에 환경 정보를 설정한 경우
echo $JAVA_HOME -- JAVA_HOME 설정 확인
echo $PATH -- PATH 설정 확인
which java / -- java가 제대로 설치되었는지 확인
-- STEP 9: Remove preinstalled PostgreSQL DBMS
yum remove postgresql* -y
yum list installed postgresql*
-- STEP 10: tree utility 설치
yum install tree
// Modify ulimits default in /etc/security/limits.d/20-nproc.conf
vi /etc/security/limits.d/20-nproc.conf
* soft nproc 4096 --> 65536
// Copy Hive JDBC Driver to /usr/share/java directory
Cloudera hive JDBC driver 최신버전을 다운받아 /usr/share/java 디렉토리에 복사
https://cloudera.com/downloads/connectors/hive/jdbc/2-6-15.html 에서 목록 중 최신버전 다운로드
Cloudera_Hive_JDBC_jdbc_2.6.15.108.zip // 참고용이며 최신버전 확인 필요
// Copy DBMS JDBC driver to /usr/share/java directory
MySQL은 MySQL JDBC Driver 에서 "Platform Independant" --> "just start my download"클릭하여 다운로드
mysql-connector-java-8.0.27.jar // 참고용 최신버전 확인 필요
mv mysql-connector-java-8.0.27.jar mysql-connector-java.jar // JDBC connector의 이름에서 버전을 제거
// Configure /etc/sudoers with install account(CDP 설치 계정에 root 권한 부여)
root로 로그인
chmod +x /etc/sudoers // sudoers 파일에 대한 편집 권한 부여
vi /etc/sudoers // sudoers 파일을 편집(사용자 계정에 권한 추가)
hadoop ALL=(ALL) NOPASSWD: ALL // hadoop 계정에 sudo 권한 부여(root 암호 없이 자신 암호로 sudo 사용)
%wheel ALL=(ALL) NOPASSWD: ALL // wheel 그룹에 대해서도 코멘트 #(comment)을 제거
chmod -x /etc/sudoers // sudoers 파일에 대한 권한 해제(설치후 권한 해제)
hadoop 계정으로 로그인
sudo cat /etc/sudoers // root 암호 없이 파일 내용이 보이면 sudoers 설정 성공
// Generate ssh key in cloudera manager host and copy to all cluster hosts
ssh-keygen -t rsa -P "“ : cloudera manager hos(cmhost)t에서 ssh private/public key set 생성(사용자 계정 홈의 .ssh 폴더에 생성됨)
.ssh 폴더 파일
- id_rsa : private key file
- id_rsa_pub : public key file(접속할 서버의 authorized_keys 파일에 이 내용 추가하면 암호없이 ssh 로그인 가능)
- authorized_keys : 접속 허용 서버의 공개키(접속할 서버에 id_rsa.pub 내용 추가)
ssh-copy-id –i ~/.ssh/id_rsa.pub hadoop@worker1 : worker1 서버의 hadoop 계정에 cmhost의 public key를 authorized_keys 파일에 추가
Cloudera Manager Server(cloudera manager host)가 설치되는 서버 자신(cmhost)도 반드시 ssh key를 복사해야 함(localhost)
ssh localhost : localhost로 ssh 접속 확인(암호를 묻지 않음) ssh hadoop@worker1.futuresoft.co.kr : cmhost에서 worker1 서버의 hadoop 계정으로 ssh 접속(암호를묻지 않음)
ssh worker1 : 현재 cmhost 로그인 계정과 동일한 계정으로 worker1 서버에 ssh 접속 (hadoop 계정이면 암호를 묻지 않음)
Comments