728x90
반응형

HADOOP을 설치하고 웹에서 파일을 추가하거나 삭제할 수 있는데 다음과 같은 에러가 나면서 되지 않았다.

Permission denied: user=dr.who, access=WRITE, inode="/path/to/file":current_user:supergroup:drwxr-xr-x

현재 HADOOP이 실행되고 있는 환경의 사용자 권한이 추가되지 않아 생기는 에러로

 

etc/hadoop/core-site.xml에 다음을 추가하고 재시작하면 된다.

<property>
  <name>hadoop.http.staticuser.user</name>
  <value>current_user</value>
</property>

 

참고 문헌

  1. https://github.com/infoscis/Wiki/wiki/Pseudo-distributed-Hadoop(YARN)-설치

반응형

'Log' 카테고리의 다른 글

[Log] Zeppelin 크론 설정하기  (0) 2020.08.27
[Log] ElasticSearch _default_ mapping 문제 해결  (0) 2020.05.28
[Log] librdkafka 빌드하기  (0) 2020.03.26
[Log] Logstash 403 에러 해결  (0) 2020.03.19
[Log] Airflow 설치  (0) 2020.03.12
728x90
반응형

golang 프로젝트의 로그를 수집하기 위해 confluent-kafka-go를 이용했다.

 

이를 위해서 librdkafka를 설치해야 하는데

 

confluent-kafka-go 최신 버전의 경우 1.3.0 이상을 사용해야 한다는 에러가 났다.

 

CeontOS 7에서 yum으로 설치하는 경우 0.11.x로만 가능해서 생긴 문제로

 

최신 버전은 바이너리 파일을 제공하지 않아 직접 빌드해야 했다.

 

다음과 같이 저장소를 받아서 태그를 1.3.0으로 변경했다.

 

최신은 1.4.0-RC4 이지만 아직 정식이 아니라 1.3.0으로 했다.

$ git clone https://github.com/edenhill/librdkafka.git
$ cd librdkafka
$ git checkout tags/v1.3.0 -b v1.3.0
$ cd librdkafka

librdkafka에서 packaging/rpm/Makefile을 보면 mock를 이용하여 rpm 파일을 생성한다.

$ sudo yum install -y mock
$ sudo usermod -a -G mock current_user
$ cd packaging/rpm
$ make

pkg-1.3.0-1-default 디렉토리 밑에 rpm 파일이 생긴 것을 확인할 수 있다.

$ sudo yum install -y librdkafka1-1.3.0-1.el7.x86_64.rpm
$ sudo yum install -y librdkafka-devel-1.3.0-1.el7.x86_64.rpm

위와 같이 설치해주면 confluent-kafka-go를 에러없이 사용할 수 있다.

 

참고 문헌

  1. https://github.com/confluentinc/confluent-kafka-go

  2. https://github.com/edenhill/librdkafka

반응형

'Log' 카테고리의 다른 글

[Log] ElasticSearch _default_ mapping 문제 해결  (0) 2020.05.28
[Log] HDFS Web UI Permission denied  (0) 2020.04.02
[Log] Logstash 403 에러 해결  (0) 2020.03.19
[Log] Airflow 설치  (0) 2020.03.12
[Log] Zeppelin 설치 및 Spark 연동  (0) 2020.03.05
728x90
반응형

ELK를 구성하여 로그를 잘 쌓고 있었는데 어느 날 로그가 수집되고 있지 않았다.

 

원인을 찾기 위해 Logstash의 로그(/var/log/logstash/logstash-plain.log)를 열어봤다.

[INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})

위의 로그가 많이 있어 검색을 해보니 ElasticSearch에 용량이 부족할 경우

 

Kibana에서 인덱스를 읽기 전용으로 변경한다는 내용이었다.

 

ElasticSearch의 저장 공간 사용량을 확인해보니 90% 넘게 차있었다.

 

이를 해결하기 위해 우선은 다음과 같이 쿼리를 날려 로그를 다시 수집할 수 있도록 했다.

PUT http://ElasticSearch:9200/_all/_settings
{
  "index": {
    "blocks": {
      "read_only_allow_delete": "false"
    }
  }
}

그리고 인덱스를 지워 용량을 확보해 로그들을 다시 쌓을 수 있었다.

 

참고 문헌

  1. https://dev-yeon.tistory.com/12

반응형

'Log' 카테고리의 다른 글

[Log] HDFS Web UI Permission denied  (0) 2020.04.02
[Log] librdkafka 빌드하기  (0) 2020.03.26
[Log] Airflow 설치  (0) 2020.03.12
[Log] Zeppelin 설치 및 Spark 연동  (0) 2020.03.05
[Log] NoNodesAvailable 에러 해결  (0) 2020.02.27
728x90
반응형

Spark에서 하는 일을 주기적으로 수행하기 위해 무엇이 있는지 조사했다.

 

여러 가지 도구들이 있었는데 그 중에서 AirflowLuigi가 좋아보였다.

 

둘 중에 어떤 걸로 정할 지 고민하다 Airflow로 정했다.

 

두 가지 모두 좋아보였지만 AirflowApache에서 관리하고 대시보드가 유려해보였다.

 

Airflow를 설치하는 방법은 Quick Start에 잘 나와 있어 그대로 따라하면 된다.

$ pip install 'apache-airflow[ssh]'

ssh는 원격 서버에 접속하여 spark-submit을 수행하기 위해 설치했다.

$ airflow initdb

~/airflow/airflow.cfg, airflow.db, logs, unittests.cfg 가 만들어진다.

 

Airflow를 구동할 때 airflow webserver와 같이 커맨드로만 가능해서

 

다음과 같이 start-airflow.sh, stop-airflow.sh을 만들어서 실행했다.

#!/bin/sh
nohup airflow webserver > /dev/null 2>&1 &
nohup airflow scheduler > /dev/null 2>&1 &
#!/bin/sh
pkill -f airflow

신규로 DAG를 만들기 위해서 ~/airflowdags 디렉토리를 만들고 파일을 추가한다.

$ cd ~/airflow
$ mkdir dags && cd dags
$ touch my_first_dag.py

my_fist_dag.py에 다음과 같이 작성하여 spark-submit을 주기적으로 수행하도록 했다.

# -- coding: utf-8 --
from datetime import timedelta
import airflow
from airflow.models import DAG
from airflow.contrib.operators.ssh_operator import SSHOperator
from airflow.contrib.hooks.ssh_hook import SSHHook
args = {
    'owner': 'Airflow',
    'start_date': airflow.utils.dates.days_ago(2),
}
dag = DAG(
    dag_id='my_dag',
    default_args=args,
    schedule_interval='0 0 * * *',
    dagrun_timeout=timedelta(minutes=60),
    tags=['spark']
)
templated_bash_command = """
    spark-submit \
    --class my_class \
    --master spark://spark-master:7077 \
    --executor-cores 2 \
    --executor-memory 2g \
    my_first.jar
"""
hook = SSHHook(
    ssh_conn_id='ssh_default',
    remote_host='spark-master',
    username='username',
    key_file='~/.ssh/id_rsa'
)
run_ssh = SSHOperator(
    task_id='spark_submit_task',
    ssh_hook=hook,
    command=templated_bash_command,
    dag=dag
)
run_ssh

schedule_interval='0 0 * * *'은 하루에 한 번 밤에 수행한다고 문서에 적혀있는데

 

UTC 시간대로 동작하여 한국 시간으로는 오전 9시에 수행한다.

 

참고 문헌

  1. http://bytepawn.com/luigi-airflow-pinball.html

  2. https://airflow.apache.org/docs/stable/installation.html

  3. https://airflow.apache.org/docs/stable/scheduler.html#dag-runs

반응형

'Log' 카테고리의 다른 글

[Log] librdkafka 빌드하기  (0) 2020.03.26
[Log] Logstash 403 에러 해결  (0) 2020.03.19
[Log] Zeppelin 설치 및 Spark 연동  (0) 2020.03.05
[Log] NoNodesAvailable 에러 해결  (0) 2020.02.27
[Log] Spark ElasticSearch Parquet  (0) 2020.01.25

+ Recent posts