Greenplum(4.3.8.2)使用GPHDFS协议创建外部表访问CDH5.7.0环境的HDFS文件系统
Greenplum(4.3.8.2)使用GPHDFS协议创建外部表访问CDH5.7.0环境的HDFS文件系统
1. 环境
CDH 5.7.0集成环境,其中Hadoop版本为2.6.0
Greenplum版本为4.3.8.2
2. 安装部署
第一步:所有segment,master和standby 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的用户gpadmin对Hadoop库文件和HDFS文件系统有read和write权限。
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版本的hadoop的jar包路径和开源的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. 先查看GP中create 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)
- 点赞
- 收藏
- 关注作者
评论(0)