apache hawq 는 postgresql 기반이다.

postgis 는 postgresql 에서 gis 연산을 할 수 있도록 해주는 postgresql extension 이다.

postgresql 9.2 이상 설치 가능한 것으로 기억하고 있다.

그런데 최근 greenplum committer 로 예상되는 누군가가 apache hawq 에서 postgis 를 사용 가능하도록 포팅했다.

greenplum gis extension 을 이용했다고 한다.

그래서 아래의 링크를 기반으로


apache hawq 에서 postgis 를 설치하는 아래의 문서를 작성했다.

https://github.com/HaNeul-Kim/apache-hawq-build/blob/master/postgis_for_hawq_build.asciidoc


Posted by FeliZ_하늘..

댓글을 달아 주세요

Apache HAWQ 2.0.0 을 resource manager 를 yarn 으로 설치 후 pgadmin 으로 연결하려고 하자


pg_resqueue table 이 없어서 연결이 안되고


hawq yarn application 이 재시작 되었다.


그래서 Pivotal HAWQ 2.0.0 을 설치하기로 하고 그 전에 HDP 를 설치했다.


http://hskimsky.tistory.com/111


그리고나서 pgadmin 으로 HAWQ 에 연결하려고 하자 여전히 yarn 에서 hawq 가 재시작됐다.


왜 이러는지 문서를 더 찾아보든가 committer 에게 문의하든가 해야겠다

Posted by FeliZ_하늘..

댓글을 달아 주세요

  1. 1466433016 2016.06.20 23:30  댓글주소  수정/삭제  댓글쓰기

    알찬 정보 좋네요~

  2. 1466955918 2016.06.27 00:45  댓글주소  수정/삭제  댓글쓰기

    좋은글 감사

직접 작성한 문서입니다


Apache Hadoop 2.7.2 버전 위에 HAWQ 2.0 dev 버전을 resource manager 를 yarn 으로 설치하고 HAWQ 에서 hdfs 와 web 의 파일을 읽어서 external table 을 만드는 것을 목표로 합니다.

Apache HAWQ 를 build, install 하는 순서와 명령어를 아주 자세하게 적어놓았습니다.

hadoop install 방법은 포함하지 않았고 pxf install 을 포함하고 있습니다.

먼저 챕터별 전체 실행 스크립트를 적어놓았고 그 뒤에 부분별 실행 스크립트를 적어놓았고 그 다음에 실행 한 결과 로그를 적어놓았습니다.

문서는 asciidoc 으로 작성하였으며 repository 내에 asciidoc 파일 및 pdf 파일도 포함되어 있습니다.

잘못된 점이 있으면 hskimsky@gmail.com 으로 메일 주시기 바랍니다.

빌드 성공을 기원합니다.


https://github.com/HaNeul-Kim/apache-hawq-build

Posted by FeliZ_하늘..

댓글을 달아 주세요

CentOS 6.7

Oracle JDK 1.7.0_80

Apache Maven 3.3.9

Python 2.6.6

Apache Hadoop 2.7.2

Apache HAWQ 2.0.0.0 dev

PXF 3.0.0


위 사양으로 설치 완료

Apache HAWQ build 만 6개월정도 삽질 한 듯..

문서에서는 gcc 버전을 4.7.2 이상 쓰라는데

centos 6.7에서 gcc 버전 4.7.2 로 올리면 yum 이 안됨

(나는 그냥 default 인 4.4.7 로 했음)

kernal 옵션 설정시 본인의 사양과 잘 비교하면서 할 것. 부팅이 불가할 수도 있음

semaphore 설정은 필수임

PXF 설치도 자잘하게 해줘야 할 것들이 많음

PXF 는 51200 port 로 실행하고 external table location 의 port 도 51200 으로 사용함


지금은 single node 로 구성했는데

조만간 vm 4개정도로 HAWQ HA 구성까지 하면서 메뉴얼 작성 해봐야겠다


Posted by FeliZ_하늘..

댓글을 달아 주세요

기본적으로 HAWQ 는 postgresql 8.2 를 사용중이므로


아래 쿼리들은 몇몇 쿼리를 제외하고는 postgresql 8.2 에서도 사용 가능하지만


postgresql 9.x 에서는 8.x 와 엔진 자체가 달라서 사용 불가능하다.


mybatis 에서 사용하는 쿼리 형식 비슷하게 개발중이기 때문에


아래 쿼리 중에는 바로 실행 불가능한 쿼리들도 있다


간혹 dbSchemaTable 이란 변수가 있는데 이는


database.schema.table 형태로 써주면 된다. ex) gpadmin.public.table_name


설명

쿼리


현재 실행중인 쿼리의 pid 조회

SELECT pg_backend_pid();


autocommit 상태 조회

show autocommit;


hawq version 조회

SELECT

    productversion

FROM

    pg_catalog.gp_version_at_initdb;


모든 데이터베이스 database 조회

SELECT

    datname "databaseName"

FROM

    pg_database

ORDER BY

    datname;


모든 스키마 schema 조회

SELECT

    schema_name "schemaName"

FROM

    information_schema.schemata

ORDER BY

    schema_name;


기본 스키마 default schema 조회

SHOW search_path;


특정 database 의 schema 내 모든 테이블 table 조회

SELECT

    t.table_catalog

   ,t.table_schema

   ,t.table_name

   ,t.table_type

   ,t.is_insertable_into

   ,t.is_typed

   ,c.relstorage

   ,c.oid::int

   ,'TABLE' object_type

   ,'('||pg_size_pretty(pg_relation_size(c.oid))||')' table_size

   ,'('||pg_size_pretty(

        (

            SELECT

                sum(pg_relation_size(ns.nspname||'.'||pp.partitiontablename))

            FROM

                pg_class cl

                    INNER JOIN pg_namespace ns ON cl.relnamespace = ns.oid

                    INNER JOIN pg_partitions pp ON cl.relname = pp.tablename

            WHERE pp.tablename = c.relname

        )::bigint

   )||')' size

FROM

    information_schema.tables t

    INNER JOIN pg_namespace s ON t.table_schema = s.nspname

    INNER JOIN pg_class c ON t.table_name = c.relname AND s.oid = c.relnamespace

    LEFT JOIN pg_partitions p ON t.table_name = p.partitiontablename

WHERE

    p.tablename IS NULL

GROUP BY

    t.table_catalog

   ,t.table_schema

   ,t.table_name

   ,t.table_type

   ,t.is_insertable_into

   ,t.is_typed

   ,c.relstorage

   ,p.partitiontablename

   ,c.oid

   ,c.relname

HAVING

    t.table_catalog = #{databaseName} AND

    t.table_schema = #{schemaName} AND

    c.relstorage NOT IN ('v', 'x')

ORDER BY

    t.table_name;


특정 database 의 schema 내 모든 뷰 view 조회

SELECT

    c.oid::int

   ,t.table_catalog

   ,t.table_schema

   ,t.table_name

   ,t.table_type

   ,t.is_insertable_into

   ,t.is_typed

   ,'VIEW' object_type

FROM

    information_schema.tables t

    INNER JOIN pg_namespace s ON t.table_schema = s.nspname

    INNER JOIN pg_class c ON t.table_name = c.relname AND s.oid = c.relnamespace

    LEFT JOIN pg_partitions p ON t.table_name = p.partitiontablename

WHERE

    t.table_catalog = #{databaseName} AND

    t.table_schema = #{schemaName} AND

    t.table_type = 'VIEW'

ORDER BY

    t.table_name;


특정 database 의 schema 내 모든 external 테이블 external table 조회

SELECT

    t.table_catalog

   ,t.table_schema

   ,t.table_name

   ,t.table_type

   ,t.is_insertable_into

   ,t.is_typed

   ,c.relstorage

   ,c.oid::int

   ,'EXTTABLE' object_type

FROM

    information_schema.tables t

    INNER JOIN pg_namespace s ON t.table_schema = s.nspname

    INNER JOIN pg_class c ON t.table_name = c.relname AND s.oid = c.relnamespace

GROUP BY

    t.table_catalog

   ,t.table_schema

   ,t.table_name

   ,t.table_type

   ,t.is_insertable_into

   ,t.is_typed

   ,c.relstorage

   ,c.oid

HAVING

    t.table_catalog = #{databaseName} AND

    t.table_schema = #{schemaName} AND

    c.relstorage = 'x'

ORDER BY

    t.table_name;


특정 database 의 schema 내 모든 함수 function 조회

SELECT

    p.oid

   ,a.rolname

   ,n.nspname

   ,p.proname

   ,l.lanname

   ,p.pronargs

   ,p.prorettype::regtype

   ,oidvectortypes(p.proargtypes) proargtypes

   ,p.prosrc

   ,p.proname||'('||oidvectortypes(p.proargtypes)||')' procdesc

   ,'FUNCTION' object_type

FROM pg_proc p

    INNER JOIN pg_namespace n ON n.oid = p.pronamespace

    INNER JOIN pg_authid a ON a.oid = p.proowner

    INNER JOIN pg_language l ON l.oid = p.prolang

WHERE

    n.nspname = #{schemaName} AND

    p.prorettype != 'trigger'::regtype

ORDER BY

    p.proname;


특정 database 의 schema 내 object 의 모든 컬럼 column 조회

SELECT

    table_catalog

   ,table_schema

   ,table_name

   ,column_name

   ,ordinal_position

   ,column_default

   ,is_nullable

   ,data_type

   ,character_maximum_length

   ,col_description(#{dbSchemaTable}::regclass, ordinal_position) column_comment

FROM

    information_schema.columns

WHERE

    table_catalog = #{databaseName} AND

    table_schema = #{schemaName} AND

    table_name = #{tableName}

ORDER BY

    ordinal_position;


모든 tablespace 조회

SELECT

    spcname

FROM

    pg_tablespace

ORDER BY

    spcname;


모든 custom formatter 조회

SELECT

    p.proname

FROM

    pg_proc p

    INNER JOIN pg_namespace n ON n.oid = p.pronamespace

    INNER JOIN pg_authid a ON a.oid = p.proowner

    INNER JOIN pg_language l ON l.oid = p.prolang

WHERE

    (p.prorettype = 'record'::regtype OR oidvectortypes(p.proargtypes) = 'record') AND

    l.lanname != 'internal' AND

    n.nspname = 'pg_catalog'

ORDER BY p.proname;


특정 database 의 schema 내 모든 제약사항 constraint 조회

SELECT

    conname

   ,contype

   ,array_to_string(conkey, ',') conkeys

   ,array_upper(conkey, 1) length

   ,substring(consrc from 2 for char_length(consrc) - 2) consrc

FROM

    pg_constraint

WHERE

    #{dbSchemaTable}::regclass = conrelid

ORDER BY

    length

   ,conname;


특정 테이블의 파티션정의 partition definition 조회

SELECT pg_get_partition_def(#{dbSchemaTable}::regclass) partitiondef;


특정 테이블의 파티션테이블 partition table 조회

SELECT

    c.oid id

   ,c.oid

   ,ns.nspname

   ,c.relname

   ,c.relname table_name

   ,c.relname text

   ,c.relhassubclass

   ,not(c.relhassubclass) leaf

   ,pr.parname

   ,t.table_type

   ,'TABLE' object_type

   ,c.relstorage

FROM pg_class c

    INNER JOIN pg_partition_rule pr ON c.oid = pr.parchildrelid

    INNER JOIN pg_inherits i ON c.oid = i.inhrelid

    INNER JOIN pg_namespace ns ON c.relnamespace = ns.oid

    INNER JOIN information_schema.tables t ON (t.table_name = c.relname AND ns.oid = c.relnamespace)

WHERE

    c.relkind = 'r' AND

    i.inhparent = #{oid}::oid

ORDER BY

    c.relname;


파티션 테이블 partition table 의 정보 조회

SELECT

    schemaname

   ,tablename

   ,partitiontablename

   ,partitionname

   ,parentpartitiontablename

   ,parentpartitionname

   ,partitiontype

   ,partitionlevel

   ,partitionrank

   ,partitionposition

   ,partitionlistvalues

   ,partitionrangestart

   ,partitionstartinclusive

   ,partitionrangeend

   ,partitionendinclusive

   ,partitioneveryclause

   ,partitionisdefault

   ,partitionboundary

   ,parenttablespace

   ,partitiontablespace

FROM

    pg_partitions

WHERE

    schemaname = #{schemaName} AND

    partitiontablename = #{tableName};


분산키 distributed key 조회

SELECT

    cl.relname

   ,array_to_string(dp.attrnums, ',') attrnums

FROM

    gp_distribution_policy dp

INNER JOIN pg_class cl ON dp.localoid = cl.oid

LEFT JOIN pg_namespace ns ON cl.relnamespace = ns.oid

WHERE

    ns.nspname = #{schemaName} AND

cl.relname = #{tableName};


실행중인 쿼리 세션 중지 query session kill terminate

SELECT pg_terminate_backend(#{pid});


모든 리소스큐 resource queue 조회

SELECT

    q.oid::int as queueid,

    q.rsqname as rsqname,

t1.value::int as rsqcountlimit,

t2.value::int as rsqcountvalue,

t3.value::real as rsqcostlimit,

t4.value::real as rsqcostvalue,

t5.value::real as rsqmemorylimit,

t6.value::real as rsqmemoryvalue,

t7.value::int as rsqwaiters,

t8.value::int as rsqholders

FROM pg_resqueue q,

pg_resqueue_status_kv() t1 (queueid oid, key text, value text),

pg_resqueue_status_kv() t2 (queueid oid, key text, value text),

pg_resqueue_status_kv() t3 (queueid oid, key text, value text),

pg_resqueue_status_kv() t4 (queueid oid, key text, value text),

pg_resqueue_status_kv() t5 (queueid oid, key text, value text),

pg_resqueue_status_kv() t6 (queueid oid, key text, value text),

pg_resqueue_status_kv() t7 (queueid oid, key text, value text),

pg_resqueue_status_kv() t8 (queueid oid, key text, value text)

WHERE

q.oid = t1.queueid

AND t1.queueid = t2.queueid

AND t2.queueid = t3.queueid

AND t3.queueid = t4.queueid

AND t4.queueid = t5.queueid

AND t5.queueid = t6.queueid

AND t6.queueid = t7.queueid

AND t7.queueid = t8.queueid

AND t1.key = 'rsqcountlimit'

AND t2.key = 'rsqcountvalue'

AND t3.key = 'rsqcostlimit'

AND t4.key = 'rsqcostvalue'

AND t5.key = 'rsqmemorylimit'

AND t6.key = 'rsqmemoryvalue'

AND t7.key = 'rsqwaiters'

AND t8.key = 'rsqholders'

ORDER BY

    q.rsqname

   ,t1.value;


모든 그룹롤 group role 조회

SELECT

    oid::int

   ,rolname

   ,rolsuper

   ,rolinherit

   ,rolcreaterole

   ,rolcreatedb

   ,rolcatupdate

   ,rolcanlogin

   ,rolconnlimit

   ,rolvaliduntil

   ,rolconfig

   ,rolresqueue

   ,rolcreaterextgpfd

   ,rolcreaterexthttp

   ,rolcreatewextgpfd

   ,rolcreaterexthdfs

   ,rolcreatewexthdfs

FROM

pg_roles

WHERE

    not(rolcanlogin)

ORDER BY

    rolname;


모든 로그인롤 login role 조회

SELECT

    oid::int

   ,rolname

   ,rolsuper

   ,rolinherit

   ,rolcreaterole

   ,rolcreatedb

   ,rolcatupdate

   ,rolcanlogin

   ,rolconnlimit

   ,rolvaliduntil

   ,rolconfig

   ,rolresqueue

   ,rolcreaterextgpfd

   ,rolcreaterexthttp

   ,rolcreatewextgpfd

   ,rolcreaterexthdfs

   ,rolcreatewexthdfs

FROM

pg_roles

WHERE

    rolcanlogin

ORDER BY

    rolname;


특정 롤 role 조회

SELECT

    ro.oid::int

   ,ro.rolname

   ,ro.rolsuper

   ,ro.rolinherit

   ,ro.rolcreaterole

   ,ro.rolcreatedb

   ,ro.rolcatupdate

   ,ro.rolcanlogin

   ,ro.rolconnlimit

   ,to_char(ro.rolvaliduntil, 'YYYY-MM-DD') rolvaliduntil

   ,ro.rolconfig

   ,ro.rolresqueue

   ,rq.rsqname

   ,ro.rolcreaterextgpfd

   ,ro.rolcreaterexthttp

   ,ro.rolcreatewextgpfd

   ,ro.rolcreaterexthdfs

   ,ro.rolcreatewexthdfs

FROM

pg_roles ro

INNER JOIN pg_resqueue rq ON ro.rolresqueue = rq.oid

WHERE

    ro.oid = #{oid};


실행중인 세션 session 조회

SELECT

    datid

   ,datname

   ,procpid

   ,sess_id

   ,usesysid

   ,usename _username

   ,CASE WHEN length(current_query) > 1022 THEN current_query||'(...)'

         ELSE current_query

    END current_query

   ,waiting

   ,to_char(query_start, 'YYYY-MM-DD HH24:MI:SS:MS') query_start

   ,to_char(backend_start, 'YYYY-MM-DD HH24:MI:SS:MS') backend_start

   ,client_addr

   ,client_port

   ,application_name

   ,to_char(xact_start, 'YYYY-MM-DD HH24:MI:SS:MS') xact_start

FROM

    pg_stat_activity

WHERE

    current_query not like '%<IDLE>%'

ORDER BY

    query_start

LIMIT

    ${limit}

OFFSET

    ${start};


Lock table 조회

SELECT

    DISTINCT

        w.locktype

       ,w.relation::regclass AS relation

       ,w.mode

       ,w.pid AS waiting_pid

       ,w_stm.current_query waiting_query

       ,other.pid AS other_pid

       ,other_stm.current_query other_query

FROM

    pg_catalog.pg_locks AS w

        JOIN pg_catalog.pg_stat_activity AS w_stm ON w_stm.procpid = w.pid

        JOIN pg_catalog.pg_locks AS other ON

            (w.DATABASE = other.DATABASE AND

                w.relation = other.relation) OR

            w.transactionid = other.transactionid

        JOIN pg_catalog.pg_stat_activity AS other_stm ON other_stm.procpid = other.pid

WHERE

    NOT w.granted AND

    w.pid <> other.pid;


데이터베이스 크기 database size 조회

SELECT

    pg_size_pretty(pg_database_size(#{databaseName}))||

        CASE WHEN pg_database_size(#{databaseName}) > 1023 THEN

            ' ('||

            pg_database_size(#{databaseName})||

            ' bytes)'

            ELSE '' END size;


스키마 크기 schema size 조회

SELECT

    pg_size_pretty(sum(pg_relation_size(schemaname||'.'||tablename))::bigint)||

            CASE WHEN sum(pg_relation_size(schemaname||'.'||tablename))::bigint > 1023 THEN

                ' ('||

                sum(pg_relation_size(schemaname||'.'||tablename))::bigint||

                ' bytes)'

                ELSE '' END size

FROM

    pg_tables

WHERE

    schemaname = #{schemaName};


테이블 크기 table size 조회

SELECT

    pg_size_pretty(pg_relation_size(#{dbSchemaTable}))||

        CASE WHEN pg_relation_size(#{dbSchemaTable}) > 1023 THEN

            ' ('||

            pg_relation_size(#{dbSchemaTable})||

            ' bytes)'

            ELSE '' END size;


어플리케이션 이름 세팅 set application name (쿼리 실행 전 실행해주면 세션 조회에서 조회 가능함)

set application_name=#{appName};


데이터베이스 삭제 drop database

END;

DROP DATABASE IF EXISTS ${dropDatabaseName};

BEGIN;


스키마 삭제 drop schema

DROP SCHEMA IF EXISTS ${schemaName} RESTRICT;


테이블 삭제 drop table

DROP TABLE IF EXISTS ${dbSchemaTable} RESTRICT;


external 테이블 삭제 drop external table

DROP EXTERNAL TABLE IF EXISTS ${dbSchemaTable} RESTRICT;


뷰 삭제 drop view

DROP VIEW IF EXISTS ${dbSchemaView} RESTRICT;


함수 삭제 drop function

DROP FUNCTION IF EXISTS ${dbSchemaFunction} (${proargtypes}) RESTRICT;


리소스큐 삭제 drop resource queue

DROP RESOURCE QUEUE ${queueName};


롤 삭제 drop role

DROP ROLE ${rolname};

'[BigData] > [Pivotal HAWQ]' 카테고리의 다른 글

metadata 관리 쿼리 manage query  (0) 2015.07.02
hawq 에서 show tables, databases, columns, describe  (1) 2015.02.26
pivotal hawq download  (0) 2015.02.24
Posted by FeliZ_하늘..

댓글을 달아 주세요

https://network.pivotal.io/products/pivotal-hd


회원가입 후 다운로드 가능함


Pivotal HD 2.1.0 Single Node VM 2.39 GB


이거 하나만 받으면 된다고 함

'[BigData] > [Pivotal HAWQ]' 카테고리의 다른 글

metadata 관리 쿼리 manage query  (0) 2015.07.02
hawq 에서 show tables, databases, columns, describe  (1) 2015.02.26
pivotal hawq download  (0) 2015.02.24
Posted by FeliZ_하늘..

댓글을 달아 주세요