JSON 형태의 문자열로 들어오는 칼럼을 UDTF 함수를 이용하여 테이블로 만들어야 할 때 다음과 같이 사용할 수 있다. JSON 문자열의 데이터를 찾는 것은 get_json_object()를 이용하고, inline() 함수를 이용하여 테이블화 한다. hive> SELECT inline(array( struct(get_json_object(str, "$.key1")) > , struct(get_json_object(str, "$.key2")) )) > FROM ( SELECT '{ "key1": "a", "value1" : "1", "key2": "b", "value2" : "2" }' AS str ) t > ; OK a b Time taken: 0.031 seconds, Fetched: 2 row(s)
우지에서 작업중 코디네이터, 워크플로우에서 오류가 발생하면 작업을 새로 걸지 않고, 리런 커맨드를 이용하여 재작업 할 수 있습니다. 코디네이터 리런$oozie job -rerun [-nocleanup] [-refresh] [-action 1, 3-4, 7-40] (-action or -date is required to rerun.) [-date 2009-01-01T01:00Z::2009-05-31T23:59Z, 2009-11-10T01:00Z, 2009-12-31T22:00Z] (if neither -action nor -date is given, the exception will be thrown.) # 3번 액션 재작업 oozie job -rerun [coord-id] -action 3 # 3~10..
하둡 HDFS는 동작하면서 HDFS에 파일을 생성, 삭제 하는 등의 작업에 대한 트랜잭션 로그를 기록합니다. 해당 로그는 Edits_XXX 이름으로 네임노드의 dfs.namenode.edits.dir 에 설정된 위치에 저장됩니다. 이 트랜잭션 로그는 트랜잭션이 많아질 수록 빠르게 해당 위치에 쌓이게 됩니다. 로그는 세컨더리네임노드를 이용하여 정리할 수 있습니다. 세컨더리네임노드는 다음과 같이 실행합니다. > hdfs secondarynamenode 세컨더리 네임노드는 설정값에 따라 기본 한시간에 한번씩 Edits 로그를 확인하면서 설정값이상의 파일이나, 트랜잭션 횟수를 넘어서면 Edits 파일을 정리하여 사이즈를 줄여줍니다. dfs.namenode.checkpoint.period: 체크포인트 확인 시간 ..
TEZ 엔진을 이용할 때 메모리 부족 오류가 발생하는 곳은 AM과 MR 작업 중에 발생한다. AM은 다음의 설정으로 메모리를 설정한다. // AM의 메모리 set tez.am.resource.memory.mb=2048; // AM이 사용할 힙메모리 사이즈(tez.am.resource.memory.mb의 80%) set tez.am.java.opts=-Xmx1600m; 그리고 MR 작업에서 메모리를 설정하는 방법은 다음과 같다. // tez 작업을 진행하는 컨테이너의 메모리 크기 set hive.tez.container.size=2048; // 컨테이너에서 사용할 수 있는 힙의 메모리 크기 set hive.tez.java.opts=-Xmx1600m; // hive.tez.container.size의 80%..
우지의 cli 명령어를 실행할 때 OOZIE_URL이 설정되어 있지 않고, 프로퍼티로 -oozie 값을 전달하지 않으면 다음의 오류가 발생한다. java.lang.IllegalArgumentException: Oozie URL is not available neither in command option or in the environment at org.apache.oozie.cli.OozieCLI.getOozieUrl(OozieCLI.java:711) at org.apache.oozie.cli.OozieCLI.createXOozieClient(OozieCLI.java:911) at org.apache.oozie.cli.OozieCLI.jobsCommand(OozieCLI.java:1544) at org..
하이브의 tez 실행엔진을 이용할 때 아래의 옵션을 이용하면 실행의 각 단계에서 걸리는 시간을 확인할 수 있다. hive.tez.exec.print.summaryDefault Value: falseAdded In: Hive 0.14.0 with HIVE-8495If true, displays breakdown of execution steps for every query executed on Hive CLI or Beeline client. 옵션을 true 로 설정하고 쿼리를 실행하면 다음과 같이 실행의 각단계에서 걸리는 시간을 확인할 수 있다. 이때 각 단계에서 걸리는 시간을 이용하여 쿼리를 튜닝할 수 있다. Launching Job 1 out of 1 Status: Running (Executing ..
보통 윈도우에서 개발하고, 리눅스에서 우지를 실행하게 되는데윈도우 파일 포맷으로 저장한 파일을 리눅스에서 실행하려고 하면 아래와 같이 파일을 찾지 못하는 오류가 발생한다. /usr/bin/env: python : No such file or directory Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1] 또 파일 포맷의 이상일 때 다음과 같은 오류가 발생할 수도 있다. 윈도우의 줄바꿈은 CR+LF(/r/n)이고, 유닉스의 줄바꿈은 LF(/n)라서 오류가 발생한다. /bin/sh^M: bad interpreter: No such file or directory 이럴때 파일을 vi 로 열어..
hive를 이용하여 MR 작업 처리중 shuffle 과정에서, OutOfMemory 오류가 발생하면 다음과 같이 수정하면 된다. Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#12 at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:377) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) at java.security.AccessCo..
scala 2.11 버전에서 java 9으로 빌드시 다음의 오류가 발생하였다. [INFO] Compiling 3 source files to C:\ScalaSample\target\classes at 1528696267166[ERROR] error: scala.reflect.internal.MissingRequirementError: object java.lang.Object in compiler mirror not found.[ERROR] at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:17)[ERROR] at scala.reflect.internal.MissingRequirementError$..
스칼라(scala) 개발을 연습하기 위해서 이클립스에 스칼라 개발 환경을 설정하고, 빌드하여 jar 파일을 만드는 것까지 설정하는 방법을 정리해 보겠다. 우선 이클립스를 설치한다. 저는 가장 최신버전인 4.7 Oxygen 버전을 설치하였다. 그리고 Help -> Eclipse Market Place 에서 scala를 검색하여 Scala IDE 4.7.x 를 설치한다. 이 플러그인을 설치하면 스칼라 라이브러리도 설치된다. 설치후 File -> New -> Scala Project 를 선택하여 스칼라 프로젝트를 생성한다. 그리고 Scala Library container에서 오른쪽 버튼을 클릭하여 properties 로 들어가서 스칼라 라이브러리를 2.11로 변경한다. 현재 스파크의 스칼라 버전이 2.11이..
기본적으로 하이브는 데이터베이스의 이름을 변경하는 것은 지원하지 않는다. 따라서 메타스토어(metastore)의 테이블에 있는 하이브 테이블의 이름을 수정하면 된다. 메타스토어는 ID 기준으로 처리 되기 때문에 메타스토어의 이름을 변경하면 적용된다. 우선 하이브 메타스토어(metastore)에 mysql 로 접속한다. * 설정한 기준에 따라 다르게 접속하면된다. * 메타 스토어의 주소를 모르면 hive-site.xml 에 설정된 javax.jdo.option.ConnectionURL 정보를 확인한다. 하이브 DB를 보면 DBS 테이블이 DB 관련 정보이다. mysql> desc DBS;+-----------------+---------------+------+-----+---------+-------+|..
Hive 트랜잭션 하이브는 0.13버전부터 트랜잭션을 지원한다. 파일 수정이 없는 HDFS의 특성상 모든 기능이 완벽하게 지원되지 않고, 기본(default) 트랜잭션 설정은 off로 되어 있다. BEGIN, COMMIT, ROLLBACK은 아직 지원하지 않음, 현재는 auto-commit 만 지원 ORC 파일 포맷, 버켓팅 설정이 된 매니지드 테이블에서만 지원 Non-ACID 세션에서는 ACID 테이블에 접근 불가 상세한 내용은 Hive Wiki를 참조하면 된다. 트랜잭션 구조 HDFS는 파일의 변경/수정을 지원하지 않는다. 따라서 HDFS에서 데이터의 수정, 삭제를 지원하기 위해서 데이터를 베이스(base) 파일에 기록하고, 트랜잭션이 발생할 때마다 델타(delta) 파일에 내용을 기록한다. 그리고 ..
Yarn의 설정은 다음과 같다. yarn.nodemanager.resource.memory-mb- 노드의 메모리 크기 설정 yarn.nodemanager.resource.cpu-vcores- 노드의 코어 개수 설정 yarn.scheduler.minimum-allocation-mbyarn.scheduler.maximum-allocation-mb- RM이 컨테이너당 할당하는 최소, 최대 메모리 yarn.scheduler.minimum-allocation-vcoresyarn.scheduler.maximum-allocation-vcores- RM이 컨테이너당 할당하는 최소, 최대 코어 매퍼 설정은 다음과 같다 a. mapreduce.map.memory.mbb. mapreduce.map.cpu.vcoresc. m..
하이브에서 다음과 같은 오류가 발생하면 이는 다이나믹 파티션 처리중 생성가능한 파티션 개수 이상의 파티션이 생성되어서 발생하는 것이다. 아래 오류의 내용처럼 해당 설정을 늘여주면 된다. Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [Error 20004]: Fatal error occurred when node tried to create too many dynamic partitions. The maximum number of dynamic partitions is controlled by hive.exec.max.dynamic.partitions and hive.exec.max.dynamic.partitions.pernode. ..
빅데이터 관련 기술 빅데이터는 수집, 정제, 적재, 분석의 단계를 거치면서 다양한 기술을 이용하여 처리 된다. Hadoop HDFS, Mapreduce로 구성된 빅데이터 처리 기술 자바로 구현된 대규모 분산처리를 위한 오픈소스 프레임워크 HBase HDFS 기반의 칼럼 기반 데이터베이스 HDFS 위에서 동작하는 NoSQL 데이터 베이스 실시간 조회 및 업데이트 가능 https://hbase.apache.org/hbase(main):003:0> describe 'test' Table test is ENABLED test COLUMN FAMILIES DESCRIPTION {NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION..
빅데이터 정의 빅데이터는 큰 사이즈의 데이터로부터 유의미한 지표를 분석해내는 것 으로 정의할 수 있다. 데이터 규모에 초점을 맞춘 정의 기존 DB 관리도구의 수집, 저장, 관리, 분석 역량을 넘어서는 데이터 업무 수행 방식에 초점을 맞춘 정의 다양한 종류의 대규모 데이터로부터 가치를 추출하고, 데이터의 빠른 수집, 발굴, 분석을 지원하도록 고안된 기술 및 아키텍처 출현배경 데이터 양의 증가 / 데이터 저장기술 발달 SNS등장, 스마트 기기 보급 디지털 저장기술과 장치의 발달 경제적 타당성 증가 / 저장장치의 가격 인하 1980년대 1G 10억 이상이던 메모리 가격이 2010년대 100원 미만으로 떨어짐 데이터 처리기술 발달 분산 병렬처리 기술의 발달로 합리적인 시간 안에 데이터 분석이 가능해짐 CPU 발..
hive 처리중 tez의 AM 힙메모리 옵션을 다음과 같이 설정하였더니, 아래의 오류가 발생하였다. set tez.am.java.opts=-Xmx1600; 컨테이너를 실행하는 중에 오류가 발생하였는데,메모리 설정에서 m을 빠트려서 JVM 실행중 오류가 발생한 것이다. 다음의 오류가 발생할 때는 JVM 옵션에 이상은 없는지 확인하면 될 것이다. 그리고 위의 옵션은 다음과 같이 수정한다. set tez.am.java.opts=-Xmx1600; --> set tez.am.java.opts=-Xmx1600m; Container exited with a non-zero exit code 1]], TaskAttempt 2 failed, info=[Container container_1511744605848_9336..
ORC는 칼럼 기반의 파일 저장방식으로, hive에 적용하면 성능을 개선할 수 있다. 사용방법은 다음과 같이 STORED AS를 ORC로 선언해주면 된다. 그리고 TBLPROPERTIES에 설정정보를 입력할 수 있다. CREATE TABLE table1( col1 string, col2 string, col3 string, col4 string)STORED AS ORCTBLPROPERTIES ("orc.compress"="ZLIB","orc.compress.size"="262144","orc.create.index"="true","orc.stripe.size"="268435456","orc.row.index.stride"="3000","orc.bloom.filter.columns"="col1,col2")..
우지의 액션을 실행하는 우지 런처도 MR 잡으로 실행된다. 우지 런처의 메모리를 설정하는 옵션은 다음을 설정하면 된다. oozie.launcher.mapreduce.map.memory.mb=768oozie.launcher.mapreduce.map.java.opts=-Xmx512moozie.launcher.yarn.app.mapreduce.am.resource.mb=1024oozie.launcher.yarn.app.mapreduce.am.command-opts=-Xmx768m http://www.openkb.info/2016/07/memory-allocation-for-oozie-launcher-job.html
맵리듀스는 8단계로 나누어져 있다고 할 수 있습니다. 각 단계는 작업에 따라서 생략될 수도 있습니다. 입력 -데이터를 입력하는 단계 -텍스트, csv, gzip 형태의 데이터를 읽어서 맵으로 전달 맵(Map) -입력을 분할하여 키별로 데이터를 처리 컴바이너(Combiner) -네트워크를 타고 넘어가는 데이터를 줄이기 위하여 맵의 결과를 정리 -로컬 리듀서라고도 함 -컴바이너는 작업의 설정에 따라 없을 수도 있음 파티셔너(Partitoner) -맵의 출력 결과 키 값을 해쉬 처리하여 어떤 리듀서로 넘길지를 결정 셔플(Shuffle) -각 리듀서로 데이터 이동 정렬(Sort) -리듀서로 전달된 데이터를 키 값 기준으로 정렬 리듀서(Reduce) -리듀서로 데이터를 처리하고 결과를 저장 출력 -리듀서의 결과를..
hive의 함수를 테스트할 때 array, map, json 문자열을 이용하여 값을 테스트 해야 하는 경우가 있다. 이럴때 임시로 문자열을 이용하여 데이터를 생성하고 테스트하면 편리하다. 다음과 같이 사용한다. select array(1,2,3)[2]; select array("a","b","c")[1]; select str_to_map("key1:value1,key2:value2", ",", ":")['key2']; SELECT get_json_object('{"store": {"fruit":\[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}], "bicycle":{"price":19.95,"color":"red"} }, "email":"amy@only..
hive 쿼리중 rank() 함수를 이용하였는데 다음과 같은 오류가 발생하였다. json을 UDTF를 이용하여 변환하는 함수 였는데 오류가 발생하였다. 그래서 cbo를 false 로 설정했더니 처리 되었다. explain 으로 확인결과 Reduce 단계가 하나 빠진것이 해결된 것 같다. 정확한 원인은 알 수 없으나 검색결과는 bug 일 가능성도 있는 것 같다. 혹시 모르니 cbo 를 false 로 설정해보길 권한다. set hive.cbo.enable=false; Caused by: java.lang.RuntimeException: Failed to load plan:org.apache.hive.com.esotericsoftware.kryo.KryoException: java.lang.IndexOutOf..
hive의 쿼리에서 in 을 이용하여 데이터를 비교할 때 다음과 같이 transform 구문을 이용하여 처리하였다.그랬는데 비교부분 테이블의 파티션이 늘어나면서 다음과 같이 BufferOverflowException 이 발생하였다. SELECT * FROM table1 WHERE create_date in ( select explode( split( yyy.date_list, ',' ) ) ... ) 파티션의 정보를 비교하다가 버퍼 오퍼플로우 익셉션이 발생하였다. 2018-09-09T01:11:11,111 WARN [pool-5-thread-200([])]: metastore.MetaStoreDirectSql (MetaStoreDirectSql.java:executeWithArray(1750)) - Fa..
하이브의 데이터를 csv 형태로 export 하는 방법은 다음과 같다. 다음과 같이 INSERT DIRECTORY 문을 이용화여 파일로 데이터를 작성하는 방법이다. 데이터 양이 작을 경우에는 LOCAL 문을 추가하여 로컬에 데이터를 저장해도 되고, 데이터 양이 많다면 hdfs 에 데이터를 저장하면 된다. hive -e "INSERT OVERWRITE [LOCAL] DIRECTORY 'hdfs://hdfs_location'ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','STORED AS TEXTFILESELECT * FROM temp;" * cli 환경에서 상요할 때는 \ 를 추가하여 개행이 되도록 설정 칼럼 헤더를 파일에 추가해야 한다면 다음과 같이 처리하는 방법도 있다. ..
Hive ACID 0.13버전부터 ACID를 지원하곡, 0.14버전부터 Update, Delete를 포함한 DML을 지원 ORC 일때만 지원 CREATE TABLE table1 ( ) SOTRED AS ORC TBLPROPERTIES ("transactional"="true") 제약사항 auto-commit 으로 처리 ORC 포맷만 지원 버켓팅 되어야 함 Managed 테이블만 가능 External 테이블은 Compactor 가 제어할 수 없기 때문 Non-ACID 세션에서는 ACID 테이블에 접근 불가 기본 설계 테이블이나 파티션은 base 파일의 집합으로 저장 새로운 레코드, update, delete 에 대해서는 delta 파일로 저장 읽는 시점에 delta 파일과 합쳐서 새로운 파일 생성 Comp..
조인 처리시 힌트를 이용하여 조인 처리를 지시할 수 있는데, 맵조인이 되지 않아 로그를 확인해 보니 cbo 를 이용할 때는 힌트를 이용할수 없다는 에러메시지가 나온다. Hint specified for /*+ MAPJOIN(TABLE) */. Currently we don't support hints in CBO, turn off cbo to use hints. 따라서 다음의 옵션로 cbo 처리를 끄고 나니 오류가 사라졌다. SET hive.cbo.enable=false; https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins#LanguageManualJoins-MapJoinRestrictions
AmbariHadoop HDFS, Hadoop MapReduce, Hive, HCatalog, HBase, ZooKeeper, Oozie, Pig 및 Sqoop에 대한 지원을 포함하여 Apache Hadoop 클러스터를 프로비저닝, 관리 및 모니터링하기위한 웹 기반 도구. 히트 맵과 같은 클러스터 상태를 확인하고 MapReduce, Pig 및 Hive 애플리케이션을 시각적으로 볼 수있는 기능을 제공하는 대시 보드를 제공하여 성능 특성을 사용자에게 친숙한 방식으로 진단 Avro데이터 직렬화 시스템다른 시스템 사이의 데이터를 교환할 수 있게 해주는 시스템
스파크의 RDD, DataFrame, DataSet의 차이에 대해서 RDD, DataFrame, DataSet RDD Spark 1.0에서 소개 Java, Scala의 객체를 처리 하는 방식으로 처리 가능 transformation 함수들을 제공하고 각 함수의 결과를 RDD로 생성 action 함수가 호출되어야 실제 동작 rdd.filter(.age >21).map(.last).saveAsObjectFile("result.txt") DataFrame Spark 1.3에서 프로젝트 텅스텐의 일부로 소개 데이터를 스키마 형태로 추상화 하여 처리 Catalyst 옵티마이저에 의해 효율적으로 처리 df.filter("age > 21") df.filter(df.col("age").gt(21)) DataSet 스파..
RDD operationRDD를 제어하는 API operation은 크게 2개의 타입Transformation: RDD에서 새로운 RDD를 생성하는 함수Action: RDD에서 RDD가 아닌 타입의 data 로 변환하느 함수들 RDDMR의 단점복잡하고 Multi-Stage 한 처리가 느림interactive 하고 ad-hoc 한 쿼리 실행이 느림효율적인 데이터 공유 도구를 생성하기 위해 나옴MR은 중간 단계를 파일을 이용하기 때문에 IO 비용이 많이 들어감스파크는 하드디스크 대신 RAM을 이용하자 문제가 생기면 복구는 Lineage를 생성하여 새로 만들자 동작의 순서를 기록해 DAG로 표현한 것을 Lineage라고 함RAM을 Read-Only로 사용 Spark의 Operationtransformation..
- Total
- Today
- Yesterday
- build
- bash
- SPARK
- 정올
- 백준
- AWS
- 하이브
- Tez
- oozie
- emr
- Python
- 알고리즘
- SQL
- 오류
- Hadoop
- HDFS
- ubuntu
- 하둡
- yarn
- mysql
- nodejs
- 파이썬
- S3
- java
- airflow
- 다이나믹
- Linux
- HIVE
- error
- hbase
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |