본문 바로가기
Server

[Ambari] Ambari, HDP 설치 및 클러스터 구축

by heed159 2022. 5. 17.

최근 회사 서버에 Ambari와 HDP를 새로 설치하였는데 그 설치 과정과 발생했던 이슈를 정리해보려고 한다.

대상 서버는 총 세 대이며 설치한 버전은 아래와 같다.

  • Ambari 2.7.3.0
  • HDP 3.1.4.0
  • CentOS7 서버 3대

모든 설치는 클라우데라에서 제공하는 공식 문서를 참조하였으며 추가적으로 다른 블로그들도 참고하면서 설치했다.

 

https://docs.cloudera.com/HDPDocuments/Ambari-2.7.3.0/bk_ambari-installation/content/determine_product_interop.html

 

Product Interoperability - Hortonworks Data Platform

​Product Interoperability Ambari 2.7.3 supports only HDP-3.1.0 and HDF-3.2.0 The Support Matrix tool provides information about: Operating SystemsDatabasesBrowsersJDK Use the following URL to determine support for each product version. https://supportmat

docs.cloudera.com

 

 

Ambari & HDP

본 설치에 들어가기에 앞서 Ambari와 HDP가 무엇인지 간략하게 알고 넘어가자.

먼저 Ambari는 Apache Hadoop 클러스터를 프로비저닝, 관리, 모니터링 및 보호할 수 있는 오픈소스 관리 플랫폼이다. 

직관적인 웹 UI를 제공하고 운영 제어를 위한 일관되고 안전한 플랫폼을 제공하여 Hadoop 관리를 간소화한다. 직접 설치를 해보며 느낀 가장 큰 이점은 한눈에 Hadoop 플랫폼을 관리하고 모니터링할 수 있다는 것 같다.

이러한  Ambari를 통해 Hadoop 플랫폼인 HDP(Hotonworks Data Platform)를 설치할 수 있다.

 

 

사전작업

Ambari를 설치하기 위한 최소 준비사양은 공식 홈페이지에 잘 나와있으니 참고하면 된다.

 

1. 서버 3대 hostname 설정(FQDN)

pb7.penta.co.kr
pb8.penta.co.kr
pb4.penta.co.kr

hostname은 . 으로 구성된 FQDN으로 이루어져 있어야 한다. 이렇게 설정하지 않으면 추후 정상적으로 설치가 안될 수 있으니 꼭 위의 방식으로 네이밍 해야 한다.

 

 

2. JAVA_HOME 설정

서버 3대 모두 openjdk를 설치하고 PATH를 잡아줘야 한다. 

 

 

3. Ambari 서버가 설치될 호스트에서 클러스터의 다른 모든 호스트 간에 ssh 연결 설정

[root@pb7 ~]# ssh-keygen
[root@pb7 ~]# chmod 700 ~/.ssh
[root@pb7 ~]# chmod 600 ~/.ssh/authorized_keys
[root@pb7 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@pb8.penta.co.kr
[root@pb7 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@pb4.penta.co.kr

 

4. 모든 서버에서 NTP 활성화

yum install -y ntp
systemctl enable ntpd

 

5. 네트워크 구성 파일 편집 (모든 호스트)

[root@pb7 ~]# vi /etc/sysconfig/network
[root@pb7 ~]# NETWORKING=yes
[root@pb7 ~]# HOSTNAME=pb7.penta.co.kr //각 서버에 맞게 설정

 

6. 방화벽 내리기

[root@pb7 ~]# systemctl disable firewalld
[root@pb7 ~]# service firewalld stop
[root@pb7 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

 

 

Local Repository 

우리가 패키지를 설치할 때 인터넷이 되는 환경이라면 yum, apt-get 등을 사용해서 외부에 있는 repository에서 다운로드하지만 폐쇄망인 경우엔 패키지를 외부에서 다운 받아와 일일이 설치해야 하는 번거로움이 있다. 실제로 작년 프로젝트 수행 중 개발 서버에서 python 라이브러리가 필요했는데 개발 서버가 폐쇄망이어서 외부에서 usb로 가져와 설치했던 기억이 있다. 심지어 의존성이 있는 패키지들도 하나하나 검색해서 다운 받으며 고생했던 아주 안 좋은 기억이다.

 

이러한 문제를 해결할 수 있는 방법으로 외부가 아닌 내 로컬에 Repository를 구축해서 yum으로 패키지를 설치할 수 있게 되는 것이다.

 

미러서버 구축(pb2.penta.co.kr)

 

1. HTTP 서버 생성(Apache httpd 설치 후 활성화)

 

2. 웹 서버용 디렉터리 생성(/var/www/html)

 

3. /var/www/html에 ambari/centos7, HDP/centos7, HDP-UTIL/centos7 디렉터리 생성 후 각각 압축 해제

 

4. 새로 생성된 로컬 리포지토리를 찾을 수 있는지 확인

Ambari 기본 URL http://192.168.100.xxx/ambari/centos7/
HDP 기본 URL http://192.168.100.xxx/HDP/centos7/
HDP-UTIL 기본 URL http://192.168.100.xxx/HDP-UTIL/centos7/

 

Ambari 2.7.3. local repository

 

5. 미러서버에서 yum repolist로 실제로 다운 가능한지 확인

[root@pb2 ~]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirror.navercorp.com
 * epel: ftp.riken.jp
 * extras: mirror.navercorp.com
 * updates: mirror.navercorp.com
repo id                                                                                    repo name                                                                                                status
HDP-3.1                                                                                    HDP-3.1                                                                                                     201
HDP-UTILS-1.1.0.22                                                                         HDP-UTIL                                                                                                     16
ambari                                                                                     ambari                                                                                                       13
base/7/x86_64                                                                              CentOS-7 - Base                                                                                          10,072
epel/x86_64                                                                                Extra Packages for Enterprise Linux 7 - x86_64                                                           13,756
extras/7/x86_64                                                                            CentOS-7 - Extras                                                                                           509
mysql-connectors-community/x86_64                                                          MySQL Connectors Community                                                                                  192
mysql-tools-community/x86_64                                                               MySQL Tools Community                                                                                        90
mysql56-community/x86_64                                                                   MySQL 5.6 Community Server                                                                                  581
updates/7/x86_64                                                                           CentOS-7 - Updates

 

 

6. 클러스터에 해당하는 모든 호스트에 repo 파일 배포. ([ ]에 들어가는 repo id 버전까지 신경 잘 써야 한다)

[root@pb7 yum.repos.d]# cat ambari.repo
[ambari]
name=ambari
baseurl=http://pb2.penta.co.kr/ambari/centos7/2.7.3.0-139
enabled=1
gpgcheck=0


[root@pb7 yum.repos.d]# cat HDP.repo
[HDP-3.1]
name=HDP-3.1
baseurl=http://pb2.penta.co.kr/HDP/centos7/3.1.4.0-315
enabled=1
gpgcheck=0


[root@pb7 yum.repos.d]# cat HDP-UTIL.repo
[HDP-UTILS-1.1.0.22]
name=HDP-UTIL
baseurl=http://pb2.penta.co.kr/HDP-UTILS/centos7/1.1.0.22
enabled=1
gpgcheck=0

 

repo 파일들의 버전이나 hostname, repo id 등을 신중하게 배포해야 한다. 조금이라도 다른 부분이 발생하면 정상적으로 설치가 안되기 때문에 이런 부분에서 디테일하게 신경 써서 봐줘야 한다.

배포하는 방법은 scp와 ansible 등이 있으니 편한대로 사용하면 된다.

 

 

Ambari Server Install

 

Ambari 서버는 호스트 서버에서만 설치를 하고 Ambari-agent는 모든 서버에서 설치하도록 한다.

yum install ambari-server //pb7

yum install ambari-agent //pb7,pb8,pb4
ambari-agent start

 

Database 설정

 

Ambari, hive, oozie 등 각 구성요소에 필요한 운영 데이터베이스이다. Ambari 서버를 설치하면서 기본적으로 내장된 postgreSQL을 사용할 수도 있지만 본 설치는 pb8서버에 설치되어 있던 postgreSQL을 사용할 예정이다. 이는 암바리 서버 설정 시 선택할 수 있다.

 

psql -h ip_address -U username -p 5432(default) -d databasename

 

 

1. 데이터베이스에 연결하려면 각 데이터베이스에 맞는 드라이버가 필요하다. 따라서 각자에 맞는 JDBC 드라이버를 다운로드한다. 

/var/lib/ambari-server/resources/postgresql-jdbc.jar

 

2. ambari server가 실행 중인 서버(pb7)에서 

[root@pb7 ~]# ambari-server setup --jdbc-db=postgres --jdbc-driver=/var/lib/ambari-server/resources/postgres-jdbc.jar

 

3. 데이터베이스 접속 후 각 서비스 유저 및 DB 생성 (사전에 각 서비스 유저 및 DB가 생성되어 있어야 ambari-server 설정이 정상적으로 가능하다)

create database ambari;
create user ambari with password 'ambari';
grant all privileges on database ambari to ambari;
\connect ambari;
create schema ambari authorization ambari;
alter schema ambari owner to ambari;
alter role ambari set search_path to 'ambari', 'public';

 

당장 ambari 설치 시 필요하진 않지만 이후 서비스 올릴 때 어차피 생성해야 하므로 에코시스템 유저들도 한번에 생성해주었다. (hive, oozie )

create database hive; 
create user hive with password 'hive';
grant all privileges on database hive to hive;
    
create database oozie;
create user oozie with password 'oozie';
grant all privileges on database oozie to oozie;

 

4. ambari-server 데이터베이스 스키마 load (/var/lib/ambari-server/resources/)

암바리 서버 설정 시 기본적으로 DDL 스크립트가 로드되어 테이블이 생성되는데 그 중 postgreSQL, MySQL등 몇몇 데이터베이스는 직접 create ddl.sql을 로드해주어야 한다.

이건 어떤 데이터베이스를 사용하는지에 따라 다르기 때문에 확인 후 설정하면 된다.

\connect ambari;
\i /var/lib/ambari-server/resources/Ambari-DDL-Postgres-CREATE.sql

이후 ambari-server를 설정할 때 Advanced Database Configuration > Option[4] PostgreSQL 선택 후 증명하면 된다.

 

각 database에 맞는 스크립트를 import 시켜주면 된다

 

 

Ambari-Server 설정

서버 설정도 공식문서에 친절하게 설명되어 있다. 여기서 주의할 점은 Java 경로를 지정하지 않으면

Oracle JDK 1.8을 재다운로드하기 때문에 앞서 설정한 JDK를 사용하기 위해 j 옵션을 준다.

 

ambari-server set -j $JAVA_HOME

 

공식문서에 나와 있는 대로 설정하면 되지만 Enter advanced database configuration 가 나오면 y.

n 옵션: 내장된 postgreSQL사용.

앞서 설정한 postgreSQL를 사용 4.

호스트 이름, 포트, 데이터베이스 이름, 사용자 이름 및 암호 증명

완료.

postgreSQL에서 create.sql을 import 시켜주지 않으면 에러가 발생한다

 

 

Ambari-Server Start

ambari-server start 
ambari-server status
ambari-server stop

 

이후 http://ip_address:8080 admin/admin으로 접속해서 정상적으로 ambari UI가 나오면 성공이다.

 

 

 

Ambari Cluster Install

이제 클러스터를 구축하고 실제 사용할 서비스를 올려보자.

 

1. 클러스터 이름 : dpcluster

 

2. HDP, HDP-UTIL 버전 등록(Redhat7) (중요)

HDP 버전을 선택하고 앞서 설정한 Local Repository를 선택한 다음 해당 URL을 기재해주면 된다.

호스트네임으로 기재할 것.

 

 

3. 클러스터 구축할 호스트 이름을 등록하고 pb7에서 ssh 개인키를 복사해 배포한다. (cat ~/.ssh/id_rsa)

 

 

이후 과정은 공식문서를 그대로 참조하면 되는데 마스터 구성요소를 어떻게 할당할 것인지, 슬레이브/클라이언트를 어떻게 구성할 것인지 한 서버에 많은 서비스가 몰리지 않도록 구성하는 것이 중요하다. 

 

HDFS, YARN 디렉터리 설정

NameNode, DateNode가 사용할 디렉터리들을 어디에 설정할지도 잘 생각해야 한다. 용량이 여유로운 디렉터리로 설정했다.

 

YARN도 마찬가지.

 

 

  hive, oozie 등 각 서비스를 실행하기 위해 기생성한 postgreSQL 유저 및 db test connection

 

 

이후 모든 설정을 다 완료하고 설치가 끝나면 다음과 같은 화면을 볼 수 있다.

 

 

 

Enable NameNode high availability

 

네임노드 HA 구성까지 해보았다.

이것 역시 아래의 URL 대로 진행하면 문제 없이 완료된다.

 

https://docs.cloudera.com/HDPDocuments/Ambari-2.7.3.0/managing-high-availability/content/amb_enable_namenode_high_availability.html

 

Enable NameNode high availability

To ensure that another NameNode in your cluster is always available if the active NameNode host fails, you should enable and configure NameNode high availability on your cluster using Ambari Web. The Enable HA wizard describes the set of automated and manu

docs.cloudera.com

 

 

 

Ambari Cluster 설치 이슈 및 정리

실제 설치를 하고 클러스터 구축하는게 절대 쉬운 일은 아니었다. 여러 번의 시도 끝에 설치가 완료되었고 많은 시행착오 끝에 성공할 수 있었다. 이 글도 그런 과정을 잊지 않기 위해 기록한 것이고 그 중 발생한 이슈들을 정리해보려고 한다.

 

호스트 등록

 

yum repolist HDP-3.1-repo-51 이런 식으로 자동으로 repo가 생성되어 엉키는 문제가 발생했다. 정상적으로 설치가 될 때는 하나의 repo만 생성되었는데 그 전에는 여러 개의 repo가 생성되어 ambari가 참조할 repo를 제대로 읽어오지 못한 문제가 발생하였다. 이러한 문제는 repolist에서 해당 repo 파일들을 삭제해주니까 정상적으로 등록이 됐다.

따라서 호스트 이름 등록할 때와 HDP, HDP-UTIL 버전 URL 등록 시 철저한 검토가 필요하다.

왜 이러는지 정확한 이유는 모르겠지만 위의 두가지를 설정하는 과정에서 문제가 발생한 것으로 추측된다.

 

repo URL

<ambari 클러스터 설치> 과정 마지막 Install 하기 전에 클러스터 구축을 어떻게 할 것인지 정리되어 나오는데 이때 repo URL이 정상적으로 찍히는지 확인해봐야 한다.

이곳에 로컬 레포지토리 URL 주소가 정상적으로 기재되어야 설치가 가능하다.

 

*review 
	=====================================
	Admin Name: admin
	Cluster Name: dpcluster
	Total Hosts: 3 (3 new)
	Repositories:
	redhat7 (HDP-3.1):
	http://pb2.penta.co.kr/HDP/centos7/3.1.4.0-315/
	redhat7 (HDP-UTILS-1.1.0.22):
	http://pb2.penta.co.kr/HDP-UTILS/centos7/1.1.0.22/
	Services:
			.
			.
			(생략)

 

여러 번 설치를 시도하면서 생성되었던 repo 파일들은(위치: /etc/yum.repos.d) baseurl url이 찍히지 않았었는데 정상적으로 인스톨이 진행되면서 생성된 ambari-hdp-53.repo에서는 baseurl이 찍혀있는 걸 확인할 수 있었다.

따라서 레포 url을 배포하는 과정에서 문제가 있었던 것으로 보인다.

[root@pb7 yum.repos.d]# cat ambari-hdp-53.repo
[HDP-3.1-repo-53]
name=HDP-3.1-repo-53
baseurl=http://pb2.penta.co.kr/HDP/centos7/3.1.4.0-315/

path=/
enabled=1
gpgcheck=0
[HDP-UTILS-1.1.0.22-repo-53]
name=HDP-UTILS-1.1.0.22-repo-53
baseurl=http://pb2.penta.co.kr/HDP-UTILS/centos7/1.1.0.22/

path=/
enabled=1
gpgcheck=0

 

 

yarn dns register

 

설치하면서 hdfs, yarn 등 서비스가 정상적으로 올라오지 않아서 yarn dns registery가 올라오지 않았다.

53번 포트를 dnsmasq가 잡고 있어서 해당 프로세스를 죽이고 재설치했더니 정상적으로 완료.

ui에서 yarn/config에서 yarn dns registery 포트를 553등으로 수정해줘도 되지만 회사 서버에서는 dnsmasq를 사용할 일이 없기 때문에 서버 내의 dnsmasq kill.

 

관련 url: https://community.cloudera.com/t5/Community-Articles/YARN-REGISTRY-DNS-Port-Conflict-Issue/ta-p/249117

 

YARN REGISTRY DNS - Port Conflict Issue

If you see errors related to YARN Registry DNS Bind Port. Where the YARN Registry DNS is stopped, most probably due to a port conflict. Then go into the Advanced Configurations. Look for the parameter RegistryDNS Bind Port and change is to a port that does

community.cloudera.com

 

postgreSQL 설정

 

hive를 올리려고 하니까 갑자기 database connection 실패가 났다.

 

해당 로그: The authentication type 10 is not supported. Check that you have configured the pg_hba.conf file to include the client's IP address or subnet, and that it is using an authentication scheme supported by the driver.

 

pb_hba.conf 파일 수정하니까 서비스 올라감

 

host    all             all             0.0.0.0/0            trust

           (기존 md5에서 trust로 변경함)

 

 

 

이렇게 이슈 정리까지 해보았다. 내가 직접 설치를 해보면서 느낀 건 나름 친절하게 설명이 나와있어서 큰 어려움은 없었지만 hostname 등록과 postgreSQL JDBC Driver 경로를 잘못 잡아주는 등 어디서 에러가 발생했는지 모르겠는 어려움이 컸다. 따라서 시작부터 세밀하게 설정하는 것이 정말로 중요하다는 걸 깨달았고 디테일이 생명이다.

'Server' 카테고리의 다른 글

[Hue] oozie ssh 설정  (0) 2022.05.26
[Ambari] Name Node Connection Error  (0) 2022.05.18