Cloudera Hadoop 6.3.0 Install
· Version : CDH 6.3.0, Centos 7
Cloudera Hadoop (CDH)를 사용하여 Hadoop 환경을 구성하는 방법에 대해서 알아본다. 이번 실습에서는 실제 운영환경과 유사한 환경을 구성하기 위하여 로컬 컴퓨터에 가상화 머신을 사용하여 Master Node 1, Data Node 4개의 Multi Node를 구성한다. 기본적인 가상화 환경 설정은 이번 포스트에서는 다루지 않는다.
Node |
OS |
RAM |
DISK |
ETC |
HD-Master |
Centos 7 |
5GB |
50GB |
Open JDK 1.8 |
HD-Node1 |
Centos 7 |
2GB |
20GB |
Open JDK 1.8 |
HD-Node2 |
Centos 7 |
2GB |
20GB |
Open JDK 1.8 |
HD-Node3 |
Centos 7 |
2GB |
20GB |
Open JDK 1.8 |
HD-Node4 |
Centos 7 |
2GB |
20GB |
Open JDK 1.8 |
[OS Installation]
CDH 를 구성할 환경의 OS는 Centos 7 버전을 사용하며, 아래 링크에서 다운로드 받아 설치 할 수 있다.
· Download Centos : https://www.centos.org/download/
OS를 설치 하였으면 기본적인 환경 세팅을 한다. 아래 명령어는 리눅스 설치 후 필자가 기본적으로 설치하는 패키지 이다.
--Default Setting and yum update yum upgrade yum update
yum groupinstall "base" yum groupinstall "development tools"
yum intsall net-tools |
실제 운영환경에서는 보안 정책에 따라 방화벽을 사용해야하지만, 실습에서는 예상하지 못한 사이드이펙트 발생을 최소화하기 위해 방화벽을 OFF 하도록 한다.
--Firewall Disable yum install firewalld
--SELINUX값만 disabled로 변경 vi /etc/sysconfig/selinux (아래 명령부분을 disabled 로 수정) SELINUX=disabled
--vi 모드에서 실행 setenforce 0
systemctl disable firewalld (또는systemctl stop firewalld )
-- 아래 명령 실행 후 runnuing 이면 reboot 진행 firewall-cmd --state |
VM을 복사하여 사용하였을 경우 아래 명령을 사용하여 hostname을 변경할 수 있다.
--Hostname Change hostnamectl set-hostname hd-master |
기본적인 설정이 완료 되었으면 Python 버전을 확인한다. Centos 7에는 기본적으로 Python 2.7.X 버전이 설치되어 있다.
--Check Python Version >>python --version Python 2.7.5 |
전체 노드의 hosts 파일에 각 node의 정보를 입력한다. 아래 IP는 필자의 CDH 설치 환경이므로 각 사용자에 맞게 수정하여 사용한다.
--host setting vi /etc/hosts
172.17.139.91 hd-master 172.17.139.90 hd-node1 172.17.139.87 hd-node2 172.17.139.86 hd-node3 172.17.139.83 hd-node4 |
[Master Node]
Master Node에서 Cloudera Manager 환경을 설치하여 CDH Manager Web UI를 사용하여 CDH Environment를 구축한다. CDH Install에 대한 자세한 내용은 아래 공식 가이드를 참고할 수 있도록 한다.
· Official Installation Guide : https://docs.cloudera.com/documentation/enterprise/6/latest/topics/installation.html
CDH를 다운로드 할 수 있도록 Repository를 설정하고, JDK를 설치한다. 오라클 JDK의 경우 상용라이선스이기 때문에 필자는 Open JDK를 설치 하였다. 그리고 Cloudera Manager Packages를 설치한다.
--Configure a Repository yum-config-manager –add-repo https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/cloudera-manager.repo
--Install open jdk yum install java-1.8.0-openjdk-devel
--install Cloudera Manager Pakckages yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server |
Hadoop Echo System에서 사용할 각종 메타 데이터를 저장하기 위해 MySQL을 설치한다. 사용자 기호에 따라 MariaDB, PostgreSQL, Oracle 을 설치할 수 있다.
--Install and Configure MySQL for Cloudera Software wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm sudo yum update sudo yum install mysql-server sudo systemctl start mysqld sudo systemctl stop mysqld |
MySQL 서비스 환경을 구성한다. 사용자의 시스템 리소스에 따라 my.cnf 환경변수를 수정하여 사용할 수 있도록 한다. my.cnf 의 기능에 대한 설명은 이번 포스트에서는 생략한다.
--my.cnf 수정 vi /etc/my.cnf
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock transaction-isolation = READ-COMMITTED # Disabling symbolic-links is recommended to prevent assorted security risks; # to do so, uncomment this line: symbolic-links = 0
key_buffer_size = 32M max_allowed_packet = 32M thread_stack = 256K thread_cache_size = 64 query_cache_limit = 8M query_cache_size = 64M query_cache_type = 1
max_connections = 550 #expire_logs_days = 10 #max_binlog_size = 100M
#log_bin should be on a disk with enough free space. #Replace '/var/lib/mysql/mysql_binary_log' with an appropriate path for your #system and chown the specified folder to the mysql user. log_bin=/var/lib/mysql/mysql_binary_log
#In later versions of MySQL, if you enable the binary log and do not set #a server_id, MySQL will not start. The server_id must be unique within #the replicating group. server_id=1
binlog_format = mixed
read_buffer_size = 2M read_rnd_buffer_size = 16M sort_buffer_size = 8M join_buffer_size = 8M
# InnoDB settings innodb_file_per_table = 1 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 64M innodb_buffer_pool_size = 4G innodb_thread_concurrency = 8 innodb_flush_method = O_DIRECT innodb_log_file_size = 512M
[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_ALL_TABLES |
MySQL 서비스를 시작하고, MySQL Security 환경을 세팅한다. 아래 스크립트에서 Y/N 은 각 세팅에 대한 Y/N 답변 순서이다.
--MySQL Start sudo systemctl enable mysqld sudo systemctl start mysqld
--setting for mysql security sudo /usr/bin/mysql_secure_installation
y y n y y |
MySQL 설치가 완료되었으면 Hadoop Echo System에서 사용할 JDBC 드라이버를 설치 한다.
--mysql jdbc install wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz tar zxvf mysql-connector-java-5.1.46.tar.gz sudo mkdir -p /usr/share/java/ cd mysql-connector-java-5.1.46 sudo cp mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar
--Tip : JDBC에러로 Hive 메타스토어 설치 실패시 아래 버전으로 설치 yum install http://repo.mysql.com/yum/mysql-connectors-community/el/7/i386//mysql-connector-java-8.0.16-1.el7.noarch.rpm
|
MySQL에 접속하여 Hive, Oozie, Hue에서 사용할 데이터베이스를 생성하고 권한을 부여한다. 이번 실습에서는 편의상 root 권한을 사용하였다.
-Connect to myslq and Installation for Database mysql -u root -p
CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE DATABASE oozie_oozie_server DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'YOURPASSWORD';
|
Cloudera Server를 설치하고 CDH 서비스를 실행한다.
--Preparing the Cloudera Manager Server Database sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm |
--Install Cloudera server yum install cloudera-manager-daemons cloudera-manager-server cloudera-manager-server-db-2 -y
--Start for cloudera DB and Server daemon service cloudera-scm-server-db start service cloudera-scm-server start |
정상적으로 서비스가 실행되면 Web browser에서 Manager UI에 접근할 수 있다. Web Service 주소는 HD-Master 노드의 IP:7180 으로 접속한다.
--Connect to Cloudera Manager UI 172.17.139.91:7180/ |
[Data Node]
JDK 설치만 하면 나머지 작업은 CDH Manager 에서 자동으로 필요한 패키지를 설치한다.
--Install open jdk yum install java-1.8.0-openjdk-devel
|
[CDH Manager Setting]
Cloudera Manager Web UI에서 클러스터 환경 구성 및 사용자에게 필요한 Echo System을 구성할 수 있다. 아래 그림은 각 진행 사항을 캡처한 화면으로 사용자마다 화면의 내용이 조금씩 다를 수 있기 때문에 기본적인 참고 용도로 사용한다. Manager 에 접속하며 기본 계정 및 비밀번호는 admin 을 입력한다.
실습환경에서는 무료 버전인Cloudera Express 를 선택한다. Enterprise Trial 을 사용할 경우 60일 지나면 자동으로 Express 버전으로 동작한다.
클러스터에서 사용할 이름을 지정한다.
클러스터를 구성할 Host를 입력한다. 입력 방식은 아래 그림을 참고한다. (VM을 여러번 설치하고 실습하는 과정에서 일부 스크린샷의 IP 및 Node 정보가 실습 환경이 다를 수 있습니다.) 노드 통신이 정상적으로 확인되면 아래와 같이 서버 목록이 자동으로 나타난다.
Package를 사용자가 직접 설치할 수도 있으나 권장사항인 Use Parcels 를 선택하여 사용하였다. 학습을 위한 환경이기 때문에 처음에는 기본 세팅을 사용하도록 하며 (예상치 못한 문제 발생 방지) 익숙해지면 사용자 커스터마이징을 하는 것을 권장한다.
JDK 설치에서는 체크박스를 선택하지 않도록 한다. 이미 CDH 설치 과정에서 Open JDK를 설치 하였기 때문에 해당 스텝은 스킵하도록 한다. (Oracle JDK의 경우 상용 라이선스 이므로 주의한다.)
실습환경에서는 root 계정을 모두 사용 사용으로 설정하였다.
각 노드에 Agent 가 설치되는데, 설치 시간이 조금 오래 걸린다. 만약 이 단계에서 설치 에러가 발생한다면 전체 Retry를 하지 말고 각 노드 옆의 Retry를 사용하여 개별 설치를 진행하면 성공적으로 설치된다. (필자의 경우 실습할때마다 성공과 실패가 랜덤하게 발생하였음)
Cloudera Agent 설치가 완료되면 Parcels 인스톨 과정이 시작된다. 외부 네트워크에서 필요한 파일을 다운로드 받고 각 Node에 자동으로 설치한다.
클러스터 세팅이 완료되었으면 Inspect 상태를 나타내는데, 마지막 항목을 클릭하여 마무리 한다.
클러스터 구축 후 필요한 Echo System 을 설치하는데, 마지막의 Custom Services 를 선택하여 사용자에 필요한 환경을 설치 할 수 있도록 한다. 필자의 경우 아래 리스트의 서비스를 설치 하였다.
· hdfs
· hue
· impala
· yarn
· spark
· hive
· hbase
· zookeeper
· oozie
각 서비스에 대한 Role을 어느 Node에서 담당할지 선택한다. 안정적인 HA구성을 위해서는 각 다른 Node를 할당할 수 있도록 한다. 특히 Name Node의 경우 HDFS의 각 데이터에 대한 정보를 보관하고 있기 때문에 매우 중요하다. 또한 Hadoop에서 SPOF (Single Point Of Failure) 이기 때문에 HA 구성이 필수이다. 실제 운영 환경에서는 각 롤에 따라 노드를 배분해야 하지만 실습에서는 기본 선택을 사용할 수 있도록 한다.
각 서비스에서 사용할 메타데이터를 저장하는 데이터베이스 연결정보를 입력한다. 필자의 경우 MySQL을 설치하였으며 Database Hostname에서 MySQL 포트(3306)로 변경하여 사용한다.
HDFS 설정에서는 분산 파일 단위의 크기를 설정할 수 있으며, 기본 크기는 128MB이다.
서비스 설치가 완료되면 Cloudera Manager에서 아래와 같이 각 서비스에 대한 상태를 모니터링 할 수 있다. 이 대시보드에서 추가 서비스를 설치할 수도 있으며 각종 트러블 슈팅에 필요한 로그를 확인할 수 있다.
[참고자료]
· Download Centos : https://www.centos.org/download/
2019-11-13 / Sungwook Kang / http://sungwookkang.com
Hadoop, Cloudera Hadoop, CDH, 하둡, 클라우데라 하둡, 스팍, Spark, YARN, Hadoop 2.0, Cloudera Manager
'SW Engineering > Hadoop' 카테고리의 다른 글
HDFS 블록 (0) | 2019.11.16 |
---|---|
HDFS 파일 저장(로컬 업로드) (0) | 2019.11.14 |
하둡실행 (0) | 2015.07.22 |
하둡 환경설정 파일 수정 (0) | 2015.07.22 |
하둡 인코딩 방식 설정 (0) | 2015.07.22 |