하둡의 스케줄러중 하나인 커패시티 스케줄러는 큐별로 사용할 수 있는 자원의 총량을 정해놓고 처리하는 방식이다. 하둡설정의 capacity-scheduler.xml 파일을 이용하여 설정할 수 있다. * 운영중에 큐의 추가는 가능하다. * capacity-scheduler.xml 을 수정하고, yarn rmadmin -refreshQueues 를 입력한다. ** 운영중에 큐의 삭제는 불가능하다. ** capacity-scheduler.xml 을 수정하고, 리소스 매니저를 재시작하면 된다. YARN overview from SeongHyun Jeong https://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html
하둡의 매퍼 리듀서 개수는 입력사이즈에 의해서 설정하는 방법과 사용자가 개수를 설정하는 방법이있다. set mapreduce.input.fileinputformat.split.maxsize=268435456;set mapreduce.input.fileinputformat.split.minsize=134217728; set mapred.reduce.tasks=-1;set hive.exec.reducers.bytes.per.reducer=134217728; set mapreduce.job.maps=100; set mapreduce.job.reduces=100; * 하둡 위키에 따르면 매퍼의 개수는 하둡이 계산한 매퍼의 개수 이하로는 설정할 수 없다고 한다. 하둡이 매퍼의 개수를 500개로 계산했는데 100개..
하이브에서 tez 엔진을 이용하여 작업중 다음과 같은 오류가 발생하는 경우이는 tez의 AM 기본메모리가 1G로 설정되어서 발생하는 오류이다. 기본메모리 이상으로 메모리를 설정하여 진행하면 된다. FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Application application_*** failed 2 times due to AM Container for appattempt_*** exited with exitCode: - ***Current usage: 1.1 GB of 1 GB physical memory used;*** 다음의 옵션을 이용하여 AM의 메모리를 늘려서 처리하면 오류가 해..
HDFS의 블록에 오류가 발생해서 커럽트 블록이 발생하면 이 부분을 hdfs 쉘을 이용하여 확인할 수 있다. hdfs fsck /hdfs fsck /user/- fsck 다음에 경로를 꼭 입력해야 한다. hdfs fsck -list-corruptfileblocks- 커럽트 블록 목록 확인 hdfs fsck -delete- 커럽트 블록을 삭제한다. hdfs fsck -move- 커럽트 블록을 lost+found 로 이동한다. HDFS의 상태가 이상해서 fsck 명령으로 확인하여 아래와 같이 커럽트 블록을 확인하면, -list-corruptfileblocks 명령으로 블록을 확인하고, -delete 명령으로 삭제후, 새로 배포하면 된다. - 시스템 상태가 정상The filesystem under path '..
-HDFS의 주요 특징은?블록단위 파일 보관파일을 사용자가 지정한 단위의 블록으로 분할 하여 저장분할하여 저장하기 때문에 큰사이즈의 데이터도 저장이 가능700G 디스크가 2개 있을때 1T파일을 저장하려고 한다면 1T 디스크를 사지 않고, 파일을 분할하여 저장 가능 분산 저장 파일 시스템클러스터의 노드에 분산하여 저장이 가능레플리케이션하나의 블록을 기본 복제 단위 만큼 복사하여 저장범용장비 사용특정 장비가 아니라 일반적인 장비에서 사용이 가능 - HDFS의 구조네임노드디렉토리, 파일 정보 관리블록과 디렉토리간 매핑 정보 관리파일 시스템의 관리를 위애 fsimage와 edits를 이용데이타노드파일을 블록단위로 나누어서 저장체크포인트 노드, 세컨더리 네임노드fsimage와 edits를 주기적으로 체크하여 체크..
빅데이터 관련해서 정보를 찾던 중에 빅데이터 관련 면접에서 알아두면 좋을 내용이 있어서 스크랩해 보았다. 공부해 두면 좋은 내용들이어서 정리 해 보았다. 1. 하둡과 전통적인 RDBMS의 차이점은? 데이터 타입: 하둡은 정형, 반정형, 비정형 데이터: RDBMS는 정형 데이터 스키마: 하둡 - Schema on Read: RDBMS - Schema on Write: 데이터를 읽을 때 스키마를 적용하느냐, 데이터를 적재할 때 스키마를 적용하느냐: https://goo.gl/images/dQiQCJ 좋은 사용법: 하둡은 대용량 데이터 처리: RDBMS는 OLTP 데이터 처리나 복잡한 ACID 트랜잭션에 적용 속도: 하둡은 쓸 때 빠르고 : RDBMS는 읽을 때 빠르다. 2. 빅데이터에서 4V는 무엇을 말하나..
우지 쉐어라이브러리는 oozie-site.xml 파일에 위치를 설정한다. 다음의 설정을 이용하여 위치를 설정하면 된다. oozie.service.WorkflowAppService.system.libpath hdfs://location/share/lib System library path to use for workflow applications. This path is added to workflow application if their job properties sets the property 'oozie.use.system.libpath' to true. 우지가 실행중에 우지 쉐어 라이브러리를 추가하면 갱신이 안될 수 가 있다. 이럴때는 다음의 명령을 이용하여 갱신하면 된다. oozie admin -..
hive 2.1.0 에서 ORC 파일 포맷 이용중 다음의 오류가 발생하는 경우가 있다. Caused by: java.lang.ArrayIndexOutOfBoundsException: 1024 이 경우 다음의 지라와 같이 Hive 버그일 가능성이 높다. 이럴때는 이런 해결방법이 있다. hive 버전업 또는 패치 적용ORC 말고 다른 포맷으로 데이터를 저장 후 다시 ORC 포맷으로 저장파일 머지중 오류가 발생했다면 머지 기능을 잠시 off 리듀서를 1개로 설정하여 처리 https://issues.apache.org/jira/browse/HIVE-14483
hdfs에는 사용자의 실수로 인한 파일의 삭제를 방지하기 위해서 휴지통 기능이 존재한다. fs.trash.interval- 0 으로 설정하면 휴지통 기능을 사용하지 않음- 설정한 분(minute) 간격으로 체크해서 시간이 지난 파일 삭제 fs.trash.checkpoint.interval- 설정한 시간이 지난 파일 삭제 hadoop fs -expunge 명령으로 휴지통을 비움hadoop fs -rm -skipTrash /data 명령으로 휴지통을 이용하지 않고 파일을 바로 삭제 https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#File_Deletes_and_Undeleteshttps://hadoop...
하이브 테이블의 열 개수(count 정보), 파일개수, 사이즈 등이 메타스토어에 저장된다. 이를 이용하여 count 명령의 실행 속도를 높일 수 있다. 그런데 파일 정보가 갱신 된 것을 하이브가 확인하지 못할 때도 있다. 이럴때는 다음의 명령으로 테이블 정보를 갱신해 준다. ANALYZE TABLE 테이블명 COMPUTE STATISTICS; The first milestone in supporting statistics was to support table and partition level statistics. Table and partition statistics are now stored in the Hive Metastore for either newly created or existing ta..
우지 코디네이터에 를 설정하면 지정한 파일이 생성되기 까지 잡을 대기(WAITING) 하게 할 수 있다. 이때 기본적으로 대기잡은 12개로 설정되어 있고 코디네이터에 설정된 정보만큼 기다리다가 TIMEOUT으로 넘어가면서 다음 잡이 생성되게 된다. 이 WAITING 잡의 개수를 다음의 설정으로 조절이 가능하다. oozie.service.coord.default.throttle = 12 https://oozie.apache.org/docs/4.0.0/oozie-default.xml
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"]{..
하이브 처리중 다음과 같은 오류가 발생할 때가 있다. 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..
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 %) # 기본 설정값 ..
우지의 하이브 액션을 이용하는 방법은 다음과 같다. 다음의 파일을 준비필수: 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..
하이브에서 결과를 보여줄 때 결과 컬럼 정보를 출력하기 위해서는다음의 설정을 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 를 이용하여 파일시스템에 데이터를 쓸..
하이브에서는 쿼리를 이용하여 데이터를 로컬이나 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..
우지를 이용하여 하이브 액션을 처리하는 중 하이브 클래스를 찾지 못하는 오류가 발생할 때가 있다. 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..
UDAF는 AbstractGenericUDAFResolver를 상속하여 구현한다.Resolver 클래스전달파라미터를 체크실제 처리 프로세스 구현체(GenericUDAFEvaluator 구현)를 반환Evaluator 클래스 init(), merge(), terminatePartial() 등의 실제 처리 구현 getNewAggregationBuffer() - 집계에 사용할 AggregationBuffer 반환reset - aggregation 이 재사용될 때의 처리init - 입력 받는 아규먼트와 반환값의 타입을 지정iterate - 매퍼가 동작하는 동안 반복하는 작업terminatePartial - 부분적으로 집계작업을 종류할 때 작업merge - 집계작업의 결과를 머지할 때 terminate - 작업이 ..
하이브의 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..
하이브의 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..
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..
스쿱은 대량의 데이터를 아파치 하둡과 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..
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..
하이브는 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..
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..
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..
- Total
- Today
- Yesterday
- 다이나믹
- AWS
- 알고리즘
- Linux
- ubuntu
- yarn
- mysql
- bash
- hbase
- SQL
- java
- airflow
- build
- Tez
- 정올
- error
- 파이썬
- HDFS
- 백준
- 오류
- emr
- S3
- nodejs
- 하둡
- Python
- SPARK
- oozie
- Hadoop
- HIVE
- 하이브
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |