본문 바로가기

빅데이터405

[oozie] 우지 Waiting 잡 개수 설정 우지 코디네이터에 를 설정하면 지정한 파일이 생성되기 까지 잡을 대기(WAITING) 하게 할 수 있다. 이때 기본적으로 대기잡은 12개로 설정되어 있고 코디네이터에 설정된 정보만큼 기다리다가 TIMEOUT으로 넘어가면서 다음 잡이 생성되게 된다. 이 WAITING 잡의 개수를 다음의 설정으로 조절이 가능하다. oozie.service.coord.default.throttle = 12 https://oozie.apache.org/docs/4.0.0/oozie-default.xml 2017. 4. 21.
[hive] 하이브 테이블에 struct 같은 복합 데이터 load 하는 법 하이브 테이블에 struct 같은 복합 데이터를 입력하는 방법은,ROW FORMAT의 MAP KEY 딜리미터를 이용하여 값을 구분해주면 된다. 2017. 4. 12.
[hive] UDTF 예제 UDTF는 한행을 입력받아서 여러 행을 반환하는 함수이다. take in a single input row and output a single output row 크게 4가지 종류가 있다. explode, inline, posexplodearray, map, struct 형식의 데이터를 테이블 json_tuplejson 문자열을 파싱하여 반환get_json_object() 와 비슷한데 속도가 빠르다. 대신 xpath를 이용한 처리는 안됨url_tupleurl 문자를 파싱HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE 를 반환stack전달한 데이터를 여러개의 행으로 반환 > select * from employee;OKid-1john["a","b","c","d"]{.. 2017. 4. 12.
[hive][error] hive로 MR 작업중 Illegal mix of collations A and B for operation '=' ... 오류 하이브 처리중 다음과 같은 오류가 발생할 때가 있다. Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Illegal mix of collations (latin1_bin,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:479)at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executePreparedQuery(AbstractQueryProtocol.ja.. 2017. 4. 11.
[hadoop][fsck] HDFS의 상태를 점검 할 수 있는 명령어 HDFS의 fsck 명령- HDFS 상의 다양한 불일치(블록 누락, 복제 되지 않은 블록)를 확인- 오류를 발견하고 수정하지는 않음(NameNode가 복구가능한 오류는 자동으로 수정)- 열린 파일은 무시함 > hadoop fsck /Status: HEALTHY Total size: 3984631262 B # 현재 사용중인 byte (hadoop fs -du -s / 명령어와 동일한 값) Total dirs: 678 Total files: 3453 Total symlinks: 0 Total blocks (validated): 3450 (avg. block size 1154965 B) # 최소 개수로 복제된 블록 Minimally replicated blocks: 3450 (100.0 %) # 기본 설정값 .. 2017. 4. 10.
[oozie] 우지의 hive 액션 예제 우지의 하이브 액션을 이용하는 방법은 다음과 같다. 다음의 파일을 준비필수: workflow.xml, count.hql, job.properties옵션: hive-site.xml생성한 파일을 hdfs에 업로드우지 명령어 실행oozie job --oozie http://localhost:11000/oozie -config ./job.properties -run localhost:8032 hdfs://localhost:8020 hive-site.xml oozie.use.system.libpath true oozie.launcher.mapreduce.job.acl-view-job * oozie.launcher.mapred.job.queue.name q1 mapred.job.queue.name queue ooz.. 2017. 4. 6.
[hive] 하이브의 처리 결과에 칼럼정보 출력 or 추가 하이브에서 결과를 보여줄 때 결과 컬럼 정보를 출력하기 위해서는다음의 설정을 true 로 설정하면 된다. set hive.cli.print.header=true; 쿼리를 이용하여 테이블의 헤더를 출력하기 위해서는 hql 에 해당 옵션을 지정하고 실행하면 된다. 아래와 같이 cli_header.hql 파일을 생성하고, hive -f 를 이용하여 실행하면 query.result 에 칼럼의 헤더와 결과가 함께 입력되는 것을 볼 수 있다. SET hive.cli.print.header=true; SELECT * FROM sample LIMIT 100; > hive -f cli_header.hql >> query.result * INSERT OVERWRITE DIRECTORY 를 이용하여 파일시스템에 데이터를 쓸.. 2017. 4. 6.
[hive] 쿼리를 이용하여 파일시스템에 데이터를 쓰기(INSERT OVERWRITE DIRECTORY) 하이브에서는 쿼리를 이용하여 데이터를 로컬이나 HDFS에 파일을 생성하는 것이 가능하다. Standard syntax:INSERT OVERWRITE [LOCAL] DIRECTORY directory1 [ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0) SELECT ... FROM ... Hive extension (multiple inserts):FROM from_statementINSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1[INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select.. 2017. 4. 6.
[oozie] 우지에서 하이브 액션 처리중 java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.HiveMain not found 오류 처리 우지를 이용하여 하이브 액션을 처리하는 중 하이브 클래스를 찾지 못하는 오류가 발생할 때가 있다. Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.HiveMain], exception invoking main(), java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.HiveMain not foundjava.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.HiveMain not foundat org.apache.hadoop.conf.Config.. 2017. 4. 6.
[hive] 문자열을 맵으로 변화하기 위한 str_to_map() 함수 하이브의 기본 함수 중에서 문자열을 맵 형식으로 변환하기 위한 함수로 STR_TO_MAP() 함수가 있다. 사용 방법은 다음과 같다. STR_TO_MAP("변환할 문자열", "리스트 구분자", "키밸류 구분자") 문자열을 맵형식으로 변환하는 방법은 다음과 같다. json 형식의 문자열도 REPLACE() 함수와 함께 사용하여 맵 형식으로 변환이 가능하다. 2017. 4. 5.
[hive] UDAF 구현 예제 UDAF는 AbstractGenericUDAFResolver를 상속하여 구현한다.Resolver 클래스전달파라미터를 체크실제 처리 프로세스 구현체(GenericUDAFEvaluator 구현)를 반환Evaluator 클래스 init(), merge(), terminatePartial() 등의 실제 처리 구현 getNewAggregationBuffer() - 집계에 사용할 AggregationBuffer 반환reset - aggregation 이 재사용될 때의 처리init - 입력 받는 아규먼트와 반환값의 타입을 지정iterate - 매퍼가 동작하는 동안 반복하는 작업terminatePartial - 부분적으로 집계작업을 종류할 때 작업merge - 집계작업의 결과를 머지할 때 terminate - 작업이 .. 2017. 3. 27.
[hive] UDF 구현 예제 하이브의 UDF는 두가지 방법으로 구현할 수 있다. UDF 클래스를 상속evaluate() 함수를 구현하여 처리GenericUDF 클래스를 상속initialize(), evaluate(), getDisplayString() 함수를 구현하여 처리 UDF 클래스를 상속하는 방법이 간단하고 처리하기 쉽다.GenericUDF를 사용하면 다음의 장점이 있다고 한다. A Generic User-defined function (GenericUDF) for the use with Hive. New GenericUDF classes need to inherit from this GenericUDF class. The GenericUDF are superior to normal UDFs in the following wa.. 2017. 3. 23.
[hive] 하이브의 UDF, UDAF, UDTF 하이브의 UDF는 UDF, UDAF, UDTF 로 구분된다. UDF: 한개의 행에서 동작한다. 입력과 출력은 하나이다. ex) TRIM()UDAF: 집계 함수이다. 여러 행의 데이터를 집계하여 하나의 결과를 출력합니다. ex) COUNT(), SUM()UDTF: 하나의 행을 입력으로 받아서 여러행의 데이터를 반환한다. ex) EXPLODE() 하이브에서 제공하는 기본 UDF를 이용할 수 있고, 사용자가 UDF 를 만들어서 적용할 수 도 있다. 사용자가 UDF를 만들어서 적용하는 방법은 다음과 같다. package sdk.hadoop.hive; import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.hadoop.io.Text; public final cl.. 2017. 3. 22.
[sqoop] 스쿱과 mysql 연동중 Error reading primary key metadata: java.sql.SQLException: Column 'ORDINAL_POSITION' not found. 오류 처리 3351 [uber-SubtaskRunner] ERROR org.apache.sqoop.manager.SqlManager - Error reading primary key metadata: java.sql.SQLException: Column 'ORDINAL_POSITION' not found.java.sql.SQLException: Column 'ORDINAL_POSITION' not found. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) at com.mysql.jdbc.SQLError.createSQLExcept.. 2017. 3. 10.
[sqoop] 스쿱을 이용하여 DB와 HDFS간 데이터 이동, import, export 예제 스쿱은 대량의 데이터를 아파치 하둡과 RDBMS 사이에서 전송하기 위해 디자인 된 툴이다. - 2012년 3월 아파치 톱레벨 프로젝트로 지정- 현재 1.4.6이 최신 버전(2017.03.10)- 스쿱2의 최신버전은 1.99.7, 스쿱1과 호환된지 않음, 아직 정식 릴리즈 되지 않음 - import: DB -> HDFS 로 데이터를 가져온다. - export: HDFS -> DB 로 데이터를 가져온다. [query 옵션을 이용하는 경우]- DB의 데이터를 쿼리로 조회하여 target-dir 위치로 복사sqoop import \ --connect jdbc:mysql://loclhost:7777/db?zeroDateTimeBehavior=convertToNull \ --username scott \ --pas.. 2017. 3. 10.
[sqoop] 스쿱 처리중 invalid callable syntax 오류처리 Error: java.io.IOException: java.sql.SQLSyntaxErrorException: invalid callable syntaxat org.apache.sqoop.mapreduce.AsyncSqlRecordWriter.close(AsyncSqlRecordWriter.java:184)at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.close(MapTask.java:679)at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:802)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342)at org.apache.hadoo.. 2017. 3. 8.
[hive] 하이브의 CSV 서데 사용 방법 하이브는 CSV 형식의 파일을 효과적으로 적재하기 위한 CSV 서데를 제공한다. * Hive 0.14 버전부터 기본 지원 ** CSV 서데를 이용하면 테이블 칼럼의 타입은 String 으로 고정 - sepratorChar: 칼럼간의 구분자 - quoteChar: 칼럼의 값을 지정한 문자로 묶어준다. - escapeChar: 칼럼에 데이터를 입력할 때 파싱하지 않고 무시 CREATE TABLE my_table( a string, b string)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'WITH SERDEPROPERTIES ( "separatorChar" = ",", "quoteChar" = "'", "escapeChar" = "\\") S.. 2017. 3. 8.
[sqoop] 스쿱실행중 Mixed update/insert is not supported against the target database yet 오류 처리 Mixed update/insert is not supported against the target database yet 스쿱을 이용하여 exprot 명령을 처리할 때 위와 같은 오류가 발생하는 경우가 있다. --update-mode 를 allowinsert 로 설정하였을 때 발생한다. --update-key 에 지정한 칼럼이 동일한 데이터가 없어서 insert 를 하려고 할때 데이터베이스가 update insert 문을 지원하지 않아서 발생하는 오류이다. 스쿱 지라에서도 확인할 수 있다. (확인) 현재 1.4.2 버전 기준으로 오라클에서만 지원한다고 한다. 다른 DB 에서는 처리가 안되는 것 같다. PostgreSQL에서는 프로시저를 이용하여 처리할 수도 있다고 한다. >sqoop export --c.. 2017. 3. 8.
[sqoop] sqoop 처리중 Streaming result set com.mysql.jdbc.RowDataDynamic is still active. 오류 처리 sqoop 을 이용하여 import, export 처리중 다음과 같은 오류가 발생하는 경우가 있다. 3376 [uber-SubtaskRunner] ERROR org.apache.sqoop.manager.SqlManager - Error reading from database: java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@6b80c0fb is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on a.. 2017. 3. 7.
[hive] 하이브 테이블에 데이터 입력 방법 하이브 테이블에 데이터를 입력하기 위해서는 몇가지 방법이 존재한다. - 테이블 생성시에 LOCATION 을 지정하는 방법CREATE TABLE employee ( id String, name String ) LOCATION 'hdfs://127.0.0.1/user/data/'; - LOAD DATA INPATH 를 이용하여 HDFS 의 파일을 입력하는 방법LOAD DATA INPATH 'hdfs://127.0.0.1/user/data/sample.csv' INTO TABLE tbl;;LOAD DATA INPATH '/user/data/sample.csv' INTO TABLE tbl;; - LOAD DATA LOCAL INPATH 를 이용하여 로컬의 데이터를 입력하는 방법LOAD DATA LOCAL INP.. 2017. 2. 21.
[hive] 하이브 테이블 생성하기 -- 테이블 생성CREATE TABLE employee ( id String, name String, lists ARRAY, maps MAP) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' -- 칼럼을 구분하는 기준 ESCAPED BY '\\' -- 값을 입력하지 않음 COLLECTION ITEMS TERMINATED BY ',' -- 리스트를 구분하는 기준 MAP KEYS TERMINATED BY '=' -- 맵데이터의 키와 밸류를 구분하는 기준 LINES TERMINATED BY '\n' -- 로(row)를 구분하는 기준 NULL DEFINED AS 'null' -- null 값을 표현(0.13 버전에서 추가) ; -- 생성한 테이블에 데이터 입력(hdfs 상의 .. 2017. 2. 21.
[hive] order by, sort by, cluster by 의 차이 Order by- 전체 데이터를 정렬- 하나의 리듀서로 진행- 용량이 커지면 문제가 발생할 가능성이 높음- 용량이 많을 경우 limit 를 이용하여 데이터를 제한해야 함 sort by- 리듀서별로 데이터를 정렬- 즉, 파일별로 정렬되어 생성됨- 보통 distribute by 와 함께 사용하여 처리, - distribute by는 리듀서로 보내는 데이터의 분류 기준 cluster by- distributed by, sort by를 동시에 사용한 것 Hive 입문 발표 자료 from beom kyun choi http://saurzcode.in/2015/01/hive-sort-vs-order-vs-distribute-vs-cluster/ https://cwiki.apache.org/confluence/dis.. 2017. 2. 14.
[hive][tez] tez 처리중 tez.lib.uris is not defined in the configuration 오류 수정 2017-02-06 02:11:55,396 ERROR [Thread-117] org.apache.hadoop.yarn.YarnUncaughtExceptionHandler: Thread Thread[Thread-117,5,main] threw an Exception.java.lang.RuntimeException: org.apache.tez.dag.api.TezUncheckedException: Invalid configuration of tez jars, tez.lib.uris is not defined in the configurationat org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:604)at org.apache.h.. 2017. 2. 7.
[hive] 다이나믹 파티션의 __HIVE_DEFAULT_PARTITION__ 하이브에서 다이나믹 파티션으로 데이터를 생성할 때 다이나믹 파티션에 입력되는 이름이 null 이거나 공백이면 하이브에서 지정된(hive.exec.default.partition.name) 이름을 이용하여 파티션을 생성한다. hive-default.xml 에 설정된 기본 이름이 __HIVE_DEFAULT_PARTITION__이다. 아래와 같은 코드에서 country_code 칼럼에 공백이나 null 값이 있으면 기본으로 설정된 이름의 파티션이 생성된다. insert into table partition_sample partition (country_code)select country, country_code from world_name; show partitions partition_sample ;...c.. 2017. 2. 2.
[oozie] FS 액션을 이용하여 작업 완료용 0바이트 파일 만들기 우지를 이용하여 하둡, 하이브 액션을 처리할때 HDFS나 S3에 작업이 처리 되었음을 알리기 위하여 0byte의 파일을 생성해야 할 때가 있다. 이럴때 hadoop의 touchz 명령을 이용하면 0byte의 파일을 생성할 수 있다. * 이는 리눅스의 touch 명령과 동일하다. 우지 워크플로우의 fs 액션은 이작업을 기본적으로 제공하기 때문에 따로 쉘커맨드나 파이썬 액션을 만들지 않아도 처리가 가능하다. fs 액션은 다음의 기본 명령을 제공한다. - move , delete , mkdir , chmod , touchz, chgrp [fs 액션 문법] ... ... ... ... ... ... ... [예제1] ... ... [예제2] Map/Reduce failed, error message[${wf:e.. 2017. 1. 25.
[Hive] transform 으로 파이썬을 이용할 때 exception 출력하기 SELECT TRANSFORM(id, name) USING 'transform.py' as (id, name) FROM tbl; 이렇게 transform.py 를 구성할 때 sys.stderr 을 이용하여 오류를 출력한다. except Exception as err: print >> sys.stderr, err # print to stderr (python 2 syntax) sys.exit(1) 2017. 1. 23.
[Hive] TRANSFORM()을 이용하여 입력데이터 변형(custom mapreduce 사용하기) TRANSFORM() 명령은 하이브에 입력되는 원천로그를 변형해야 할 때 사용하면 된다. 만약 입력되는 로그가 아래와 같은 형식으로 입력된다고 한다면 일반적인 MR로는 처리가 블가능하다. 이때 TRANSFORM() 을 이용하여 출력형식을 아래와 같이 변경하는 것이 가능하다. DATA1Column1-1Column1-2DATA2Column2-1Column2-2 DATA1Column1-1Column1-2DATA2Column2-1Column2-2 #!/usr/bin/python# -*- coding: utf-8 -*-import re, json, sys, time def readFile(): with sys.stdin as lines: #with open("./TEST_DATA.txt") as lines: # .. 2017. 1. 23.
[hive] desc 명령을 이용하여 하이브 테이블, 파티션의 로케이션 확인하기 하이브의 테이블을 EXTERNAL로 설정하면 다른 위치에 있는 파일을테이블의 메타 정보로 읽을 수 있다. 파티션의 위치를 지정하여 파일을 읽는 경우에도 테이블의 메타 정보로 읽을 수 있다. 이런경우 테이블명과 파티션의 이름으로 파일의 물리적인 위치를 확인하기가 힘들다. 이럴때는 desc 명령어를 이용하여 파티션의 위치를 확인할 수 있다. hive> show tables;OKsample_table hive> desc sample_table;일반 정보 확인 hive> desc extended sample_table;확장된 테이블 정보 확인 hive> show partitions sample_table;테이블의 파티션 정보 확인 hive> desc sample_table partition(date_val='2.. 2017. 1. 19.
[hive][tez][mr] 하이브 처리중 매퍼의 개수 설정하는 벙법 하이브의 맵리듀스 처리중 속도가 너무 느리다면 매퍼의 개수를 늘려서 처리를 해볼 수 있다. 이럴때 매퍼의 개수를 늘이기 위한 설정은 다음과 같다. * MR 엔진일때와 Tez 엔진일때 다른 설정을 이용한다. SET hive.exec.reducers.bytes.per.reducer=67108864;SET mapreduce.input.fileinputformat.split.minsize.per.node=134217728;SET mapreduce.input.fileinputformat.split.minsize.per.rack=134217728;SET mapreduce.input.fileinputformat.split.minsize=67108864;SET mapreduce.input.fileinputformat... 2017. 1. 17.
[hive] java.net.URISyntaxException: Relative path in absolute URI: file:./tmp/yarn 오류 처리 하이브 처리중 다음과 같은 오류가 발생하는 경우는 scratchdir 를 설정해 주면된다. 아래의 오류는 getScratchDir() 메소드를 호출하다가 오류가 발생한것을 알 수 있다. 따라서 아래의 설정을 해주면 된다. hive.exec.scratchdir/tmp/hivehive.exec.local.scratchdir/tmp/hive 위의 설정은 하이브 처리중 사용하는 플랜 파일이나, 임시 파일들을 저장하기 위하여 사용한다. 2017-01-13 07:33:08,521 INFO [hive-job uber-SubtaskRunner] org.apache.hadoop.hive.ql.exec.SerializationUtilities: Serializing MapredWork using kryo2017-01-13.. 2017. 1. 17.