업데이트(Update)
2024-07-03
- 도커 레지스트리 활용 컨테이너 실행으로 스크립트 변경
- proc.sh 스크립트 수정(절차지향 >>> 객체지향) 재 사용성을 위해 수정하였습니다.
- component_proc.py(system_download.txt 배포부터 ~ 컨테이너run 자동화 클래스 구현)
2024-07-04
- 하둡,hive 개념 추가
참고 티스토리
리소스 부족으로 인한 프로세스 실행이 불가하면( 선행 작업!! 리소스가 충분하지 않으면....)
가상환경 리눅스 스왑영역 잡아주기 (tistory.com)
가상환경 리눅스 스왑영역 잡아주기
1. 스왑 이미지 실행(디폴트 2기가)swapon /swap.img 기존 top : 스왑영역이 0으로 할당됨 (즉, 현재 메모리 보다 큰 프로세스를 실행하려하면 실행이 안되는 문제가 발생) 스왑설정 top 스왑 2기가 할
sy02229.tistory.com
스왑 영역 할당 해줘!!!!!! 이얏ㅎ호이얏호~!~!
하둡 설치 각종 설정파일
하둡 클러스터 운영( 도커 컨테이너 ) 실습[하둡] (tistory.com)
하둡 클러스터 운영( 도커 컨테이너 ) 실습[하둡]
1. 하둡 (컨테이너)하둡은 대규모 데이터 처리를 위해 설계된 오픈 소스 소프트웨어 프레임워크입니다. 분산 저장 및 분산 처리를 지원하며, 대량의 데이터를 효율적으로 처리할 수 있는 기능을
sy02229.tistory.com
하둡 클러스터 운영( hive 컨테이너 ) 실습[hive] (tistory.com)
하둡 클러스터 운영( hive 컨테이너 ) 실습[hive]
1. hive (컨테이너)데이터 웨어하우스 기능을 제공하는 오픈 소스 데이터베이스 관리 시스템입니다. 주로 대용량의 데이터를 다루는 데 사용되며, Hadoop의 일부로 개발 1-1. hive 동작하이브는 Hadoop
sy02229.tistory.com
hadoop - 빅 데이터 처리를 위한 오픈소스 분산 프레임워크
1. HDFS : 하둡 분산 파일 시스템
- 대용량 데이터를 여러 노드에 저장 및 관리
NameNode
- 메타 데이터 관리하는 노드
- 파일 시스템 디렉토리 구조, 파일과 블록 매핑 정보
- 메타 데이터 관련 노드 이므로 (고 가용성 구축 필요)
DataNode
- 실제 데이터 블록을 저장하는 노드
- 데이터 읽기 및 쓰기 요청 처리
- 데이터 복제 및 분산 저장을 하며 내결함성 제공
내결함성 : 결함이 발생해도 시스템이 정상 동작 하는 능력
DFSZKFailoverController
- hdfs 고가용성 제공을 위한 구성요소
- 네임노드 고가용성을 지원하며, 주키퍼를 이용해 네임노드 장애 자동처리
(동작 구성)
- 두 개 이상 네임노드가 (active/standby) 상태
- 네임노드 장애 발생시, 주키퍼를 이용해 standby 상태 네임노드를 활성 상태로 전환!!
2. YARN : 하둡 리소스 관리 프레임워크
- 클러스터 자원을 관리하고 애플리케이션 실행을 조정
Resource manager
- 클러스터 전체 자원 할당을 관리하는 중앙 관리자
- 애플리케이션 실행을 위한 자원을 요청하고 할당
Node manager
- 각 노드에서 실행되며, 해당 노드 자원을 관리
- 자원 사용 정보를 리소스 매니저에 보고
Application master
- 애플리케이션 실행을 관리
- 필요 자원을 리소스 매니저에 요청
1) MapReduce ApplicationMaster
- 하둡 전통인 맵리듀스 작업을 실행하는 애플리케이션 마스터
2) Spark ApplicationMaster
- 스파크 애플리케이션을 실행하는 애플리케이션 마스터
3. MapReduce : 대규모 데이터를 처리하는 분산 컴퓨팅 프레임워크
- 데이터 병렬 처리를 위해 맵, 셔플, 리듀스 단계 구성
맵
- 입력 데이터를 분할해(여러 청크로 나눔), 각각의 부분을 병렬처리
- 입력 데이터는 {키,값} 쌍으로 변환
청크 : 대용량 데이터를 분할 처리하기 위한 단위
셔플
- 맵 단계서 생성된 중간 {키,값} 쌍을 정렬
- 동일 키 를 가진 값을 그룹화
리듀스
- 셔플 단계에서 그룹화된 {키,값} 쌍을 처리해 최종결과 생성
4. hadoop 컴포넌트
Hbase
- hdfs 위에 구축된 분산 NoSQL 데이터 베이스
Hive
- 데이터 웨어하우징 인프라
- sql 기반 데이터 웨어하우스
- HiveQL 사용해 대규모 데이터 처리 및 분석
Sqoop
- 관계형 데이터베이스와 하둡간 데이터 전송을 용이하게 하는 도구
Spark
- 인메모리 데이터 처리 프레임워크
Flume
- 대규모 데이터 수집, 집계, 이동을 위한 분산 서비스
**rdb, nosql 차이**
RDB : 데이터를 테이블 형식으로 정의, 관계 기반으로 데이터를 관리하는 시스템
Nosql : 비관계형 구조(문서, 키값), 스키마 리스(스키마 정의가 필요없어 데이터 모델 유연하게 변경 가능)
0. system_download.txt
[server_ip]|192.168.56.10|192.168.56.11|192.168.56.12
[zookeeper_ip]|192.168.56.10|192.168.56.11|192.168.56.12
[postgresql_ip]|192.168.56.10
[postgresql_port]|5432
[postgresql_data_directory]|/pgdb/pg_data
------------------------------------------------------------------------------------------------------
[hadoop_ip]|192.168.56.10|192.168.56.11|192.168.56.12
[need_dir]|/hadoop/hdfs_work|/hadoop/hdfs|/hadoop/data1|/hadoop/data2|/hadoop/jn|/hadoop/data|/data/sy0218|/data/download_tar
------------------------------------------------------------------------------------------------------
-----------------------[postgresql.conf-start]-----------------------
[data_director]|'/pgdb/pg_data'
-----------------------[postgresql.conf-end]-----------------------
-----------------------[zoo.cfg-start]-----------------------
[tickTime=]|2000
[initLimit=]|11
[syncLimit=]|5
[dataDir=]|/data/sy0218/apache-zookeeper-3.7.2-bin/data
[clientPort=]|2181
-----------------------[zoo.cfg-end]-----------------------
-----------------------[core-site.xml-start]-----------------------
[hadoop.tmp.dir]|file:///hadoop/hdfs_work/hadoop-root
[ha.zookeeper.quorum]|192.168.56.10:2181,192.168.56.11:2181,192.168.56.12:2181
-----------------------[core-site.xml-end]-----------------------
-----------------------[hdfs-site.xml-start]-----------------------
[dfs.namenode.name.dir]|file:///hadoop/hdfs/nn
[dfs.datanode.data.dir]|file:///hadoop/data1,file:///hadoop/data2
[dfs.journalnode.edits.dir]|/hadoop/jn
[dfs.namenode.rpc-address.my-hadoop-cluster.namenode1]|192.168.56.10:8020
[dfs.namenode.rpc-address.my-hadoop-cluster.namenode2]|192.168.56.11:8020
[dfs.namenode.http-address.my-hadoop-cluster.namenode1]|192.168.56.10:50070
[dfs.namenode.http-address.my-hadoop-cluster.namenode2]|192.168.56.11:50070
[dfs.namenode.shared.edits.dir]|qjournal://192.168.56.10:8485;192.168.56.11:8485;192.168.56.12:8485/my-hadoop-cluster
[dfs.name.dir]|/hadoop/data/name
[dfs.data.dir]|/hadoop/data/data
-----------------------[hdfs-site.xml-end]-----------------------
-----------------------[mapred-site.xml-start]-----------------------
[mapreduce.framework.name]|yarn
-----------------------[mapred-site.xml-end]-----------------------
-----------------------[yarn-site.xml-start]-----------------------
[yarn.resourcemanager.hostname.rm1]|192.168.56.10
[yarn.resourcemanager.hostname.rm2]|192.168.56.11
[yarn.resourcemanager.webapp.address.rm1]|192.168.56.10:8088
[yarn.resourcemanager.webapp.address.rm2]|192.168.56.11:8088
[yarn.resourcemanager.zk-address]|192.168.56.10:2181,192.168.56.11:2181,192.168.56.12:2181
[yarn.nodemanager.resource.memory-mb]|6000
-----------------------[yarn-site.xml-end]-----------------------
-----------------------[hadoop-env.sh-start]-----------------------
[export JAVA_HOME=]|/usr/lib/jvm/java-8-openjdk-amd64
[export HADOOP_HOME=]|/data/sy0218/hadoop-3.3.5
-----------------------[hadoop-env.sh-end]-----------------------
-----------------------[workers-start]-----------------------
192.168.56.10
192.168.56.11
192.168.56.12
-----------------------[workers-end]-----------------------
-----------------------[hive-site.xml-start]-----------------------
[javax.jdo.option.ConnectionURL]|jdbc:postgresql://192.168.56.10:5432/sy0218
[hive.metastore.db.type]|postgres
[javax.jdo.option.ConnectionDriverName]|org.postgresql.Driver
[javax.jdo.option.ConnectionUserName]|hive
[javax.jdo.option.ConnectionPassword]|!hive0218
[hive.metastore.warehouse.dir]|/user/hive/warehouse
-----------------------[hive-site.xml-end]-----------------------
1. entrypoint.sh : 컨테이너 실행시 동작 셋업
/data/hadoop_hive_docker/entrypoint.sh
#!/bin/bash
system_file="/data/system_download.txt"
for core_config_low in $(awk '/\[core-site.xml-start\]/{flag=1; next} /\[core-site.xml-end\]/{flag=0} flag' ${system_file});
do
file_name=$(find /data/sy0218/*hadoop*/etc -type f -name *core-site.xml*)
core_site_name=$(echo ${core_config_low} | awk -F '|' '{print $1}' | sed 's/[][]//g')
core_site_value=$(echo ${core_config_low} | awk -F '|' '{print $2}')
sed -i "/<name>${core_site_name}<\/name>/!b;n;c<value>${core_site_value}</value>" ${file_name}
done
for hdfs_site_config_low in $(awk '/\[hdfs-site.xml-start\]/{flag=1; next} /\[hdfs-site.xml-end\]/{flag=0} flag' ${system_file});
do
file_name=$(find /data/sy0218/*hadoop*/etc -type f -name *hdfs-site.xml*)
hdfs_site_name=$(echo ${hdfs_site_config_low} | awk -F '|' '{print $1}' | sed 's/[][]//g')
hdfs_site_value=$(echo ${hdfs_site_config_low} | awk -F '|' '{print $2}')
sed -i "/<name>${hdfs_site_name}<\/name>/!b;n;c<value>${hdfs_site_value}</value>" ${file_name}
done
for mapred_site_config_low in $(awk '/\[mapred-site.xml-start\]/{flag=1; next} /\[mapred-site.xml-end\]/{flag=0} flag' ${system_file});
do
file_name=$(find /data/sy0218/*hadoop*/etc -type f -name *mapred-site.xml*)
mapred_site_name=$(echo ${mapred_site_config_low} | awk -F '|' '{print $1}' | sed 's/[][]//g')
mapred_site_value=$(echo ${mapred_site_config_low} | awk -F '|' '{print $2}')
sed -i "/<name>${mapred_site_name}<\/name>/!b;n;c<value>${mapred_site_value}</value>" ${file_name}
done
for yarn_site_config_low in $(awk '/\[yarn-site.xml-start\]/{flag=1; next} /\[yarn-site.xml-end\]/{flag=0} flag' ${system_file});
do
file_name=$(find /data/sy0218/*hadoop*/etc -type f -name *yarn-site.xml*)
yarn_site_name=$(echo ${yarn_site_config_low} | awk -F '|' '{print $1}' | sed 's/[][]//g')
yarn_site_value=$(echo ${yarn_site_config_low} | awk -F '|' '{print $2}')
sed -i "/<name>${yarn_site_name}<\/name>/!b;n;c<value>${yarn_site_value}</value>" ${file_name}
done
hadoop_env_config=$(awk '/\[hadoop-env.sh-start\]/{flag=1; next} /\[hadoop-env.sh-end\]/{flag=0} flag' ${system_file})
while IFS= read -r hadoop_env_config_low;
do
file_name=$(find /data/sy0218/*hadoop*/etc -type f -name *hadoop-env.sh*)
hadoop_env_name=$(echo $hadoop_env_config_low | awk -F '|' '{print $1}' | sed 's/[][]//g')
hadoop_env_value=$(echo $hadoop_env_config_low | awk -F '|' '{print $2}')
sed -i "s|^${hadoop_env_name}.*$|${hadoop_env_name}${hadoop_env_value}|" ${file_name}
done <<< $hadoop_env_config
file_name=$(find /data/sy0218/*hadoop*/etc -type f -name *workers*)
truncate -s 0 $file_name
for workers_low in $(awk '/\[workers-start\]/{flag=1; next} /\[workers-end\]/{flag=0} flag' ${system_file});
do
echo $workers_low >> $file_name
done
for hive_site_config_low in $(awk '/\[hive-site.xml-start\]/{flag=1; next} /\[hive-site.xml-end\]/{flag=0} flag' ${system_file});
do
file_name=$(find /data/sy0218/*apache-hive*/conf -type f -name *hive-site.xml*)
hive_site_name=$(echo ${hive_site_config_low} | awk -F '|' '{print $1}' | sed 's/[][]//g')
hive_site_value=$(echo ${hive_site_config_low} | awk -F '|' '{print $2}')
sed -i "/<name>${hive_site_name}<\/name>/!b;n;c<value>${hive_site_value}</value>" ${file_name}
done
tail -f /dev/null
1-2. dockerfile 및 필요 설정 샘플파일
# Apache Hive 3.1.3
wget https://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
# Hadoop 3.3.5
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.5/hadoop-3.3.5.tar.gz
# PostgreSQL JDBC Driver 42.2.11
wget https://jdbc.postgresql.org/download/postgresql-42.2.11.jar
--------------------------------------------------------
도커 build시 필요 파일
apache-hive-3.1.3-bin.tar.gz
core-site.xml
dockerfile
entrypoint.sh
fair-scheduler.xml
hadoop-3.3.5.tar.gz
hadoop-config.sh
hadoop-env.sh
hdfs-site.xml
hive-site.xml
mapred-site.xml
postgresql-42.2.11.jar
workers
yarn-site.xml
----------------------dockerfile----------------------
# 베이스 이미지
FROM openjdk:8
# bash 및 필요 패키지 설치
RUN apt-get update && apt-get install -y bash wget tar
# 환경 변수 설정
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 \
HADOOP_HOME=/data/sy0218/hadoop-3.3.5 \
HADOOP_COMMON_HOME=/data/sy0218/hadoop-3.3.5 \
HADOOP_MAPRED_HOME=/data/sy0218/hadoop-3.3.5 \
HADOOP_HDFS_HOME=/data/sy0218/hadoop-3.3.5 \
HADOOP_YARN_HOME=/data/sy0218/hadoop-3.3.5 \
HADOOP_CONF_DIR=/data/sy0218/hadoop-3.3.5/etc/hadoop \
HADOOP_LOG_DIR=/logs/hadoop \
HADOOP_PID_DIR=/var/run/hadoop/hdfs \
HADOOP_COMMON_LIB_NATIVE_DIR=/data/sy0218/hadoop-3.3.5/lib/native \
HADOOP_OPTS="-Djava.library.path=/data/sy0218/hadoop-3.3.5/lib/native" \
HIVE_HOME=/data/sy0218/apache-hive-3.1.3-bin \
HIVE_AUX_JARS_PATH=/data/sy0218/apache-hive-3.1.3-bin/aux
ENV PATH=$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$HIVE_AUX_JARS_PATH/bin:$PATH
# /usr/lib/jvm 디렉토리 생성 및 JDK 복사
RUN mkdir -p /usr/lib/jvm && cp -r /usr/local/openjdk-8 /usr/lib/jvm/java-8-openjdk-amd64
# 하둡 설치 및 설정 파일 복사
RUN mkdir -p /data/sy0218
RUN mkdir -p /data/download_tar
RUN mkdir -p /hadoop/data1
RUN mkdir -p /hadoop/data2
RUN mkdir -p /hadoop/hdfs
RUN mkdir -p /hadoop/hdfs_work
RUN mkdir -p /hadoop/jn
RUN mkdir -p /hadoop/data
# 하둡 tar파일 download_tar 디렉토리 복사
COPY hadoop-3.3.5.tar.gz /data/download_tar/hadoop-3.3.5.tar.gz
COPY apache-hive-3.1.3-bin.tar.gz /data/download_tar/apache-hive-3.1.3-bin.tar.gz
# 하둡 tar파일 원하는 경로에 풀기
RUN tar xzvf /data/download_tar/hadoop-3.3.5.tar.gz -C /data/sy0218/
# 하둡 설정 파일
COPY core-site.xml /data/sy0218/hadoop-3.3.5/etc/hadoop/
COPY hdfs-site.xml /data/sy0218/hadoop-3.3.5/etc/hadoop/
COPY mapred-site.xml /data/sy0218/hadoop-3.3.5/etc/hadoop/
COPY yarn-site.xml /data/sy0218/hadoop-3.3.5/etc/hadoop/
COPY workers /data/sy0218/hadoop-3.3.5/etc/hadoop/
COPY hadoop-env.sh /data/sy0218/hadoop-3.3.5/etc/hadoop/
COPY hadoop-config.sh /data/sy0218/hadoop-3.3.5/libexec/
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# Hive tar파일 원하는 경로에 풀기
RUN tar xzvf /data/download_tar/apache-hive-3.1.3-bin.tar.gz -C /data/sy0218/
# 설정파일 및 JAR파일 원하는경로 COPY
COPY postgresql-42.2.11.jar /data/sy0218/apache-hive-3.1.3-bin/lib/
COPY hive-site.xml /data/sy0218/apache-hive-3.1.3-bin/conf/
# 컨테이너 내에서 실행할 기본 명령어 설정
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
2. hadoop_hive 도커 run 예시
docker run -d \
--name hadoop_hive \
--network host \
-v /root/.ssh:/root/.ssh \
-v /hadoop:/hadoop \
-v /var/run/hadoop/hdfs:/var/run/hadoop/hdfs \
-v /data/work/system_download.txt:/data/system_download.txt \
hadoop_hive:3.3.5
2-1. hadoop_hive_docker_pull.sh : 이미지 도커 레지스트리에 pulㅣ
/data/docker_sh/hadoop_hive_docker_pull.sh
#!/usr/bin/bash
# 인자 개수 확인
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <docker_registry> <docker_images_name> <tag>"
exit 1
fi
zoo_server_file="/data/work/system_download.txt"
zoo_array=($(cat ${zoo_server_file} | grep hadoop_ip | awk -F '|' '{for(i=2; i<=NF; i++) print $i}'))
len_zoo_array=${#zoo_array[@]}
docker_registry=$1
docker_images_name=$2
docker_images_tag=$3
for ((i=0; i<len_zoo_array; i++));
do
current_ip=${zoo_array[$i]}
echo "하둡-hive 이미지 레지스트리 >>> pull >>> 서버:$current_ip"
ssh ${current_ip} "docker pull ${docker_registry}/${docker_images_name}:${docker_images_tag}"
done
2-2. hadoop_hive_docker_run.sh : 각 서버 hadoop_hive 도커 컨테이너 run
/data/docker_sh/hadoop_hive_docker_run.sh
#!/usr/bin/bash
# 인자 개수 확인
if [ "$#" -ne 4 ]; then
echo "Usage: $0 <docker_registry> <docker_images_name> <tag> <docker_run_name>"
exit 1
fi
system_file="/data/work/system_download.txt"
ip_array=($(grep hadoop_ip ${system_file} | awk -F '|' '{for(i=2; i<=NF; i++) print $i}'))
len_ip_array=${#ip_array[@]}
hadoop_need_dir=($(grep need_dir ${system_file} | awk -F '|' '{for(i=2; i<=NF; i++) print $i}'))
len_need_dir=${#hadoop_need_dir[@]}
docker_registry=$1
docker_images_name=$2
docker_images_tag=$3
docker_run_name=$4
for ((i=0; i<len_ip_array; i++)); do
current_ip=${ip_array[$i]}
for ((j=0; j<len_need_dir; j++)); do
current_dir=${hadoop_need_dir[$j]}
echo "${current_ip} 서버 필요 디렉토리 삭제 후 생성 $current_dir"
ssh ${current_ip} "rm -rf ${current_dir}"
ssh ${current_ip} "mkdir -p ${current_dir}"
done
echo "hadoop_hive 컨테이너 시작서버:$current_ip"
ssh ${current_ip} "docker run -d --name ${docker_run_name} --network host -v /root/.ssh:/root/.ssh -v /hadoop:/hadoop -v /var/run/hadoop/hdfs:/var/run/hadoop/hdfs -v /data/work/system_download.txt:/data/system_download.txt ${docker_registry}/${docker_images_name}:${docker_images_tag}"
done
컨테이너 run 확인

2-3. hadoop_hive 컨테이너 하둡 실행 파일 local 복사
/data/docker_sh/hadoop_hive_cp_to_local.sh
#!/usr/bin/bash
# 인자 개수 확인
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <container_name>"
exit 1
fi
container_name=$1
system_file="/data/work/system_download.txt"
ip_array=($(cat ${system_file} | grep hadoop_ip | awk -F '|' '{for(i=2; i<=NF; i++) print $i}'))
len_ip_array=${#ip_array[@]}
for ((i=0; i<len_ip_array; i++));
do
current_ip=${ip_array[$i]}
echo "docker cp 작업중인 주소: ${current_ip}"
ssh ${current_ip} "docker cp ${container_name}:/data/sy0218/ /data/"
done
3. 리팩토링 (/data/work/component_proc_sh/component_proc.py) - 객체지향 프로그래밍
/data/work/component_proc_sh/component_proc.py
#!/usr/bin/python3
import subprocess
import sys
from datetime import datetime
# DockerManager 클래스 정의
class DockerManager:
# 생성자 메서드 : 클래스의 인스턴스가 생성될 때 자동으로 호출, 클래스의 인스턴스 변수들을 초기화!!
# self : 인스턴스 메서드를 호출하거나 변수에 접근하는 특별한 매개변수
def __init__(self, docker_build_dir, docker_registry, docker_images_name, docker_images_tag, docker_run_name):
self.docker_build_dir = docker_build_dir
self.docker_registry = docker_registry
self.docker_images_name = docker_images_name
self.docker_images_tag = docker_images_tag
self.docker_run_name = docker_run_name
def log(self, message):
print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Time_Stamp : {message}")
def system_download(self):
self.log("각 서버 최신화 system_download.txt 배포 Start....")
subprocess.run(['/data/work/scp_system_download_txt.sh'], check=True)
self.log("각 서버 최신화 system_download.txt 배포 End....")
print("")
def docker_build(self):
self.log("docker build Start....")
subprocess.run([
'docker', 'build', '-t',
f"{self.docker_registry}/{self.docker_images_name}:{self.docker_images_tag}",
self.docker_build_dir], check=True)
self.log("docker build End....")
print("")
def docker_push(self):
self.log("docker registry Push Start....")
subprocess.run([
'docker', 'push',
f"{self.docker_registry}/{self.docker_images_name}:{self.docker_images_tag}"], check=True)
self.log("docker registry Push End....")
print("")
def docker_registry_check(self):
self.log("docker registry Check Start....")
subprocess.run([
'curl', '-X', 'GET',
f"http://{self.docker_registry}/v2/zookeeper/tags/list"], check=True)
self.log("docker registry Check End....")
print("")
def docker_pull(self):
self.log("docker Pull Start")
if self.docker_run_name == 'zookeeper':
subprocess.run([
'/data/docker_sh/zookeeper_docker_pull.sh',
self.docker_registry,
self.docker_images_name,
self.docker_images_tag], check=True)
elif self.docker_run_name == 'postsql':
subprocess.run([
'/data/docker_sh/postgresql_docker_pull.sh',
self.docker_registry,
self.docker_images_name,
self.docker_images_tag], check=True)
elif self.docker_run_name == 'hadoop_hive':
subprocess.run([
'/data/docker_sh/hadoop_hive_docker_pull.sh',
self.docker_registry,
self.docker_images_name,
self.docker_images_tag], check=True)
self.log("docker Pull End")
print("")
def docker_run(self):
self.log("docker Run Start....")
if self.docker_run_name == 'zookeeper':
subprocess.run([
'/data/docker_sh/zookeeper_docker_run.sh',
self.docker_registry,
self.docker_images_name,
self.docker_images_tag,
self.docker_run_name], check=True)
elif self.docker_run_name == 'postsql':
subprocess.run([
'/data/docker_sh/postgresql_docker_run.sh',
self.docker_registry,
self.docker_images_name,
self.docker_images_tag,
self.docker_run_name], check=True)
elif self.docker_run_name == 'hadoop_hive':
subprocess.run([
'/data/docker_sh/hadoop_hive_docker_run.sh',
self.docker_registry,
self.docker_images_name,
self.docker_images_tag,
self.docker_run_name], check=True)
self.log("docker Run End....")
print("")
def copy_container_to_local(self):
self.log("Copy container_to_local Start....")
if self.docker_run_name == 'hadoop_hive':
subprocess.run([
'/data/docker_sh/hadoop_hive_cp_to_local.sh',
self.docker_run_name], check=True)
self.log("Copy container_to_local End....")
def run(self):
self.log("docker auto Start....")
if self.docker_run_name == 'hadoop_hive':
self.system_download()
self.docker_build()
self.docker_push()
self.docker_registry_check()
self.docker_pull()
self.docker_run()
self.copy_container_to_local()
else:
self.system_download()
self.docker_build()
self.docker_push()
self.docker_registry_check()
self.docker_pull()
self.docker_run()
self.log("docker auto End....")
def test(self):
self.copy_container_to_local()
if __name__ == "__main__":
args = sys.argv[1:]
# 인자가 5개가 아니면 종료
if len(args) != 5:
print("사용법: script.py <docker_build_dir> <docker_registry> <docker_images_name> <tag> <docker_run_name>")
sys.exit(1)
# 각 인자를 변수로 저장
docker_build_dir, docker_registry, docker_images_name, docker_images_tag, docker_run_name = args
# 컨테이너 run 파이프라인 실행
manager = DockerManager(docker_build_dir, docker_registry, docker_images_name, docker_images_tag, docker_run_name)
manager.run()
#manager.test()
실행 명령
./component_proc.py /data/hadoop_hive_docker 192.168.56.10:5000 hadoop_hive 3.3.5 hadoop_hive
4. 하둡 실행
4-1. hdfs zkfc -formatZK(master1) : HDFS(ZooKeeper Failover Controller)를 포맷하는 데 사용
- ZKFC의 상태를 초기화하고 주키퍼에 새로운 ZKFC 데이터를 포맷
4-2. start-dfs.sh(master1) : 하둡 분산 파일 시스템(HDFS)의 구성 요소를 시작하는 스크립트
/data/sy0218/hadoop-3.3.5/sbin/start-dfs.sh
4-3. hdfs namenode -format(master1) : HDFS 네임노드를 포맷
4-4. stop-dfs.sh(master1) : 하둡 분산 파일 시스템(HDFS)의 구성 요소를 종료하는 스크립트
/data/sy0218/hadoop-3.3.5/sbin/stop-dfs.sh
/data/sy0218/hadoop-3.3.5/sbin/stop-all.sh
4-5. start-all.sh(master1) : 하둡(Hadoop) 클러스터의 여러 구성 요소를 시작
/data/sy0218/hadoop-3.3.5/sbin/start-all.sh
4-6. hdfs namenode -bootstrapStandby(master2) : Hadoop 클러스터에서 하나의 네임노드를 부트스트래핑하여 스탠바이 네임노드로 설정
/data/sy0218/hadoop-3.3.5/sbin/stop-all.sh(master1)
/data/sy0218/hadoop-3.3.5/sbin/start-all.sh(master1)
hdfs haadmin -getServiceState namenode1(master1)
hdfs haadmin -getServiceState namenode2(master1)
5. hive 기동
1. Apache Hive의 메타스토어 데이터베이스를 초기화
/data/sy0218/apache-hive-3.1.3-bin/bin/schematool -initSchema -dbType postgres
2. HiveServer2를 백그라운드에서 실행하며 로그를 지정된 파일에 기록
mkdir -p /hive/log
nohup hive --service hiveserver2 >> /hive/log/hiveserver2.log 2>&1 &
6. 하둡_hive 동작 확인
jps 확인

hive

'데이터 엔지니어( 실습 정리 )' 카테고리의 다른 글
| 사용자 키보드 로그 hive 웨어하우징 (2) | 2024.07.15 |
|---|---|
| hive 테이블 동적 Create, 실습 정리 (2) | 2024.07.05 |
| 도커 컨테이너 실습[주키퍼] 동적 실행 (2) | 2024.07.03 |
| ssh-keygen 자동화 스크립트 (2) | 2024.07.01 |
| 가상환경 리눅스 스왑영역 잡아주기 (0) | 2024.06.27 |