반응형

Airflow 란?

Apache Airflow는 초기 에어비엔비(Airfbnb) 엔지니어링 팀에서 개발한 워크플로우 오픈 소스 플랫폼입니다. 프로그램 방식으로 워크플로우를 작성, 예약, 모니터링 할 수 있습니다.

**워크플로우 : 의존성으로 연결된 작업(Task)들의 집합.

반응형

'Data engineer > Airflow' 카테고리의 다른 글

Linux 환경에서 airflow 설치 및 실행  (0) 2024.10.04
반응형


Airflow 설치 방법

1. pip 사용하여 설치

# 먼저 가상환경 생성
python3 -m venv airflow_venv
source airflow_venv/bin/activate

# 환경 변수를 설정
export AIRFLOW_HOME=~/airflow

# 설치할 때에는 Apache Airflow의 특정 버전을 설정해주는 것이 좋습니다.
# 예시로 airflow의 기본 패키지를 설치합니다.
pip install "apache-airflow==2.6.3" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.6.3/constraints-3.8.txt"

airflow db init
airflow webserver --port 8080

*blinker 삭제 실패 등 여러 원인으로 실패가 발생할 수 있습니다. 현재 해결한 방법은 pip3 apt update, pip3 apt upgrade를 통해서 pip3 패키지를 최신화해서 패키지 위치를 잡아줘야 합니다.

 

2. Helm 사용하여 설치

# 먼저 Helm 저장소 추가
helm repo add apache-airflow https://airflow.apache.org

# 저장소 업데이트
helm repo update

# Airflow 설치
kubectl create namespace airflow
helm install airflow apache-airflow/airflow --namespace airflow

 

3. Docker Compose 사용하여 설치

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml'

mkdir -p ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)\nAIRFLOW_GID=0" > .env

docker-compose up airflow-init
docker-compose up

 

4. APT 사용하여 설치

sudo apt-get update
sudo apt-get install apache-airflow

 

5. Apache Airflow 설치 스크립트 사용하여 설치

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/stable/installation-script.sh'
bash installation-script.sh

 

반응형

'Data engineer > Airflow' 카테고리의 다른 글

Airflow 란?  (0) 2024.10.05
반응형

 

kafka-lag-exporter

kafka-lag-exporter 설치 및 실행

*여러 방법으로 실행하는 방법이 있는데 Java 방식으로 설치 및 실행했습니다. 다른 방식은 처음 사람이 하기에는 어려울 수 있습니다.

 

  1. https://github.com/seglo/kafka-lag-exporter/releases 페이지에서 zip 형태를 다운로드 받습니다. Source code는 example 파일 사용을 위해 다운로드 받습니다.
  2. java를 설치하거나, java version이 8이면 최신 버젼으로 업데이트 해줍니다.
    1. 8 버젼이면 아래와 같은 에러가 발생합니다.
    2. ‘java.lang.UnsupportedClassVersionError: ch/qos/logback/classic/spi/LogbackServiceProvider has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0’
  3. Source code에 example 폴더에 application.conf 파일을 kafka-lag-exporter 폴더로 이동해줍니다.
  4. pplication.conf 파일 내용을 수정해줍니다.
  5. 아래 명령어를 실행해줍니다.
$ ./bin/kafka-lag-exporter -Dconfig.file=/Users/jsh/kafka/kafka-lag-exporter/application.conf

 

반응형
반응형

spark-driver version 과 python verson 맞추기 

 

환경

- Mac2

- Mac2에 자동으로 설치 되어 있는 python3 와 version 3.12.*

 

방법

현재 python3 -V 하면 3.9가 나오며, 현재 brew python 설치는 3.12로 되어 있는 상태에서 spark-driver worker version 은 3.12 가 나오는 상태입니다.

만약 spark-driver worker version 이 brew list 에 있으면 해당 위치를 .zshrc 또는 .bash_profile 에 설정을 해주면 됩니다.

예를 들어 python3 에 3.12이면 아래와 같이 넣어주면 됩니다.

#Python
alias python="python3"
alias python3="/opt/homebrew/bin/python3.12"

해당 항목을 저장후 source 를 통해 쉘에 적용 후 python3 -V 하면 원하는 version 이 나올겁니다.

 

만약 spark-driver worker version 이 brew list 에 없으면 brew install python@3. 뒤에 원하는 버젼을 입력하여 설치 합니다.

설치 후 위와 같이 항목을 적용 합니다.

 

 

jupyter 로 pyspark 열 때 맞추는 방법

아래 부분 보고 맞추시면 됩니다.

#Python
alias python="python3"
alias python3="/opt/homebrew/bin/python3.12"

#Spark
export SPARK_HOME=~/Spark/spark
export PYSPARK_PYTHON=/opt/homebrew/bin/python3.12
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'
export SPARK_LOCAL_IP=127.0.0.1
alias sparknb='$SPARK_HOME/bin/pyspark'

여기서 주의할건 PYSPARK_PYTHON 에 python3 를 입력하면 적용이 되지 않아 직접 dir 를 입력했습니다.

그리고 PYSPARK_DRIVER_PYTHON 은 jupyter 이여야 합니다.

반응형
반응형

**빅공잼님 덕분에 빅데이터 분석 환경 구축을 해볼 수 있었습니다. 감사합니다.**

 

5강. Zookeeper 설치 및 환경 설정

  1. 설치합니다.
  2. $ cd /install_dir $ sudo wget <https://dlcdn.apache.org/zookeeper/zookeeper-3.8.3/apache-zookeeper-3.8.3-bin.tar.gz> $ sudo tar -xzvf apache-zookeeper-3.8.3-bin.tar.gz -C /usr/local/zookeeper $ sudo vi /etc/environment # 아래 내용 추가 후 저장 ZOOKEEPER_HOME="/usr/local/zookeeper" # 시스템 환경변수 활성화 $ source /etc/environment $ sudo echo 'export ZOOKEEPER_HOME=/usr/local/zookeeper' >> ~/.bashrc $ source ~/.bashrc
  3. zookeeper 환경 설정 파일을 설정해줍니다.
  4. $ cd $ZOOKEEPER_HOME $ sudo cp ./conf/zoo_sample.cfg ./conf/zoo.cfg $ sudo vi ./conf/zoo.cfg #기존에 존재하는 dataDir 은 주석 처리합니다. dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs #clientPort 아래에 추가해주고 저장합니다. maxClientCnsns=0 maxSessionTimeout=180000 server.1=nn1:2888:3888 server.2=nn2:2888:3888 server.3=dn1:2888:3888 #터미널에서 입력해줍니다. $ sudo mkdir -p /usr/local/zookeeper/data $ sudo mkdir -p /usr/local/zookeeper/logs $ sudo chown -R $USER:$USER /usr/local/zookeeper $ sudo vi /usr/local/zookeeper/data/myid
  5. Cluster 구성 후 Node 끼리 ssh 비밀번호 없이 연결할 수 있도록 설정합니다.
  6. #터미널에서 입력합니다. $ ssh-keygen -t rsa $ cat >> ~/.ssh/authorized_keys < ~/.ssh/id_rsa.pub $ ssh localhost
반응형
반응형

**빅공잼님 덕분에 빅데이터 분석 환경 구축을 해볼 수 있었습니다. 감사합니다.**

 

4강. Spark 설치 및 환경설정

  1. Apache Spark 3.3.3 설치 및 압축 해제를 해줍니다.
  2. $ sudo wget <https://dlcdn.apache.org/spark/spark-3.4.2/spark-3.4.2-bin-hadoop3.tgz> $ sudo tar -xzvf spark-3.4.2-bin-hadoop3.tgz -C /usr/local $ sudo mv /usr/local/spark-3.4.2-bin-hadoop3 /usr/local/spark
  3. Python3 설치 및 파이썬 라이브러리 설치 해줍니다.
  4. #Python 설치 $ sudo apt-get install -y python3-pip #Python 버전 확인 #2024.01.25 기분 Python 3.8.10 $ python3 -V #PySpark 설치 $ sudo pip3 install pyspark findspark
  5. Spark 환경 변수 설정을 해줍니다.
  6. # Hadoop 시스템 환경변수 설정 sudo vim /etc/environment # 아래 내용 추가 후 저장 PATH 뒤에 ":/usr/local/spark/bin" 추가 PATH 뒤에 ":/usr/local/spark/sbin" 추가 SPARK_HOME="/usr/local/spark" # 시스템 환경변수 활성화 $ source /etc/environment # Spark 사용자 환경변수 설정 $ echo 'export SPARK_HOME=/usr/local/spark' >> ~/.bashrc # 사용자 환경변수 활성화 $ source ~/.bashrc
  7. spark-env.sh 파일을 편집해줍니다.
  8. #터미널에서 입력해줍니다. $ cd $SPARK_HOME/conf $ ls $ sudo cp spark-env.sh.template spark-env.sh $ sudo vi spark-env.sh #맨 아래로 이동합니다. export SPARK_HOME=/usr/local/spark export SPARK_CONF_DIR=/usr/local/spark/conf export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export HADOOP_HOME=/usr/local/hadoop export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop export SPARK_MASTER_WEBUI_PORT=18080
  9. spark-defaults.conf 파일을 편집해줍니다.
  10. #터미널에서 입력해줍니다. $ sudo cp spark-defaults.conf.template spark-defaults.conf $ sudo vi spark-defaults.conf #맨 아래로 이동합니다. spark.master yarn spark.eventLog.enabled true spark.eventLog.dir /usr/local/spark/logs #저장 후 나옵니다 #터미널에서 입력해줍니다. $ sudo mkdir -p /usr/local/spark/logs $ sudo chown -R $USER:$USER /usr/local/spark/ $ cd /usr/local/spark $ ls -al
  11. workers.template 파일을 편집해줍니다.
  12. #터미널에서 입력해줍니다. $ cd /usr/local/spark/conf $ sudo cp workers.template workers $ vi workers #맨 아래로 이동해줍니다. #localhost 는 주석 처리해줍니다. #아래 내용을 추가해줍니다. dn1 dn2 dn3
  13. 파이썬 환경 설정을 추가해줍니다
  14. $ sudo vi /etc/environment # 아래 내용 추가 후 저장 PATH 뒤에 ":/usr/bin/python3" 추가 # 시스템 환경변수 활성화 $ source /etc/environment $ sudo echo 'export PYTHONPATH=/usr/bin/python3' >> ~/.bashrc $ sudo echo 'export PYSPARK_PYTHON=/usr/bin/python3' >> ~/.bashrc $ source ~/.bashrc
반응형
반응형

**빅공잼님 덕분에 빅데이터 분석 환경 구축을 해볼 수 있었습니다. 감사합니다.**

 

3강. Hadoop 설치 및 환경설정

  1. Hadoop 설치 해줍니다.
  2. > sudo wget <https://dlcdn.apache.org/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz> > sudo tar -zxvf hadoop-3.2.4.tar.gz -C /usr/local > sudo mv /usr/local/hadoop-3.2.4 /usr/local/hadoop
  3. /etc/environment 에설정을 추가해줍니다.
  4. PATH="~~~:/usr/local/hadoop/bin:/usr/local/hadoop/sbin" HADOOP_HOME="/usr/local/hadoop"
  5. 추가 설정을 해줍니다.
  6. //Ubuntu > sudo echo export 'HADOOP_HOME=/usr/local/hadoop' >> ~/.bashrc > sudo echo export 'HADOOP_COMMON_HOME=$HADOOP_HOME' >> ~/.bashrc > sudo echo export 'HADOOP_HDFS_HOME=$HADOOP_HOME' >> ~/.bashrc > sudo echo export 'HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop' >> ~/.bashrc > sudo echo export 'YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop' >> ~/.bashrc > sudo echo export 'HADOOP_YARN_HOME=$HADOOP_HOME' >> ~/.bashrc > sudo echo export 'HADOOP_MAPRED_HOME=$HADOOP_HOME' >> ~/.bashrc
  7. hdfs-site.xml 파일을 편집 해줍니다.
    • HDFS에서 사용할 환경 정보를 설정하는 파일입니다. hdfs-site.xml 에 설정 값이 없을 경우 hdfs-default.xml 을 기본으로 사용합니다.
    • 경로는 아래와 같습니다.
    • $HADOOP_HOME/etc/hadoop/hdfs-site.xml
    <configuration>
        <!-- configuration hadoop -->
        <property>
            <name>dfs.replication</name>
            <value>2</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>/usr/local/hadoop/data/nameNode</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>/usr/local/hadoop/data/dataNode</value>
        </property>
        <property>
            <name>dfs.journalnode.edits.dir</name>
            <value>/usr/local/hadoop/data/dfs/journalnode</value>
        </property>
        <property>
            <name>dfs.nameservices</name>
            <value>my-hadoop-cluster</value>
        </property>
        <property>
            <name>dfs.ha.namenodes.my-hadoop-cluster</name>
            <value>namenode1,namenode2</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.my-hadoop-cluster.namenode1</name>
            <value>nn1:8020</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.my-hadoop-cluster.namenode2</name>
            <value>nn2:8020</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.my-hadoop-cluster.namenode1</name>
            <value>nn1:50070</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.my-hadoop-cluster.namenode2</name>
            <value>nn2:50070</value>
        </property>
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://nn1:8485;nn2:8485;dn1:8485/my-hadoop-cluster</value>
        </property>
        <property>
            <name>dfs.client.failover.proxy.provider.my-hadoop-cluster</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <property>
            <name>dfs.ha.fencing.methods</name>
            <value>shell(/bin/true)</value>
        </property>
        <property>
            <name>dfs.ha.fencing.ssh.private-key-files</name>
            <value>/home/ubuntu/.ssh/id_rsa</value>
        </property>
        <property> 
            <name>dfs.ha.automatic-failover.enabled</name>
            <value>true</value>
        </property>
        <property>
            <name>dfs.name.dir</name>
            <value>/usr/local/hadoop/data/name</value>
        </property>
        <property>
            <name>dfs.data.dir</name>
            <value>/usr/local/hadoop/data/data</value>
        </property>
    </configuration>
    
    <configuration>
    	<property>
    		<name>fs.default.name</name>
    		<value>hdfs://nn1:9000</value>
    	</property>
    	<property>
    		<name>fs.defaultFS</name>
    		<value>hdfs://my-hadoop-cluster</value>
    	</property>
    	<property>
    		<name>ha.zookeeper.quorum</name>
    		<value>nn1:2181,nn2:2181,dn1:2181</value>
    	</property>
    </configuration>
    
    
    • hdfs-site.xml 속성
      • dfs.replication : HDFS 파일 블록 복제 개수 지정합니다.
      • dfs.namenode.name.dir : NameNode에서 관리할 데이터 디렉토리 경로 지정합니다.
        • namenode: Hadoop HDFS 의 Master daemon 입니다.
      • dfs.datanode.data.dir : DataNode에서 관리할 데이터 디렉토리 경로 지정합니다.
      • dfs.journalnode.edits.dir : JournalNode는 NameNode의 동기화 상태를 유지한다. 특정 시점에 구성된 fsimage snapshot 이후로 발생된 변경 사항을 editlog라 하며, 해당 데이터의 저장 위치를 설정합니다.
      • dfs.nameservices : Hadoop 클러스터의 네임서비스 이름을 지정합니다.
      • dfs.ha.namenodes.my-hadoop-cluster : Hadoop 클러스터 네임서비스의 NameNode 이름을 지정합니다.( “,”콤마로 구분하여 기재한다.)
      • dfs.namenode.rpc-address.my-hadoop-cluster.namenode1 : 클러스터 네임서비스에 포함되는 NameNode 끼리 RPC 통신을 위해 NameNode의 통신 주소를 지정합니다.(여기서는 8020포트 사용)
      • dfs.namenode.rpc-address.my-hadoop-cluster.namenode2 : 클러스터 네임서비스에 포함되는 NameNode 끼리 RPC 통신을 위해 NameNode의 통신 주소를 지정합니다.(여기서는 8020포트 사용)
      • dfs.namenode.http-address.my-hadoop-cluster.namenode1 : NameNode1(nn1)의 WEB UI 접속 주소를 지정합니다.(여기서는 50070포트 사용)
      • dfs.namenode.http-address.my-hadoop-cluster.namenode2 : NameNode2(nn2)의 WEB UI 접속 주소를 지정합니다.(여기서는 50070포트 사용)
      • dfs.namenode.shared.edits.dir : NameNoderk editlog를 쓰고/읽을 JournalNode URL 입니다. Zookeeper가 설치된 서버와 동일하게 JournalNode를 설정하면 됩니다. (예 : qjournal://nn1:8485;nn2:8485;dn1:8485/my-hadoop-cluster)
      • dfs.client.failover.proxy.provider.my-hadoop-cluster : HDFS 클라이언트가 Active NameNode에 접근할 때 사용하는 Java class 를 지정합니다.
      • dfs.ha.fencing.methods : Favilover 상황에서 기존 Active NameNode를 차단할 때 사용하는 방법을 기재합니다. (예 : sshfence 그러나 여기서는 shell(/bin/true)를 이용합니다.)
      • dfs.ha.fencing.ssh.private-key-files : ha.fencing.method를 sshfence로 지정하였을 경우, ssh를 경유하여 기존 Active NameNode를 죽이는데. 이 때, passpharase를 통과하기 위해 SSH Private Key File을 지정해야합니다.
      • dfs.ha.automatic-failover.enabled : 장애 복구를 자동으로 할 지에 대한 여부를 지정합니다.
  8. core-site.xml 파일을 편집합니다.
    • Hadoop 시스템 설정 파일이다. 네트워크 튜닝, I/O 튜닝, 파일 시스템 튜닝, 압축 설정 등 Hadoop 시스템 설정을 할 수 있습니다. HDFS와 MapReduce에서 공통적으로 사용할 환경 정보를 입력할 수 있습니다. core-site.xml 설정 값이 없으면, core-default.xml 을 기본으로 사용합니다.
    <configuration>
    	<property>
    		<name>fs.default.name</name>
    		<value>hdfs://nn1:9000</value>
    	</property>
    	<property>
    		<name>fs.defaultFS</name>
    		<value>hdfs://my-hadoop-cluster</value>
    	</property>
    	<property>
    		<name>ha.zookeeper.quorum</name>
    		<value>nn1:2181,nn2:2181,dn1:2181</value>
    	</property>
    </configuration>
    
    • fs.default.name : HDFS의 기본 통신 주소를 지정합니다.
    • fs.defaultFS : HDFS 기본 파일시스템 디렉토리를 지정합니다.
    • ha.zookeeper.quorum : Zookeeper가 설치되어 동작할 서버의 주소를 기재합니다.(여기서 포트는 2181)
  9. yarn-site.xml 파일을 편집합니다.
  10. <configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>nn1</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
  11. mapred-site.xml 파일을 편집합니다.
  12. <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> </configuration>
  13. hadoop-env.sh 파일을 편집합니다.
  14. export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export HADOOP_HOME=/usr/local/hadoop
  15. Hadoop workers 편집을 해줍니다.
  16. # Hadoop workers 편집 $ sudo vim $HADOOP_HOME/etc/hadoop/workers # 아래 내용 수정 후 저장 # localhost << 주석 처리 또는 제거 dn1 dn2 dn3
  17. Hadoop masters 편집을 해줍니다.
  18. # Hadoop masters 편집 sudo vim $HADOOP_HOME/etc/hadoop/masters # 아래 내용 수정 후 저장 nn1 nn2
반응형
반응형

**빅공잼님 덕분에 빅데이터 분석 환경 구축을 해볼 수 있었습니다. 감사합니다.**

 

2강. Java 설치 및 환경설정

  1. Ubuntu 20.04 apt-get update, upgrade, dist-upgrade 를 통해서 최신 version 으로 설치합니다.
  2. 프로젝트 진행 중에 필요한 라이브러리를 설치 합니다.
  3. > sudo apt-get install -y vim wget ssh openssh-* net-tools
  4. Java 를 설치해줍니다.
  5. > sudo apt-get install -y openjdk-8-jdk
  6. 현재 java 설치 위치를 확인합니다.
  7. > sudo find / -name java-8-openjdk-amd64 2>/dev/null -> /usr/share/gdb/auto-load/usr/lib/jvm/java-8-openjdk-amd64 -> /usr/lib/jvm/java-8-openjdk-amd64
  8. 횐경변수를 설정해줍니다.
    1. sudo vim /etc/environment
    2. PATH="~~~~~:/usr/lib/jvm/java-8-openjdk-amd64/bin" JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
    3. source /etc/environment
  9. sudo echo export ‘JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64’ >> ~/.bashrc복사 붙여넣기 하게 되면 ‘ 값이 잘못 들어갈 수 있어 한 번 더 확인해봐야합니다.
  10. **Troubleshooting
  11. env | grep JAVA 를 통해서 JAVA_HOME 이 export 되고 있는지 확인할 수 있습니다.
반응형

+ Recent posts