Pyinstaller를 설치하고 --onefile 옵션으로 실행파일을 만들었는데 아래와같이 에러메시지가 나오고 실행되지 않는다.

분명히 컴파일과 디버깅 모두 정상적인 코드였는데 Pyinstaller가 실행파일 만들면서 뭔가를 문제를 일으켰나보다.

코드에 pymssql을 import해 사용하고있는데 이것때문인가 싶어 열심히 구글링도하면서 시간을 보내다가,

너무 쉽게 해결이 되어버렸다.

 

말 그대로 에러메시지를 보고 해결해주면 된다.

 

ModuleNotFoundError: No module named 'decimal'

그래서 소스코드에

 

import demical

한줄을 추가하고 실행파일을 만들었더니 문제없이 실행이 잘 되었다.

 

결론: 에러메시지를 "잘" 보자.

(3) HDP 구축 및 서비스 배포

 

-설치가능한 최신버전인 HDP-3.1.4 선택후 next

 

 

 

 

Target hosts는 앞서 설정한 hosts에서 부여한 도메인 주소를 입력

#cat /etc/hosts

SSH 공개키를 입력(------BEGIN RSA~~ 부터 ----END ~~ KEY-----까지 모두 다 붙여넣어야함)

#cat ~/.ssh/id_rsa

ambari 계정 및 포트 입력

 

 

이상없이 진행된다면 모든 노드들의 status가 success로 나오고 fail이 뜰 경우 클릭하면 무엇이 문제인지 확인이 가능하다. 그동안 진행한 과정에서 누락 또는 실수로 인한 이슈들이 주로 나올 수 있다.(기본 도구들(자바, 파이썬)의 경로나 방화벽, 권한문제가 있을 가능성이 높음)

 

 

이후 기본 HDFS 위에 원하는 서비스들을 올릴 수 있다. 서비스는 이후에 얼마든지 추가 변경 삭제가 가능하기 때문에 테스트 과정에서는 몇 개만 선택해서 설치함

 

 

- 서비스 노드의 배치과정에서는 서버들의 노드 수와 스펙에 맞춰 적절히 서비스들을 분산시키자.

- 특히 Hive와 Spark과 같이 서로 의존성이 높은 서비스들은 요구사항을 꼭 확인하고 배치시켜야한다. 이를 위해서는 설치할 서비스에 대한 사전 지식도 반드시 필요할 것이다. (본 테스트과정에서는 무시하고 그냥 설치했음)

 

 

- 각 노드별로 SlavesClients를 할당한다.

- 노드 개수와 HW 스펙에 맞춰 MasterSlave를 적절히 분배해야 함(이것을 갖추는게 전문가의 길)

- 아래 설정은 테스트로 많은 고민없이 선택된 것임(아주 기본적인 사항으로 Master노드와 Slave 노드는 분리하도록 권고하고있다.)

 

 

- 각 서비스별 추가 설정해야할 항목들을 입력해준다. 주로 서비스 계정 설정과 Default DB 정보들을 입력하게 된다.

 

 

- 관련된 모든 이슈들을 해결하고 마지막 Deploy를 클릭

 

 

- 설치 완료 후 실행에 문제가 있는 서비스 몇 개가 있음을 확인하고 NEXT

- 설치상의 문제가 아니기 때문에 이후에 Trouble shooting하면 됨.

- Ambari 메인 화면에서 모든 서비스가 정상적으로 돌아가는지 확인할 수 있다

: 모든 경고(알람)의 경우 클릭하여 상세 로그를 확인할 수 있음

: 이후 원하는 서비스를 추가 변경 삭제할 수 있음

 

 

 

 

 

 

 

 

 

 

 

 

 

(2) HDP, Ambari-2.7.4 설치를 위한 CentOS 기본 설정

1. 설치 관련 이슈

- HDP를 배포하던 HortonworksCloudera와 합병하면서 HDP 관련 공식 문서들은 cloudera 홈페이지에서 확인할 수 있으며 다음 링크를 통해 확인 가능하다.

https://docs.cloudera.com/HDPDocuments/Ambari-2.7.4.0/bk_ambari-installation/content/ch_Getting_Ready.html

- Ambari 버전 별로 설치 매뉴얼을 확인할 수 있으며 현재 기준으로 최신버전인 2.7.5 버전은 설치 과정에서 cloudera 계정인증 과정이 필요하다. 반면 한 단계 낮은 2.7.4 버전은 인증이 필요 없기 때문에 이를 설치함

 

1. FDQN을 위한 hosts 파일 수정

- HDP 설치할 때 각 노드들을 접근하는 방식으로 FQDN(Fully Qualified Domain Name)를 사용함

- 모든 노드가 동일하게 설정되어야함

- /etc/hosts 파일을 편집기로 열어서 맨 밑에 각 노드들에 대한 IPhostname을 설정

             192.168.0.14 hdp01 hdp01.test.com

             192.168.0.15 hdp02 hdp02.test.com

             192.168.0.16 hdp03 hdp03.test.com

             192.168.0.14 hdp01 hdp01.test.com             
             192.168.0.15 hdp02 hdp02.test.com             
             192.168.0.16 hdp03 hdp03.test.com

- hosts 파일 적용을 위해 재부팅

 

2. ambari 설치를 위한 계정 생성 및 권한 부여

- ambari-server ambari-agent 설치에 사용될 계정으로 root가 아닌 별도의 계정을 생성하여 관리하는게 좋음. HDP를 설치할 모든 노드에게 동일하게 설정 필요함

#adduser ambari
#passwd ambari

- ambari에게 root권한 부여

 

#vi /etc/sudoers

아래 설정 추가

ambari  ALL=NOPASSWD:             ALL

 

 

 

3. 모든 노드가 서로 자유롭게 접속 기능하도록 공개키 생성 및 공유 ssh-keygen

- ambari-server가 설치될 메인노드에서 ssh-keygen으로 공개키 생성

- 먼저 ambari 계정으로 변환

#su ambari
#ssh-keygen

엔터->엔터->엔터->키 생성

 

 

- 생성된 키를 ambari-agent가 설치될 나머지 모든 노드에 복사하여 공유

#ssh-copy-id ambari@hdp02
#ssh-copy-id ambari@hdp03

yes -> ambari 비밀번호 -> 복사 끝

 

 

 

- 이후 hdp01 서버에서 ssh 명령어를 통해 다른 노드를 접속했을 때 비밀번호를 물어보지 않는다면 정상적으로 설치된 것임

 

4. 기본 도구 설치 Python. Java, Mysql

: pythonjava는 모든 노드에 동일한 버전과 경로에 설치되어있어야 함

- Ambari 가이드에 따르면 파이썬 2.7 이상 버전이 설치되어야 함

: CentOS7 에는 python 2.7.5 버전이 기본 설치되어 있음

- 자바는 1.8버전 이상(Oracle_JDK or Open_JDK 둘 다 설치 가능함 확인)

: 모든 노드에 동일한 버전 동일한 경로로 설치해야함

: 라이선스 문제가 없는 Open-JDK-1.8 버전을 설치함

 

#yum install java-1.8.0-openjdk-devel.x86_64

- JAVA_HOME 환경 변수 추가

javac의 경로 찾기

 

#which javac

검색된 위치의 원본 위치 찾기

#readlink –f /usr/bin/javac

한번 더 검색된 위치의 원본 위치 찾기

#readlink –f /etc/alternatives/javac

원본 경로 = /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/bin/javac

편집기로 /etc/profile 파일을 열어서 맨 밑에 아래 내용을 추가

             export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
             export PATH=$PATH:$JAVA_HOME/bin
             export CLASSPATH="."

저장한 내용을 적용

 

#source /etc/profile

 

- HiveOozie와 같이 해당 서비스의 관리용 DB가 필요한 경우를 위한 DB가 설치되어 있어야함

: 여러 노드 중 한 노드에 설치해 공유할 수 있고 해당 서비스의 Master가 될 노드에 개별적으로 설치해 관리해도 됨

: 최신버전인 MySQL8.0 community 버전을 설치해 봤으나 ambari 테이블 중 member테이블이 생성되지 않아서 진행이 되지 않았다. 찾아보니 호환성에 문제가 있다고 한다. mysql5.7 버전을 추천한다.

CentOS에 기본등록된 mariadbmysql로 바꿔 설치하기 위해 설치파일 다운로드 후 repository 등록

#sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
#sudo yum install mysql-community-server

설치 완료 후 root 계정으로 전환하여 아래 임시 비밀번호를 확인하자. 아무리 검색해도 임시비밀번호가 나오지 않아서 헤맸었는데 계정을 root로 바꾸어 검색하니 출력되었다.

또는, service mysqld start 로 한번 실행해 주면 로그파일에 내용이 생성된다.

 

#grep 'temporary password' /var/log/mysqld.log

 

혹시나 로그파일이

그리고 mysql의 기본적인 보안설정을 할 수 있는 명령어를 실행

 

#/usr/bin/mysql_secure_installation

비밀번호를 변경할 수 있는데 정책이 강화되어서 8자리 이상에 대문자랑 숫자가 포함되어야함. 일단 그렇게 하고 나중에 변경하면 됨

{Abcd!234}로 변경

암호 정책을 낮추기 위해 mysql 설정 파일을 다음과 같이 수정

 

#vi /etc/my.cnf

아래 2줄 추가

[mysqld]
validate_password-policy=LOW
validate_password-length=4

 

mysql 서비스를 재시작하고

 

#sudo systemctl restart mysqld

mysql 접속 후 ambari 계정 생성(외부 접속도 허용해주자)

HDP 서비스들 중 hive는 기본으로 설치가 되는데 이때 DB와 계정이 필요하니 함께 생성하자

#sudo mysqld u root p

#sudo mysqld –u root –p
mysql>create user 'ambari'@'localhost' identified by 'ambari';
mysql>grant all privileges on *.* to 'ambari'@'localhost' identified by 'ambari' with grant option;
mysql>create user 'ambari'@'%' identified by 'ambari';
mysql>grant all privileges on *.* to 'ambari'@'%' identified by 'ambari' with grant option; 
mysql>flush privileges;            
mysql>create database hive;         
mysql>create user 'hive'@'localhost' identified by 'hive';       
mysql>grant all privileges on *.* to 'hive'@'localhost' identified by 'hive' with grant option;  
mysql>create user 'hive'@'%' identified by 'hive';         
mysql>grant all privileges on *.* to 'hive'@'%' identified by 'hive' with grant option;
mysql>flush privileges;

 - JDBC Connector 설치 및 확인

#sudo yum install mysql-connector-java*

#sudo yum install mysql-connector-java*

설치가 완료되면 아래 경로에 커넥터가 링크되어 있음

 

5. Ambari 설치

: Cloudera 계정 인증이 필요 없는 ambari-2.7.4 버전을 다운로드받아 설치

오랜만에 다시 확인해보니 모든 버전에서 Cloudera 계정 인증을 필요로하게 되었다.

아래 미러 사이트에서 소스를 직접 받아 빌드할 수 있으니 참고하자.

https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.7.4 

 

Installation Guide for Ambari 2.7.4 - Apache Ambari - Apache Software Foundation

Build and install Ambari 2.7.4 Refer Ambari Development for prerequisites and additional information on how to build Apache Ambari. Step 1: Download and build Ambari 2.7.4 source Go to http://www.apache.org/dyn/closer.cgi/ambari/ambari-2.7.4 and find

cwiki.apache.org

다운로드를 위해 wget 패키지 설치

#sudo yum install wget
#sudo wget -nv http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.4.0/ambari.repo -O /etc/yum.repos.d/ambari.repo
#sudo yum repolist

 

#sudo yum install ambari-server

Importing GPG-KEY 여부: y 눌러 진행

패키지 설치 완료

-인스톨 전에 앞에서 설치한 JDBC 커넥터 경로를 지정

#sudo ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar

설정 완료

 

ambari 서버 설치 전 mysql에서 Ambari table 생성

 

mysql>create database ambari;
mysql>use ambari;
mysql>SOURCE /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;

 마지막으로 인스톨 시작

 

#sudo ambari-server setup

이대로 ambari-server를 실행하면 문제없이 되어야 한다..

 

#sudo ambari-server start

 

그런데 에러메시지가 떠서 확인해보니 mysqldb time-zone이 맞지않아 에러가 발생하는 것 같다.

ambari-server start 에러 로그 확인

 

#vi /etc/ambari-server/conf/ambari.properties

 

DBtimezoneAsia/Soul로 변경하면 해결되는 것 같은데, 기본 정보가 mysql table에 없어서 이를 따로 설치해야 한다. 아래 링크에서 본인 버전에 맞는 sql 파일을 다운로드받아 설치

- https://dev.mysql.com/downloads/timezones.html

 

 

- mysql db를 선택하고 쿼리를 실행, 아래와 같이 검색이 되면 설치가 정상적으로 된 것임.

 

select * from mysql.time_zone_name where NAME LIKE '%Seoul';

- 이후 /etc/my.cnf 파일에 다음을 추가

default-time-zone=Asia/Seoul

-다시 ambari-server start! 성공 메시지가 뜨면 해당 도메인의 8080포트로 ambari-server 접속이 가능함

- 기본 아이디 비번은 admin/admin

 

이상 설치 완료!

ambari-server start 에러와 관련된 모든 메시지는 아래 경로에서 확인 가능하니 문제가 있다면 꼭 확인해보면서 해결

#vi /etc/ambari-server/conf/ambari.properties

 

 

 

 

 

 

 

 

 

 

(1) CentOS 7.7 설치 및 기본 환경 세팅

: 앞서 Ubuntu 16.04.6 LTS 버전도 동일한 방식으로 설치됨을 확인하고 안정적인 운용을 위해 CentOS로 재 설치 하면서 문서 정리를 해봄

 

1. 3대의 가상머신 생성

- xcp-ngCentOS7 가상머신 3대 생성

- 메모리 8G/8G/4G 할당

2. CentOS7 최소설치(기본 터미널만)

- Root 암호 설정

- 재부팅

 

- SMBus Host Controller not enabled! 에러

  xcp-np와 같은 가상머신에서 사용할 때 발생하는 에러로 다음과 같이

  /etc/modprobe.d/dccp-blacklist.conf 파일을 편집기로 열어

  맨 밑에 다음 문구를 추가하고 재부팅

#blacklist i2c-piix4

3. 네트워크 설정

- 별도의 네트웍 설정 하지 않은 경우 yum 실행이 안됨

#dhclient 

위 명령어를 실행하면 자동 IP 할당가능 하지만 재부팅하면 다시 초기화됨

따라서 IP 고정이 필요함 아래 다음과 같이

/etc/sysconfig/network-scripts/ifcfg-{이더넷ID} 파일을 편집기로 열어

아래 두줄은 수정
ONBOOT=YES
BOOTPROTO="static"

아래 5줄은 추가
IPADDR="192.168.0.21"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.1"
DNS1="168.126.63.1"
DNS2="168.126.63.2"

그냥 DHCP 자동설정으로 하고싶으면 ONBOOT=YES 이것만 수정해도 됨(테스트용도)

이후 네트워크 재시작 또는 시스템 재시작

 

#systemctl restart network

다음 명령어로 할당된 IP 확인

#ip addr

- 노드별 시간 동기화

#yum install ntp
#systemctl start ntpd

시스템 자동 시작

#systemctl enable ntpd

 

4. OS 업데이트

- OS 기본 업데이트 수행

#yum upgrade

5. 방화벽 해제

- 특정 방화벽 포트만 허용해도 되지만, 원활한 ambari-serverambari-agent 설치를 위해서는 모든 방화벽이 열려있는게 좋음(추후 사용할 서비스 포트를 파악해 특정 포트만 오픈하면 될 듯)

다음은 CentOS7의 방화벽 해제 명령어

 

# systemctl disable firewalld

다음은 특정 포트만 허용하는 명령어

#firewall-cmd --permanent --zone=public --add-port=8080/tcp
#firewall-cmd --reload

 

6. SSH를 이용한 각 노드들 원격 접속

- 이후 여러 노드들에게 같은 작업(명령어)이 반복되기 때문에 SSH 터미널을 여러개 열어서 한번에 작업을 진행

 

+ Recent posts