728x90

docker 설치 중 오류를 발견했다. 

 

 

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

File "/bin/yum-config-manager", line 135 except yum.Errors.RepoError, e: ^ SyntaxError: invalid syntax

 

 

- Python 2.x 와 Python 3.x의 문법 차이로 인한 문제이다.

   (yum-config-manager가 Python 2.x 구문을 사용하여 작성된 스크립트인데, 현재 시스템에서 기본 Python이 3.x로 설정되어 있어서 발생하는 문제)

- yum-utils 패키지를 재설치하고, yum-config-manager를 다시 사용할 수 있는 방법을 찾아야 한다.

 

 

1. yum-utils 패키지 설치

sudo yum install -y yum-utils

 

: yum-config-manager를 사용할 수 있도록 한다.

 

 

 

2. yum-config-manager 재실행

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

 

 

3. Docker 설치

 

$sudo yum install -y docker-ce docker-ce-cli containerd.io

$sudo systemctl start docker
$sudo systemctl enable docker

$sudo systemctl status docker

728x90

1. ORC (Optimized Row Columnar)

create table orc_table (
col1 string, 
col2 string, 
col3 int
)
 STORED AS ORC
;

 

  • 특징:
    • Hadoop에서 최적화된 컬럼 기반 저장 포맷.
    • 데이터를 컬럼 단위로 저장해 쿼리 성능이 빠름.
    • Zlib과 Snappy와 같은 고압축 지원.
    • Hive 전용 포맷으로 다른 시스템과의 호환성이 낮음.
  • 장점:
    • 압축률이 높고, 읽기 성능이 뛰어남.
    • 복잡한 분석 쿼리에서 최적화된 성능 제공.
  • 단점:
    • 데이터 적재 전에 포맷 변환이 필요하며, LOAD DATA 명령어를 지원하지 않음.

 

 

 

 

 

2. Parquet

CREATE TABLE parquet_table (
    col1 STRING,
    col2 STRING,
    col3 INT
)
STORED AS PARQUET;

 

 

  • 특징:
    • Hadoop에서 최적화된 컬럼 기반 저장 포맷.
    • 데이터를 컬럼 단위로 저장해 쿼리 성능이 빠름.
    • Zlib과 Snappy와 같은 고압축 지원.
    • Hive 전용 포맷으로 다른 시스템과의 호환성이 낮음.
  • 장점:
    • 압축률이 높고, 읽기 성능이 뛰어남.
    • 복잡한 분석 쿼리에서 최적화된 성능 제공.
  • 단점:
    • 데이터 적재 전에 포맷 변환이 필요하며, LOAD DATA 명령어를 지원하지 않음.

 

!! STORED AS PARQUET는 내부적으로 올바른 InputFormat 및 OutputFormat 클래스를 자동으로 설정합니다.

 

 

 

 

 

 

3. CSV (Textfile)

CREATE TABLE csv_table (
  col1 STRING,
  col2 STRING,
  col3 INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

 

CREATE TABLE csv_table_partitioned (
  col1 STRING,
  col2 STRING,
  col3 INT
)
PARTITIONED BY (part_col STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

 

  • 특징:
    • 텍스트 기반 포맷으로 간단하고 가독성이 좋음.
    • Hadoop에서 기본적으로 지원되며, 별도 라이브러리가 필요하지 않음.
    • 대량 데이터 처리에서는 비효율적(압축 없음, 스키마 없음).
  • 장점:
    • 데이터 적재와 읽기가 매우 간단하며, LOAD DATA 명령어 사용 가능.
  • 단점:
    • 데이터 스키마를 보장하지 않으며, 크기가 크고 느림.

 

 

 

 

4. Avro

create table avro_table (
col1 string, 
col2 string, 
col3 int
)
 STORED AS AVRO
;

 

 

  • 특징:
    • 행 기반 포맷으로 스키마를 데이터와 함께 저장.
    • JSON 기반으로 직렬화/역직렬화가 쉬움.
    • Hive 외에 Kafka, Spark 등 다양한 환경에서 사용.
  • 장점:
    • 스키마 변경에 유연하며, 스키마와 데이터를 함께 관리 가능.
    • 다양한 언어와 도구에서 지원됨.
  • 단점:
    • 스키마 저장으로 인해 데이터 크기가 커질 수 있음.
    • LOAD DATA를 지원하지 않음.

 

728x90

배경 : 

환경변수 설정 전에 백그라운드 실행(nohup) 한 스크립트가, 환경변수 설정을 여전히 적용하지 못함

 

 

해결 : 

 

환경변수 설정 후에는 반드시 스크립트를 재실행해야 그 환경변수가 적용된다.
이전에 nohup으로 실행한 스크립트는 당시의 환경변수로만 작동하며, 환경변수를 변경해도 이미 실행 중인 프로세스에는 반영되지 않는다.

1. 환경변수 적용 시점

스크립트에서 사용하는 환경변수는 스크립트 실행 당시의 쉘 환경에 따라 결정된다.

nohup을 통해 백그라운드에서 스크립트를 실행했을 때, 그 스크립트는 당시 실행된 쉘에서 설정된 환경변수를 그대로 사용한다.

2. 백그라운드에서 실행된 스크립트

백그라운드에서 실행된 스크립트는 실행 시점의 환경변수를 참조한다.

즉, nohup으로 실행한 스크립트는 실행 당시의 환경을 복사하여 사용.

그 후에 환경변수를 수정하더라도 이미 실행 중인 프로세스에는 그 변경 사항이 반영되지 않는다.

예를 들어:

  • nohup으로 스크립트를 실행할 당시, Hive 환경변수가 설정되어 있지 않았다면 그 스크립트는 환경변수가 없는 상태에서 실행되며, 이후 환경변수를 설정해도 이미 실행 중인 스크립트에는 영향을 주지 않음.
  • 다시 말해, 그 스크립트는 이전에 설정되지 않은 환경변수를 계속 사용.

3. 해결 방법

환경변수를 적용한 후에 스크립트를 제대로 실행하려면, nohup으로 다시 실행.

환경변수 변경 후에 실행하지 않으면, 스크립트는 이전에 적용된 상태로만 실행!

스크립트를 재실행하지 않는다면, 그 스크립트는 여전히 이전 환경에서 작동할 것이므로 hive -e 명령이 실패하거나, 올바른 Hive 설정을 찾지 못할 수 있다

728x90

 

오류 내용 :

Caused by: java.io.IOException: javax.security.sasl.SaslException: DIGEST-MD5: No common protection layer between client and server at org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:755) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1899) at org.apache.hadoop.ipc.Client$Connection.handleSaslConnectionFailure(Client.java:709) at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:813) at org.apache.hadoop.ipc.Client$Connection.access$3800(Client.java:363) at org.apache.hadoop.ipc.Client.getConnection(Client.java:1649) at org.apache.hadoop.ipc.Client.call(Client.java:1474)

 

 

For more detailed output, check the application tracking page: http://호스트:38088/cluster/app/application_1727638811672_0119 Then click on links to logs of each attempt. . Failing the application. at org.apache.tez.client.TezClientUtils.getAMProxy(TezClientUtils.java:945) at org.apache.tez.client.FrameworkClient.getProxy(FrameworkClient.java:187) at org.apache.tez.client.FrameworkClient.shutdownSession(FrameworkClient.java:176) at org.apache.tez.client.TezClient.stop(TezClient.java:738) at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.closeAndIgnoreExceptions(TezSessionState.java:480) at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.startSessionAndContainers(TezSessionState.java:473) at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.access$100(TezSessionState.java:101) at org.apache.hadoop.hive.ql.exec.tez.TezSessionState$1.call(TezSessionState.java:376) at org.apache.hadoop.hive.ql.exec.tez.TezSessionState$1.call(TezSessionState.java:371) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.lang.Thread.run(Thread.java:748) 2024-10-17 15:03:35,913 INFO client.TezClient: Could not connect to AM, killing session via YARN, sessionName=HIVE-4141fb36-7eda-485a-964d-2e41d72d815f, applicationId=application_1727638811672_0119 2024-10-17 15:03:35,917 INFO impl.YarnClientImpl: Killed application application_1727638811672_0119 2024-10-17 15:03:35,918 ERROR tez.TezSessionState: Failed to start Tez session org.apache.tez.dag.api.SessionNotRunning: TezSession has already shutdown. Application application_1727638811672_0119 failed 2 times due to AM Container for appattempt_1727638811672_0119_000002 exited with exitCode: 1 Failing this attempt.Diagnostics: [2024-10-17 15:03:35.842]Exception from container-launch. Container id: container_e16_1727638811672_0119_02_000001 Exit code: 1

 

 

 

 

 

 

 

그 전에 Hadoop 에서 고객사가 요청한 보안 사항을 적용 후 Hadoop 재실행을 했는데, 

Yarn 은 하지 않았다. 

 

 

Yarn 을 재실행하니 해결됐는데, 그 이유는 

 

YARN이 재시작되면서 클러스터 내 모든 노드 간의 통신과 인증이 다시 설정되었기 때문.
YARN의 NodeManagerResourceManager 간의 통신이나 인증 문제가 초기화되고, Hive와의 SASL 연결이 정상적으로 설정되었을 가능성이 크다.

 

 

 

또, Tez가 실행될 때 HDFS를 읽는 것이 일반적이며, Tez는 대규모 데이터 처리 엔진으로, 주로 HDFSYARN과 통합되어 동작하며, 데이터를 처리하는 과정에서 HDFS에 저장된 데이터를 읽고 쓸 수 있다.

728x90

- Kafka Connector?

 

Kafka ConnectorApache Kafka의 데이터 파이프라인을 구성하기 위한 구성 요소로, 외부 시스템(데이터베이스, 메시징 시스템, 파일 시스템 등)과 Kafka 클러스터 간의 데이터 전송을 자동화하는 역할을 합니다.

 

 

 

1. Connector 의 Log 및 설정 변경

 

- connector 설정 변경
vi /usr/local/kafka/config/connect-distributed.properties
# plugin.path=/usr/local/share/java,/usr/local/share/kafka/plugins,/opt/connectors,
plugin.path=/usr/local

- connector 로그 설정
vi /usr/local/kafka/config/connect-log4j.properties
log4j.rootLogger=INFO, stdout, connectAppender,file
log4j.appender.connectAppender.File=/usr/local/kafka/logs/connect.log

 

 

 

 

2. Connector 실행

$ bin/connect-distributed.sh config/connect-distributed.properties

 

 

 

 Connector가 실행되면 INFO 가 계속 뜨고, 

설정한 Log 에서도 동일하게 로그가 뜬다. 

 

 

만약 디비지움에서 성공적으로 커넥터에 연결 시 위처럼 연결 성공 로그가 뜨니 참고 ! 

728x90

Debezium 2.5 버전 기준으로 PostgreSQL은 10부터, Java는 11 이상부터 활용 가능합니다. 

kafka, Zookeeper 가 실행중임을 가정합니다.

 

 

 

 

1. Debezium Download

 

디비지움 공홈에서 plugin 다운받기!

- 필자는 debezium-connector-postgres-2.5.1.Final-plugin.tar 파일 활용했습니다.

https://debezium.io/releases/2.5/#installation

 

Debezium Release Series 2.5

Debezium is an open source distributed platform for change data capture. Start it up, point it at your databases, and your apps can start responding to all of the inserts, updates, and deletes that other apps commit to your databases. Debezium is durable a

debezium.io

 

 

 

 

 

2. Connector 설정 변경

(1) Connector 설정 변경

plugin.path 설정 변경해주기. (Debezium 설치된 상위디렉토리)

$ vi 카프카디렉토리/config/connect-distributed.properties

 

#plugin.path=/usr/local/share/java,/usr/local/share/kafka/plugins,/opt/connectors,
plugin.path=/opt/

 

 

(2) Connector 로그 설정

$ vi 카프카디렉토리/config/connect-log4j.properties

 

log4j.rootLogger=INFO, stdout, connectAppender,file
log4j.appender.connectAppender.File=/usr/local/kafka/logs/connect.log

 

 

커넥터 로그를 확인할 수 있게 file 옵션 추가 및 디렉토리 지정.

 

 

 

 

3. Connector 설정

Kafka 연결할 수 있는 Json 파일 설정

참고 : https://debezium.io/documentation/reference/stable/connectors/postgresql.html#postgresql-server-configuration

 

Debezium connector for PostgreSQL :: Debezium Documentation

Tombstone events When a row is deleted, the delete event value still works with log compaction, because Kafka can remove all earlier messages that have that same key. However, for Kafka to remove all messages that have that same key, the message value must

debezium.io

 

 

postgresql-connector-db.json

plugin.name 을 pgoutput 으로 설정해줘야 한다 !

 

 

 

4. Kafka Connector 실행

 

https://2youz.tistory.com/104

 

Kafka Connector 설정 / 시작 (PostgreSQL Debezuim)

- Kafka Connector? Kafka Connector는 Apache Kafka의 데이터 파이프라인을 구성하기 위한 구성 요소로, 외부 시스템(데이터베이스, 메시징 시스템, 파일 시스템 등)과 Kafka 클러스터 간의 데이터 전송을 자

2youz.tistory.com

 

 

5. Debezium Connector Curl 등록

 

 

 

6. 테스트 및 결과 확인

 

 

디비지움은 Insert, Delete, Update 만 추적 가능하고, 
payload 의 결과값을 보고 확인 가능!

 

해당 값을 보고 Topic 을 예쁘게 수정해서 다양하게 활용할 수 있다. !!!

728x90

NiFi 2.0에서 이전 버전에서 사용되었던 템플릿 기능이 제거되었습니다.

 

하지만, NiFi 2.0에서는 템플릿 기능을 대체할 수 있는 방법이 있습니다.

 

 

 

- Flow Definition Export

NiFi 2.0에서는 템플릿 기능을 대체하기 위해 데이터 흐름을 JSON 형식으로 내보내고 가져오는 기능이 있습니다.

 

 

 

 

1. Flow Export (내보내기)

  • NiFi UI에서 원하는 프로세스 그룹을 선택합니다.
  • 메뉴에서 "Download flow definition"  옵션을 사용해 흐름을 JSON 파일로 내보낼 수 있습니다.

 

 

 

import 할 그룹을 우클릭 → Download flow definition → with external services

 

 

  • With external services를 사용하는 경우:
    • 데이터베이스 연결, HDFS 설정, 또는 다른 컨트롤러 서비스를 포함한 복잡한 환경을 다른 NiFi 인스턴스에 그대로 옮기고자 할 때 유용합니다.
  • With external services를 사용하지 않는 경우:
    • 기본적인 데이터 흐름만을 공유하고, 외부 서비스는 현지 환경에 맞춰 설정하려는 경우에 유용합니다. 예를 들어, 다른 데이터베이스나 시스템을 사용하는 환경으로 흐름을 이식할 때 이 옵션을 해제할 수 있습니다.

 

 

 

 

2. Flow Import (가져오기)

 

 

 

Add Process group → Browse → 다운받았던 Json 파일 선택

 

 

 

 

 

 

 

이렇게 하면 손쉽게 import 기능 사용 가능!

 

 

+ 이전 버전에서도 있던 기능이기에 버전 상관없이 사용할 수 있습니다!

다만 모든 프로세서가 동작하는지는 확인이 필요할 듯 합니다.

 

728x90

du

현재 디렉토리 기준으로 하위 디렉토리의 용량을 확인하는 명령어

 

 

 

옵션

-a : 모든 파일표시

-b : 표시단위 (Byte)

-k : 표시단위 (KB)

-h : 사용량을 K(키로바이트), M(메가바이트), G(기가바이트) 등의 형태로 보여준다

-s : 총 사용량만 표시한다

 

 

 

 

자주 사용하는 옵션

du -sh ./*

: 하위 모든 디렉토리의 총 사용량을 표시단위까지 출력

728x90

 

trino 를 통해 select ~ from ~ order by 쿼리 실행 시 문제가 없지만, 

insert 할 때 insert ~ select ~ order by 실행 시 error 는 안나지만, 

sorting 이 정상적으로 실행되지않는 현상을 발견했다. 

 

찾아보니, trino 가 하위 쿼리의 order by 를 무시하고 (sorting 미지원) 쿼리를 실행한다!

 

 

참조 :

 

https://trino.io/blog/2019/06/03/redundant-order-by.html

 

Removing redundant ORDER BY

Optimizers are all about doing work in the most cost-effective manner and avoiding unnecessary work. Some SQL constructs such as ORDER BY do not affect query results in many situations, and can negatively affect performance unless the optimizer is smart en

trino.io

 

https://stackoverflow.com/questions/64901686/why-is-order-by-not-working-in-a-presto-query

 

Why is ORDER BY not working in a Presto query?

I have a fairly simple Presto query, that is not ORDERing by the column I specified: (SELECT tag_monitor_domains.property_name, count(*) as HourCount FROM pageviews INNER JOIN tag_monitor_do...

stackoverflow.com

 

728x90

 

들어가기에 앞서, Nifi 2.0 버전에서는 Hive3QL 만 지원됩니다. 

기존 ~HiveQL 은 주로 Hive 1.x 및 2.x를 지원하는데 사용되었지만, Hive3QLHive 3.x 버전만 지원합니다.

 

 

 

 

1. Hive Connection Pool ( Hive3ConnectionPool 2.0.0-M2 )

설정값 입력

  • Database Connection URL: jdbc:hive2://<hive-server-host>:<hive-server-port>/<database-name>
    • 예: jdbc:hive2://hive-server:10000/default
      ( 저는 DB 명 생략했습니다. )
  • Database Driver Class Name: org.apache.hive.jdbc.HiveDriver
  • Database Driver Location(s): file:///path/to/hive-jdbc-driver.jar
    • Hive JDBC 드라이버 파일의 경로를 입력합니다.
  • Database User: Hive 데이터베이스 사용자 이름
  • Password: Hive 데이터베이스 사용자의 비밀번호
  • Max Wait Time: 500 millis
  • Max Total Connections: 8
  • Validation Query: SELECT 1

 

 

 

 

2. Select 쿼리 실행 ( SelectHive3QL 2.0.0-M2 )

  • Select 쿼리는 SelectHive3QL 에서 바로 실행 가능합니다. 

 

 

 

 

 

 

3. Alter, Insert ... 쿼리 실행 ( PutHive3QL 2.0.0-M2 )

 

 

  • PutHive3QL  내 Properties 에는 직접 쿼리를 입력하는 칸이 존재하지 않으므로,
    쿼리를 FlowFile의 내용 또는 속성으로 제공하는 방법을 사용할 수 있습니다.
  • 저는 GenerateFlow 과 같은 타 프로세서를 통해 실행했습니다.
  • LogAttribute 는 실행 완료 확인용입니다. (선택)

 

(1) GenerateFlowFile

실행할 쿼리 입력

 

(2) PutHive3QL

입력받은 쿼리를 Hive 통해 실행

 

+ Recent posts