::: 데이터 분석 :::

[Ambari 11] Ambari 설치하면서 변경하는 설정 정리

곰탱이푸우 2023. 4. 27. 08:20
Ambari를 설치하면서 변경하는 설정 항목들을 정리한다.
설치 이후에도 변경 가능하지만 가급적 설치 단계에서 변경하면 번거로운 작업들을 상당히 줄일 수 있다.
 
Ambari 설치를 위해 사전에 준비해야 하는 사항은 아래 포스팅을 참고한다.
 

[Ambari 4] CentOS 7 추가 설정

가상환경에 CentOS 운영체제의 기본 설정을 적용했으므로, 이후 과정에 공통으로 필요한 설정을 적용한다. 아래 과정은 다음 작업을 수행하기 위해 반드시 필요한 설정이다. Bigtop 설치와 Ambari 빌

www.bearpooh.com

 

Ambari 설정과 Hadoop, Spark 등 서비스 설치는 아래 포스팅 (문서)를 참고한다.
설정을 변경하는 서비스들은 다음과 같다.
  • HDFS
  • Yarn
  • Ambari Metrics
  • MapReduce2
  • Zeppelin
 
 

HDFS 설정 변경

HDFS 경로

HDFS를 구성하는 아래 노드들의 경로를 데이터 디렉토리로 변경한다.
  • NameNode
  • SNameNode
  • DataNode
 
각 노드의 경로 앞에 /data를 추가한다.
 
해당 경로는 HDFS를 운영하기 위해 가상머신에 추가한 대용량 가상디스크 영역이다.
CentOS 7 가상 환경 생성 포스팅의 파티션 생성 항목을 참고한다.
또는 VirtualBox CentOS 가상머신의 하드디스크 추가와 파티션 설정 포스팅을 참고한다.
 

Proxy User

proxyuser 옵션은 특정 계정에 대한 접근 허용 여부과 권한을 관리할 수 있다.
해당 옵션에 대한 설명은 다음과 같다.
구분
내용
hadoop.proxyuser.{계정}.hosts=주소
지정한 계정에 대해 특정 Host IP만 접근 가능
hadoop.proxyuser.{계정}.groups="그룹명"
특정 계정에 대해 지정한 그룹의 권한 부여
hadoop.proxyuser.{계정}.users="계정명"
특정 계정으로 접속하면 지정한 User로 Impersonate
 
일단 특별한 지정 사항이 없으므로 Advanced core-site의 hadoop.proxyuser.* 항목에 *을 입력한다.
 
추후 다른 서비스에 권한을 부여하고자 한다면, 위의 표를 참고하여 Custom core-site 탭에서 proxyuser 값을 설정한다.
 

HDFS 권한 제어

특정 계정에 대해 그룹 권한 부여나 Impersonate를 하지 않았기 때문에 HDFS 권한 제한 설정을 풀어준다.
 
Advanced hdfs-site의 dfs.permissions.enabled는 true에서 false로 변경한다.
 
해당 설정은 Production 수준에서는 권장하지 않는 방법임을 주의하자.
일단 내부용으로만 사용할 계획이므로 해당 설정을 유지한다.
 
향후 proxyuser 설정을 활용하는 경우 해당 옵션을 true로 복원한다.

 

 

Yarn 설정 변경

Yarn 기반의 Spark을 사용하는 경우, Yarn은 Spark Executor 실행을 위해 Container를 생성한다.
아래 옵션은 Spark의 Executor를 생성하고 실행하는데 필요한 메모리 자원 설정에 중요하므로 반드시 체크한다.
 
참고로 노드당 메모리 크기는 32G를 전제로 설정한 값이다. 실제 메모리 크기에 따라 조정해야 한다.

YARN Java heap size

General의 YARN Java heap size에서 1024 값을 4096으로 변경한다.

 

반드시 변경해야 하는 부분은 아니지만 안정적인 Yarn 구동을 위해 늘려줬다.
 
Heap size가 크면 메모리 공간 확보를 위한 GC (Garbage Collector) 구동 빈도가 줄어든다.
Full GC가 발생하게 되면 리소스에 영향을 주기 때문에 조금 여유있는 편이 낫다.
 

Yarn Container

실제 Yarn이 생성하는 Container의 메모리 크기와 범위를 설정한다.
앞서 언급했듯이 Spark의 Executor를 생성하고 실행하는데 필요한 메모리 자원 설정에 중요하므로 반드시 체크한다.
 

전체 메모리

Yarn이 컨테이너를 만들기 위해 사용 가능한 전체 메모리 크기를 설정한다.
 
일반적으로 메모리 전체 용량의 70~80% 정도로 지정한다. Ambari는 기본적으로 75%를 할당한다.
 
Node Manager의 Memory allocated for all YARN containers on a node의 값을 24576MB으로 설정한다. (기본 설정값)

 

해당 값은 노드의 메모리 크기가 32G를 전제로 설정한 값이다.
 
 

최대 메모리

Yarn에서 생성하는 Container 1개의 최대 메모리 크기를 지정한다.
보통 Memory allocated for all YARN containers on a node 항목에 설정한 값과 동일하게 설정한다.
 
Scheduler의 Maximum Container Size (Memory)를 24576MB (24G)로 설정한다.

 

해당 값은 노드의 메모리 크기가 32G를 전제로 설정한 값이다.
노드 1개 기준으로 Spark의 Executor 1개에 부여할 수 있는 최대 메모리 크기는 24576MB (24G)가 된다.
 

최소 메모리

Yarn에서 생성하는 Container 1개의 최소 메모리 크기를 지정한다.
권장 값은 4096MB (4G)이지만 Zeppelin 등의 Executor는 보통 1G~2G를 사용하기 때문에 1024MB로 설정한다.
 
Scheduler의 Minimum Container Size (Memory)를 1024MB (1G)로 설정한다.

 

해당 값은 노드의 메모리 크기가 32G를 전제로 설정한 값이다.
노드 1개당 1G 메모리를 갖는 Spark의 Executor를  최대 24개까지 실행할 수 있다.
 
 

MapReduce2 설정 변경

Hadoop의 MapReduce 연산에 필요한 메모리 크기를 설정한다.
Spark도 결국 Hadoop의 MapReduce 연산을 메모리로 수행하는 것이기 때문에 설정해야 한다.
 
일반적으로 Map 연산 보다 Reduce 연산에 더 많은 메모리를 필요로 하는 것으로 알려져 있다.
이러한 이유로 Map과 Reduce 메모리는 1:2 비율로 구성하는 편이다.
 
참고로 노드당 메모리 크기는 32G를 전제로 설정한 값이다. 실제 메모리 크기에 따라 조정해야 한다.
 

Map Memory

Hadoop의 Map 연산에 필요한 메모리 크기는 기본 값으로 설정되는 4096MB를 유지한다.
 
General의 Map Memory 항목의 값이 4096MB (4G)인지 확인한다.
 
해당 값은 노드의 메모리 크기가 32G를 전제로 설정한 값이다.
 

Reduce Memory

Reduce 연산은 Map 연산보다 많은 메모리를 필요로 하기 때문에, Reduce Memory를 Map Memory 보다 2배 크게 설정한다.
Map 메모리의 기본 값이 4096MB (4G)이므로 Reduce 메모리는 2배인 8192MB (8G)를 설정한다.
 
General의 Reduce Memory 값을 8192 MB로 변경한다.
해당 값은 노드의 메모리 크기가 32G를 전제로 설정한 값이다.
 
Ambari의 최대 권장 값인 5120MB (5G)를 초과하기 때문에 알림 메시지가 출력되는데 일단 무시하고 설정한다.
향후 문제가 발생하면 권장 값으로 조정한다.
 
 

Ambari Metrics 설정 변경

Ambari에 등록 된 Agent와 Hadoop 관련 서비스들의 Metric 정보들을 시각적으로 제공해주는 Ambari Metrics의 설정을 변경한다.
 
경로가 잘못 설정되는 경우가 있기 때문에, 경로 중심으로 확인한다.
Ambari 설치 이후 약간의 트러블슈팅을 진행해야 하기 때문에 나머지 설정들은 이후 변경한다.
 

HBase root directory

Advanced ams-hbase-site의 HBase root directory 경로가 정상적으로 지정되어 있는지 확인한다.
간혹 /user/ams/hbase가 아닌 /user/amshbase로 되어 있는 경우가 있으므로, 폴더명이 제대로 되어 있는지 확인한다.
 

HBase tmp directory

Ambari 설치는 경로 지정 → 상세 설정 → 배포 (설치) 순으로 진행된다.
간혹 경로 지정 단계에서 설정한 해당 경로가 상세 설정 단계에 전달되지 않고, 앞에 workspace가 추가되는 경우가 있다.
 
Advanced ams-hbase-site의 HBase tmp directory 경로의 맨 앞에 /workspace가 추가되어 있으면 제거한다. (버그인듯??)
 

나머지 경로 확인

다른 경로 항목들도 경로에 특이사항 없는지 확인한다.
CONFIGS 상단 우측에서 directory로 검색하면 경로 관련 옵션들만 출력된다.

 

 

Zeppelin 설정 변경

탐색적 데이터 분석에 사용하는 Zeppelin의 설정을 변경한다.
환경 변수, 노트북 파일 경로, 사용자 계정 등록 정도를 확인한다.
 
데이터 탐색을 위한 하둡과 제플린 설정은 아래 포스팅을 참고한다.
 

[Ambari 9] 데이터 탐색을 위한 하둡과 제플린 설정

HDFS에 데이터를 업로드하고 Zeppelin으로 분석과 탐색을 진행하기 위해서는 추가 설정을 진행해야 한다. Ambari 설정과 Hadoop, Spark 등 서비스 설치는 아래 포스팅 (문서)를 참고한다. [Ambari 7] Ambari 설

www.bearpooh.com

 
 

Spark Home 경로

Spark을 실행하기 위한 Spark Home의 경로를 확인한다.
해당 값이 Zeppelin의 Spark 관련 인터프리터의 기본 경로로 전달되기 때문에 정확하게 입력해야 한다.
 
Advanced zeppelin-env의 Spark Home 값이 /usr/lib/spark 인지 확인한다.
 
 

Spark Home 환경 변수

Zeppelin에 전달되는 환경 변수인 SPARK_HOME의 값을 실제 경로로 수정한다.
위의 Spark Home에 지정하더라도 실제 Zeppelin의 인터프리터 설정에서 확인해보면 해당 값 변경이 안된다.
일종의 버그로 보이는데 아래와 같이 환경 변수에 직접 경로를 전달하면 설정 가능하다.
Advanced zeppelin-env의 zeppelin_env_content에서 SPARK_HOME을 찾고 {{spark_home}}을 /usr/lib/spark으로 수정한다.
 

Zeppelin Notebook Dir

데이터 분석을 위해 생성하는 Zeppelin 노트북 파일의 저장 경로를 설정한다.
Zeppelin 역시 Yarn 환경에서 동작하기 때문에 해당 경로는 HDFS 경로를 의미한다.
 
Advanced zeppelin-env의 Zeppelin Notebook Dir에서 노트북 파일을 저장하는 HDFS 경로를 확인한다.
 
다른 경로로 지정하고자 하는 경우 원하는 HDFS 경로로 변경한다.
해당 경로에 대한 권한 부여가 되었는지 확인해야 한다.

 

 

shiro_ini_content 계정 설정

Zeppelin WebUI에서 사용할 계정 정보를 확인한다.
기본으로 제공되는 admin 계정 대신 관리 가능한 별도의 계정을 생성해서 사용하는 것을 권장한다.
아래의 경우 hadmin, huser 두개의 계정을 생성했다.
 
shiro 라이브러리를 이용한 비밀번호 생성 방법은 아래 포스팅을 참고한다.
 

[Ambari 9] 데이터 탐색을 위한 하둡과 제플린 설정

HDFS에 데이터를 업로드하고 Zeppelin으로 분석과 탐색을 진행하기 위해서는 추가 설정을 진행해야 한다. Ambari 설정과 Hadoop, Spark 등 서비스 설치는 아래 포스팅 (문서)를 참고한다. [Ambari 7] Ambari 설

www.bearpooh.com

 

Advanced zeppelin-shiro-ini의 shiro_ini_content에서 USER 항목에 사용할 계정 정보를 추가한다.
 
아래 값을 추가한다.
hadmin = $shiro1$SHA-256$500000$...생략...CDsMZJNZLNWxw5EJ0=, admin
huser = $shiro1$SHA-256$500000$4s8cuL...생략...5xv0StO1eHrVP7KmyjjjeTU=, admin