Greenplum(4.3.8.2)使用GPHDFS协议创建外部表访问CDH5.7.0环境的HDFS文件系统

本篇文章主要介绍使用Greenplum访问HDFS文件。

 

1.       环境

CDH 5.7.0集成环境,其中Hadoop版本为2.6.0

Greenplum版本为4.3.8.2

 

2.       安装部署

第一步:所有segmentmasterstandby master节点都安装Java 1.6及以上版本(CDH5.7.0已经部署,略过)

 

第二步:安装GPDB(Greenplum Database)支持的Hadoop版本,参考如下描述:

Hadoop Distribution

Version

gp_hadoop_ target_version

Pivotal HD

Pivotal HD 3.0, 3.0.1

gphd-3.0

Pivotal HD 2.0, 2.1

Pivotal HD 1.0

gphd-2.0

Greenplum HD

Greenplum HD 1.2

gphd-1.2

Greenplum HD 1.1

gphd-1.1 (default)

Cloudera

CDH 5.2, 5.3, 5.4.x, 5.5.x

cdh5

CDH 5.0, 5.1

cdh4.1

CDH 4.12 - CDH 4.7

cdh4.1

Hortonworks Data Platform

HDP 2.1, 2.2, 2.3

hdp2

MapR

MapR 4.x

gpmr-1.2

MapR 1.x, 2.x, 3.x

gpmr-1.0

Apache Hadoop

2.x

hadoop2

        

         针对上面的表格内容进行说明:

(1). Pivotal HD 1.0 is a distribution of Hadoop 2.0.

(2). For CDH 4.1, only CDH4 with MRv1 is supported.

(3). MapR requires the MapR client software.

 

对于我们的CDH 5.7.0,经过相关源码分析和测试也是完全支持的。

3.       确保GPDB的用户gpadminHadoop库文件和HDFS文件系统有readwrite权限。

4.       在所有的segments上配置环境信息

a.       先查看Java版本和家目录

[gpadmin@CDHA ~]$ echo $JAVA_HOME

/usr/java/default

[gpadmin@CDHA ~]$ ll /usr/java/

total 8

lrwxrwxrwx 1 root root   16 Jun  8 10:29 default -> /usr/java/latest

drwxr-xr-x 8 root root 4096 Jun  8 10:28 jdk1.7.0_80

lrwxrwxrwx 1 root root   21 Jun  8 10:29 latest -> /usr/java/jdk1.7.0_80

 

b.       gpadmin用户下面的.bashrc文件中添加如下内容:

export JAVA_HOME=/usr/java/default

export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop

 

c.       配置GPDB服务器的系统参数并使参数生效

gpconfig -c gp_hadoop_target_version -v "'cdh5'"

gpconfig -c gp_hadoop_home -v "'/opt/cloudera/parcels/CDH/lib/hadoop'"

gpstop -u

 

5.       对于CDH版本来说,需要定制$GPHOME/lib/hadoop/hadoop_env.sh内容

因为CDH版本的hadoopjar包路径和开源的Hadoop版本的目录结构不一样,需要需要配置Jar的路径,需要在$GPHOME/lib/hadoop/hadoop_env.sh文件中添加如下内容:

#添加到文件的开头

export JAVA_HOME=/usr/java/default

export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop

source /usr/local/greenplum-db/greenplum_path.sh

 

#我的内容是添加到文件中的注释#for hadoop 2.0下面,其他地方都可以,只要能加载到Jar即可

#for hadoop 2.0

#added by Greenplum begin

for f in /opt/cloudera/parcels/CDH/jars/hadoop-*.jar;do

CLASSPATH=${CLASSPATH}:$f;

done

#added by Greenplum end

 

在一个节点配置完成后,可以同步此文件到所有节点。

最后重启GP数据库:

gpstop

 

6.       HDFS protocol赋权限

为了能够创建外部表访问HDFS文件,使用创建外部表的用执行如下操作:

#写权限

GRANT INSERT ON PROTOCOL gphdfs TO gpadmin;

#读权限

GRANT SELECT ON PROTOCOL gphdfs TO gpadmin;

#所有权限

GRANT ALL ON PROTOCOL gphdfs TO gpadmin;

 

 

7.       创建外部表进行测试

a.       创建HDFS文件

[hdfs@CDHA ~]$ hdfs dfs -cat hdfs://CDHM:8020/gptest/external_test.txt

1|HADOOP

2|SPARK

b.       创建外表表

create external table external_test

(

       id int,

       name text

)

LOCATION ('gphdfs://CDHM:8020/gptest/external_test.txt')

FORMAT 'TEXT' (delimiter '|');

 

c.       查询外部表数据

zy_db_safe=# select * from external_test;

 id |  name 

-----+--------

1  | HADOOP

2  | SPARK

(2 rows)

 

8.       将外部表数据导入事实表

a.       先查看GPcreate table as的语法

 

CREATE [ [GLOBAL | LOCAL] {TEMPORARY | TEMP} ] TABLE table_name

   [(column_name [, ...] )]

   [ WITH ( storage_parameter=value [, ... ] )

   [ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP}]

   [TABLESPACE tablespace]

   AS query

   [DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY]

 

where storage_parameter is:

   APPENDONLY={TRUE|FALSE}

   BLOCKSIZE={8192-2097152}

   ORIENTATION={COLUMN|ROW}

   COMPRESSTYPE={ZLIB|QUICKLZ|RLE_TYPE|NONE}

   COMPRESSLEVEL={0-9}

   CHECKSUM={TRUE|FALSE}

   FILLFACTOR={10-100}

       OIDS[=TRUE|FALSE]

 

 

b.       创建事实表,导入数据

create table test (id, name)

with (APPENDONLY=true,BLOCKSIZE=8192,ORIENTATION=column,COMPRESSTYPE=QUICKLZ) as select * from external_test               

distributed by (id);

 

c.       查看数据和在segment上面分布

zy_db_safe=# select * from test;

 id |  name 

----+--------

  1 | HADOOP

  2 | SPARK

(2 rows)

 

zy_db_safe=# select gp_segment_id,count(1) from test group by 1;                                                                                                     

 gp_segment_id | count

---------------+-------

            34 |     1

            39 |     1

(2 rows)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值