본문 바로가기

빅데이터/hive127

[hive] java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init> 오류 수정 문제 hive 2.3.9 버전을 실행하면서 다음과 같은 오류가 발생하였습니다. Exception in thread "main" java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.(Lcom/lmax/disruptor/EventFactory;ILjava/util/concurrent/ThreadFactory;Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/disruptor/WaitStrategy;)V at org.apache.logging.log4j.core.async.AsyncLoggerDisruptor.start(AsyncLoggerDisruptor.java:108) at org.apache.logging.lo.. 2024. 3. 30.
[hive] hive s3 연결시 hive 2.3.0, 3.0.0 이상에서 설정해야 하는 hive.conf.hidden.list 값 hive 에서 s3 를 연결할 때 core-site.xml 파일에 s3 설정 값을 정상적으로 입력하고, hadoop으로 데이터 조회를 확인하고, hive를 이용하여 테이블 생성까지 되는데, tez 나 mr을 이용한 작업을 돌릴 때 다음과 같은 오류가 발생하였습니다. Caused by: com.amazonaws.AmazonClientException: No AWS Credentials provided by SimpleAWSCredentialsProvider : org.apache.hadoop.fs.s3a.CredentialInitializationException: Access key, secret key or session token is unset at org.apache.hadoop.fs.s3a.AW.. 2024. 3. 5.
[hive] hive 의 mr 엔진의 오류 처리 - FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. DEFAULT_MR_AM_ADMIN_USER_ENV Hive 에서 MR 엔진으로 작업을 실행할 때 다음과 같은 오류가 발생하는 경우가 있습니다 FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. DEFAULT_MR_AM_ADMIN_USER_ENV 원인은 hadoop 라이브러리 충돌입니다. tez 0.9.2 버전에 들어있는 기본 라이브러리가 hadoop 2.7이고, 설치한 하둡 라이브러리가 2.10.2 이기 때문에 발생하는 오류입니다. 문제 해결을 위애서는 tez 에 들어있는 하둡 라이브러리를 삭제 하면 됩니다. rm hadoop-mapreduce-client-core-2.7.0.jar rm hadoop-mapreduce-client-commo.. 2024. 2. 23.
[hive] metastore 메트릭 설정 하는 방법 하이브 메타스토어의 metric을 설정하려면 hive-site.xml 파일에 다음 설정을 추가해야 합니다. 다음과 같이 설정하면 /tmp/report.json 위치에 5초에 한번 씩 메트릭 설정 파일을 생성합니다. 기본 설정은 json 형태의 파일이며, JMX 형태로 출력할 수도 있습니다. hive.metastore.metrics.enabled true hive.service.metrics.file.location /tmp/report.json hive.service.metrics.file.frequency 5 seconds 다음 위치에서 설정을 확인할 수 있습니다. https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#Con.. 2024. 1. 8.
[hive] hive 빌드 중 Connect to conjars.org:80 [conjars.org/54.235.127.59] failed: Operation timed out (Connection timed out) 오류 처리 hive 2.3.9 버전을 빌드 할 대 다음과 같이 conjars.org 에 접근하지 못하는 오류가 발생했습니다. 원인은 conjars.org 의 경로가 변경되어 발생하였습니다. 따라서 메이븐 리파지토리 경로를 수정해 주어야 합니다. https://conjars.wensel.net/ Conjars - Read-Only Mirror Conjars was a dead easy community jar repository for open source Cascading libraries and extensions. Conjars went online around 2011. Because Conjars was little used to host new projects, becoming a security risk.. 2023. 5. 28.
[hive] 오픈소스 hive 의 git 패치 적용 hive를 이용하다 보면 버그가 있어서 이를 패치해야 할 때가 있습니다. 이때는 git apply 명령어를 이용합니다. hive 3.1.2 소스에 HIVE-19316 오류를 패치하는 방법을 알아보겠습니다. https://issues.apache.org/jira/browse/HIVE-19316 [HIVE-19316] StatsTask fails due to ClassCastException - ASF JIRA issues.apache.org 하이브 3.1.2 소스를 사용중 위 오류가 발생하여 패치를 해야할 필요가 생겼습니다. 이때는 소스 Attatchments 의 가장 마지막 파일 HIVE-19316-branch-3.patch를 다운로드 합니다, 그리고 이 파일을 소스의 root 위치에 놓아두고 다음과 같.. 2023. 3. 6.
[hive] 하이브 서버2의 Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.fs.FsTracer.get 오류 수정 방법 hive 3에서 tez 0.10.1, hadoop 3.3.4와 연동 중 하이브 서버2를 실행했을 때 다음과 같은 오류가 발생하는 경우가 있습니다. 이 오류는 tez 가 하둡 3.1.3 라이브러리를 가지고 있기 때문입니다. 하둡과 하이브의 hadoop-hdfs-client 버전이 달라서 발생합니다. 하둡 라이브러리 버전을 일치하게 만들면 오류를 해결할 수 있습니다. java.lang.Error: Max start attempts 5 exhausted at org.apache.hive.service.server.HiveServer2.startHiveServer2(HiveServer2.java:1064) ~[hive-service-3.1.3.jar:3.1.3] at org.apache.hive.service... 2022. 8. 28.
[hive] 하이브 3.1.3 버전에서 java.lang.ClassCastException: org.apache.hadoop.hive.metastore.api.StringColumnStatsData cannot be cast to org.apache.hadoop.hive.metastore.columnstats.cache.StringColumnStatsDataInspector 오류 Hive 3.1.3 테이블에 데이터를 쓰고, 칼럼 stat 을 계산할 때 다음과 같은 오류가 발생하였습니다. 2022-08-16T16:25:52,536 ERROR [pool-9-thread-44] metastore.RetryingHMSHandler: java.lang.ClassCastException: org.apache.hadoop.hive.metastore.api.StringColumnStatsData cannot be cast to org.apache.hadoop.hive.metastore.columnstats.cache.StringColumnStatsDataInspector at org.apache.hadoop.hive.metastore.columnstats.merge.StringColumnSta.. 2022. 8. 19.
[hive] hive standalone metastore 에서 Drop Partition 처리시 Caused by: java.lang.UnsupportedOperationException 오류가 발생하는 경우 하이브 스탠드얼론 메타스토어(apache-hive-metastore-3.1.2-bin) 에서 파티션 DROP 시점에 다음과 같은 오류가 발생하였습니다. Caused by: java.lang.UnsupportedOperationException at org.apache.hadoop.hive.metastore.DefaultPartitionExpressionProxy.convertExprToFilter(DefaultPartitionExpressionProxy.java:34) at org.apache.hadoop.hive.metastore.PartFilterExprUtil.makeExpressionTree(PartFilterExprUtil.java:50) at org.apache.hadoop.hive.metas.. 2022. 8. 2.
[hive] hiveserver2 SSL 적용 및 비라인을 이용한 연결 방법 하이브 서버2에 SSL을 적용하는 방법은 하이브서버2와 하입브서버2의 웹서버에 SSL을 적용할 수 있습니다. 주의할 점은 SSL을 적용하면 http를 이용한 접근만 가능합니다. binary 포트는 사용할 수 없습니다. http로 접근할 때 http path도 정확하게 지정해야 합니다. 하이브 서버2 연결 비라인을 이용해서 SSL 적용된 하이브 서버2에 접근할 때는 다음과 같이 접근합니다. 하이브 서버2 관련 설정 https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-hive.server2.use.SSL Configuration Properties - Apache Hive - Apach.. 2022. 7. 15.
[hive] hive 2.3 버전 log4j2 취약점 처리 방안 hive 2.3 버전은 log4j 2.6 버전을 이용하기 때문에 CVE-2021-44228 취약점을 제거해야 합니다. 취약점 https://www.popit.kr/log4j-%EB%B3%B4%EC%95%88-%EC%B7%A8%EC%95%BD%EC%A0%90-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC-%EB%B0%8F-jenkins-%EC%84%9C%EB%B2%84-%ED%99%95%EC%9D%B8-%EB%B0%A9%EB%B2%95/?fbclid=IwAR0CBgT0ZP6eLCLpPKET7KfXX3av4NGQ37io5g2Wkj4yepI07wtsEliP-Eg log4j 보안 취약점 동작원리 및 jenkins 서버 확인 방법 | Popit 최근 log4j의 보안 취약점이 크게 이슈가 되고.. 2021. 12. 13.
[hive] hive 와 db 연결에서 Public Key Retrieval is not allowed 오류가 발생하는 경우 처리 mysql 8.x나 5.x에서 데이터베이스 접속 암호를 암호화 처리 하는 경우 다음과 같은 오류가 발생할 수 있습니다. 이럴 때는 데이터베이스 커넥션 스트링에 옵션을 추가하여 문제를 해결할 수 있습니다. 오류 : Public Key Retrieval is not allowed $ /opt/hive/bin/schematool -dbType mysql -initSchema Metastore connection URL: jdbc:mysql://xxx.xx:3306/db_name?useSSL=false Metastore Connection Driver : com.mysql.cj.jdbc.Driver Metastore connection User: sha256_user org.apache.hadoop.hive.m.. 2021. 10. 6.
[hive3] hadoop3와 hive3 연동에서 guava 오류 처리 하둡3와 하이브3의 연동에서 하이브3에서 사용하는 guava 라이브러리 버전(27.0-jre)과 하둡3에서 사용하는 guava 라이브러리(19.0)의 버전이 달라서 문제가 발생합니다. 또한 hive-exec-3.x.x.jar의 라이브러리 안에는 guava 라이브러리가 포함되어 있기 때문에, 이 라이브러리를 제거하고 다시 빌드해야만 오류를 해결할 수 있습니다. 하이브 소스를 다운 받아서 ql 라이브러리의 pom.xml 파일을 수정하고 빌드하면 문제를 해결할 수 있습니다. pom.xml 파일의 include를 수정하고 빌드합니다. include를 수정하고 빌드한후, 하둡의 guava 라이브러리와 하이브의 guava 라이브러리 버전을 맞춰주면 됩니다. 2021. 6. 17.
[tez] TEZ ui 설정 Tez는 Yarn 애플리케이션 히스토리 서버의 정보를 이용해서 TEZ UI를 제공하고, 이 서비스를 이용해서 작업 정보를 확인할 수 있습니다. TEZ-UI 다운로드 - 파일 다운로드 tez ui는 TEZ에서 제공하는 war 파일을 웹서버를 이용해서 실행하는 형태로 진행합니다. 0.9.2 버전은 war 파일을 기본적으로 제공하고, 0.10.0 버전은 war 파일을 따로 다운로드 받아야 합니다. 메이븐 리파지토리에서 파일을 다운로드 할 수 있습니다. 버전에 맞게 선택하여 다운로드 하시기 바랍니다. https://repo1.maven.org/maven2/org/apache/tez/tez-ui/ Central Repository: org/apache/tez/tez-ui repo1.maven.org Tomcat .. 2021. 6. 16.
[hive] hive의 spark 엔진에서 Execution Error, return code 30041 오류 하이브에서 spark 엔진으로 작업할 때 Execution Error, return code 30041 오류가 발생하면 이는 스파크 엔진의 익스큐터가 실행 될 때 메모리가 부족해서 발생하거나 코어 개수가 부족할 때 발생합니다. 설정을 이용해 스파크 설정을 추가합니다. 2021. 6. 1.
[hive] hive on spark 작업 중 create Spark client due to invalid resource request: Required executor memory (9671), overhead (1706 MB), and PySpark memory (0 MB) is above the max threshold 오류 하이브에서 작업 엔진을 이용하는 중에 스파크 익스큐터의 메모리가 부족하면 이런 오류가 발생할 수 있습니다. 하이브 설정에서 스파크 익스큐터의 메모리를 설정하면 됩니다. 이 경우 스파크 익스큐터의 메모리가 9671로 설정되어 있어서 부족하여 오류가 발생합니다. 따라서 스파크 드라이버와 익스큐터의 메모리를 줄여주면 됩니다. 또는 yarn 설정에서 컨테이너에 메모리를 설정할 수 있는 메모리를 늘려주면 됩니다. Launching Job 1 out of 1 In order to change the average load for a reducer (in bytes): set hive.exec.reducers.bytes.per.reducer= In order to limit the maximum number of r.. 2021. 5. 30.
[hive] hive3의 mr 엔진에서 java.lang.IncompatibleClassChangeError 오류 처리 하이브3에서 mr 엔진을 이용할 때 java.lang.IncompatibleClassChangeError 오류가 발생할 수 있습니다. 라이브러리가 맞지 않아서 발생하는 문제입니다. jersey-json-1.19.jar 라이브러리를 하이브 홈으로 복사합니다. jersey-json 라이브러리를 확인 {HADOOP_HOME}/share/hadoop/common/lib/jersey-json-1.19.jar {HIVE_HOME}/lib 로 복사 hive (default)> show databases; FAILED: Hive Internal Error: java.lang.IncompatibleClassChangeError(com.sun.jersey.json.impl.provider.entity.JSONRootEle.. 2021. 5. 27.
[hive] hive3에서 TEZ 연동시 java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument 오류 처리 하둡3, 하이브3에서 TEZ를 연동할 때 라이브러리가 맞지않아서 NoSuchMethodError 가 발생합니다. 하둡3는 guava가 27버전이고, 하이브3는 guava가 19버전이라서 발생합니다. 따라서 라이브러리를 맞춰주면 문제가 해결됩니다. hadoop 3.2.1 guava-27.0 hive 3.1.2 guava-19.0 해결방법 {HIVE_HOME}/lib/guava-19.0.jar 삭제 {HADOOP_HOME}/share/hadoop/common/lib/guava-27.0-jre.jar 를 {HIVE_HOME}/lib/ 에 복사 2021. 5. 27.
[hive-tez] 파일 개수와 사이즈에 따른 그룹핑 사이즈 설정과 처리 속도 차이 하이브를 이용해서 데이터를 처리할 때 파일의 개수와 사이즈가 중요합니다. 동일한 쿼리에서도 설정에 따라 속도차이가 많이 날 수 있습니다. SELECT A, count(*) FROM tbl GROUP BY A ORDER BY A; 칼럼 A로 파티셔닝 파티션당 60 여개의 ORC 파일 파일당 10~20KB 이 상황에서 TEZ엔진 기본설정으로 쿼리를 실행하면 2148초가 걸립니다. 파일의 사이즈가 작아서 매퍼가 작게 생성되지만, ORC 파일의 특성상 하나의 파일에 많은 데이터가 들어가게 되고, 이 데이터를 모두 처리하는데 많은 메모리가 소모되기 때문입니다. 이런 경우 TEZ엔진의 그룹핑 사이즈를 조절하여 매퍼의 개수를 늘려서, 하나의 매퍼가 처리하는 데이터를 줄이면 속도가 빨라지는 것을 확인할 수 있습니다. .. 2021. 2. 16.
[hive] MR, TEZ 실행엔진 라이브러리 업로드 위치 설정 하이브 실행 엔진을 설정하고 맵리듀스, 테즈를 실행하기 위해서는 실행을 위한 라이브러리를 HDFS에 업로드 하고 설정파일에 각 라이브러리의 위치를 지정해야 실행할 수 있습니다. 다음 파일의 위치는 HDFS 상의 위치입니다. MR 엔진: mapred-site.xml mapreduce.application.framework.path /hadoop/apps/mapreduce/hadoop-version.tar.gz#mapreduce TEZ 엔진: hive-site.xml tez.lib.uris /hadoop/apps/tez/tez.tar.gz 2020. 9. 29.
[hive] Gzip파일 처리 중 Unexpected end of input stream 오류 해결 방법 하이브에서 Gzip 파일로 작업 할 때 0byte 파일이 존재하면 아래와 같이 Unexpected end of input stream 오류가 발생합니다. Caused by: java.io.EOFException: Unexpected end of input stream at org.apache.hadoop.io.compress.DecompressorStream.decompress(DecompressorStream.java:165) at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:105) at java.io.InputStream.read(InputStream.java:101) at org.apache.hadoop.. 2020. 7. 17.
[hive] 맵 조인 처리 기준 사이즈 확인 맵 조인은 작은 크기의 테이블을 메모리에 적재하여 조인을 처리합니다. 이 때 테이블 데이터의 크기는 자바 객체의 사이즈입니다. 실제 파일의 사이즈와 다릅니다. 예를 들어 다음의 테이블 table_orc, table_txt는 동일한 데이터를 보관하고 있는 테이블입니다. 65,454개의 데이터를 저장 형식만 다르게 하여 저장한 것입니다. 맵 조인에는 객체 사이즈(rawDataSize)를 이용하기 때문에 hive.auto.convert.join.noconditionaltask.size를 설정할 때 객체 사이즈 기준으로 설정해야 합니다. 기본 설정이 10MB 일때 table_orc는 셔플 조인으로 처리되고, table_txt는 맵 조인으로 처리됩니다. table_orc를 맵조인으로 처리하기 위해서는 hive.a.. 2020. 6. 11.
[hive] 맵조인과 셔플조인(Map Join vs Shuffle Join) hive의 맵조인과 셔플조인의 차이를 확인해 보겠습니다. 다음의 조인 쿼리에서 table_a는 14.7G이고, table_b는 5KB입니다. 이 테이블을 조인할 때 각 조인에 따른 성능을 확인해 보면 셔플 조인일 때는 리듀서 단계가 추가되고 맵 조인에 비하여 2배의 시간이 더 걸리는 것을 확인할 수 있습니다. # table_a와 table_b를 조인하여 join_test 테이블 생성 # table_a: 14.7 GB # table_b: 5 KB CREATE TABLE join_test AS select a.deviceid, b.cnty_cd from db_a.table_a a, db_b.table_b b where a.date = '20191020' and a.code = b.code_cd ; 작업 시간.. 2020. 6. 9.
[hive] collect_list()와 같은 UDAF 함수의 GC 오류 해결 방법 하이브 기본 UDAF를 사용하는 중에 Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded 오류가 발생하는 경우가 있습니다. collect_list(), collect_set()을 이용하는 경우 발생할 수 있는데 너무 많은 데이터가 집계되어 JVM의 힙사이즈를 넘어설 때 많이 발생합니다. 이럴 때는 하나의 맵에서 처리하는 데이터를 줄이고, 컨테이너의 메모리를 늘려서 문제를 해결할 수 있습니다. -- 매퍼 개수 조정 set mapreduce.input.fileinputformat.split.maxsize=8000000; set mapreduce.input.fileinputformat.split.minsize=4000000; set tez.gr.. 2020. 6. 1.
[hive] 하이브 매크로(macro) 하이브는 매크로를 이용할 수 있습니다. 생성 기본 문법은 아래와 같습니다. 칼럼 이름을 표현식에 사용할 수 있습니다. 기본 빌트인 함수를 이용하여 매크로를 생성할 수도 있습니다. 매크로는 현재 세션에만 유지됩니다. CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression; 매크로를 생성하는 방법은 아래와 같습니다. CREATE TEMPORARY MACRO fixed_number() 42; CREATE TEMPORARY MACRO string_len_plus_two(x string) length(x) + 2; CREATE TEMPORARY MACRO simple_add (x int, y int) x + y; CREATE TEMPORARY.. 2020. 4. 22.
[hive] This command is not allowed on an ACID table default.table_name with a non-ACID transaction manager 오류 해결 방법 하이브 트랜잭션 테이블을 조회할 때 발생하는 오류는 아래 두 가지 입니다. 트랜잭션 테이블은 현재 세션이 트랜잭션 세션이어야 하고, hive.support.concurrency=true일 때만 조회할 수 있습니다. This command is not allowed on an ACID table default.table_name with a non-ACID transaction manager FAILED: RuntimeException [Error 10264]: To use DbTxnManager you must set hive.support.concurrency=true -- 설정을 하지 않은 상태에서 ACID 테이블인 table_name을 조회할 때 오류 발생 hive (default)> select .. 2020. 3. 17.
[hive] 구체화 뷰(Materialized View) 하이브 3.0에서 제공하는 구체화 뷰(Materialized Views)에 대해서 알아보겠습니다. 뷰(View)는 논리적인 테이블입니다. 데이터 검색을 위한 구조는 가지고 있지만 실제 데이터는 가지고 있지 않습니다. 구체화 뷰(M-View)는 물리적인 테이블입니다. 구체화 뷰를 생성할 때 데이터를 별도의 저장공간에 저장하여 뷰를 사용할 때 속도를 높일 수 있습니다. 보통 데이터웨어 하우스에서 쿼리의 속도를 높이는데 많이 사용됩니다. 하이브에서 규체화 뷰는 LLAP, Calcite(CBO) 기능과 협력하여 쿼리의 속도를 높이는 데 사용됩니다. 구체화 뷰 생성 구체화 뷰는 생성되는 시점에 테이블의 데이터를 취합하여 데이터를 저장합니다. 이 과정에서 맵리듀스 작업이 발생합니다. 구체화 뷰를 저장하는 기본 서데.. 2020. 1. 21.
[hive] UDF에서 발생하는 argument type mismatch 오류 수정 hive udf에서 java.lang.illegalargumentexception argument type mismatch 오류가 발생하는 경우는 파라미터로 전달하는 타입이 설정과 달라서 발생합니다. 아래와 같은 경우 evaluate UDF의 입력값으로 String 이 전달되어야 하는데 다른 타입이 전달되면 오류가 발생합니다. 일반적인 경우에는 타입이 다르다는 것을 알 수 있지만 함수의 중첩으로 처리하는 경우에는 이 오류를 정확하게 확인하기가 어렵습니다. public class SampleUDF extends UDF { public Text evaluate(String text) { // 입력받은 문자를 대문자로 반환 return new Text(text.toUpperCase()); } } 함수의 중첩 .. 2020. 1. 14.
[hive] 벡터화(vectorized) 처리 하이브 성능 향상의 한 방법인 벡터화(vectorized) 처리는 한 번에 처리하는 데이터의 양을 늘려서 CPU 사용률을 높이고, 처리속도를 빠르게 하는 기법입니다. 검색, 필터, 집계, 조인 처리에서 사용되고, 한 번에 1024개의 행을 동시에 처리하여 속도를 높입니다. 벡터화 설정을 하면 1024행(row)의 블록으로 한번에 작업을 처리합니다. 하나의 블록에서 열(column)은 배열로 처리됩니다. 아래의 클래스와 같이 칼럼이 ColumnVector클래스 배열로 한 번에 읽어서 처리합니다. 조회, 필터링 등에 벡터화를 이용하면 한번에 처리하는 작업이 증가하여 속도가 빨라지게 됩니다. 16억 건의 데이터를 이용해서 count명령을 처리한 결과 벡터화 처리를 하지 않으면 67.6초, 벡터화 처리를 하면 .. 2020. 1. 7.
[hive] 하이브의 조인방식(hive join) 하이브의 세가지 조인 방식에 대해서 알아보겠습니다. 셔플조인 매퍼에서 각 테이블을 읽고 셔플 단계에서 조인되는 키를 기준으로 파티션닝후 셔플을 진행하여 각 리듀서에서 조인을 수행 어떤형태의 데이터 크기와 구성에도 사용 가능 가장 자원을 많이 사용하고 느린 조인 방식 맵조인 (브로드캐스트 조인, 맵사이드 조인) 작은 사이즈의 테이블이 메모리에 올라가고, 각 매퍼에서 조인을 수행후 결과를 반환하는 방식 가장 큰 테이블에서 가장 빠른 단일 스캔 작은 테이블은 메모리에 들어갈 정도로 작아야 함 -- 맵조인 사용여부 설정, 3개 이상의 테이블을 조인할 때 맵조인 사용여부 설정하는 옵션 hive> set hive.auto.convert.join=true; hive> set hive.auto.convert.join... 2020. 1. 6.