本节书摘来异步社区《Hadoop实战手册》一书中的第1章,第1.10节,作者: 【美】Jonathan R. Owens , Jon Lentz , Brian Femiano 译者: 傅杰 , 赵磊 , 卢学裕 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.10 在Greenplum外部表中使用HDFS
Greenplum是一个并行数据库,数据的存储与查询基于一个或多个PostgreSQL实例。它补充了Hadoop,提供对大数据的实时或准实时访问,它还支持使用HDFS文件作为外部表。外部表是一个处理Greenplum集群之外数据很好的解决方案。由于外部表访问首先要消耗网络带宽,所以与Greenplum集群内的数据相比,它应该存储那些访问相对不频繁的数据。本节将介绍如何创建只读的外部表和可读写的外部表。
准备工作
在本节假定你使用的Hadoop版本为CDH3。
运行一个Greenplum实例,确认它能够访问Hadoop集群。相关信息可以查看http://www.greenplum.com/products/greenplum-database。
按照下面的方式配置Greenplum。
- gp_hadoop_target_version设置为cdh3u2。
- gp_hadoop_home设置为$HADOOP_HOME的完整路径。
在Greenplum集群的每个节点上都需要安装1.6以上(包含1.6)版本的Java。
操作步骤
创建HDFS上weblogs文件的一个外部表:
CREATE EXTERNAL TABLE weblogs(
md5 text,
url text,
request_date date,
request_time time,
ip inet
)
LOCATION ('gphdfs://<NAMENODE_HOST>:<NAMENODE_PORT>/data/weblogs/
weblog_ entries.txt')
FORMAT 'TEXT' (DELIMITER '\t');
工作原理
Greenplum本地支持并行地将HDFS上的数据加载到数据库中。当一个查询需要访问表weblog_entries.txt时,该文件会被加载为Greenplum的一个临时表,然后执行对该临时表的查询。等到查询结束以后再将该表丢弃。
更多参考
Greenplum也支持对外部表的写操作。这需要在创建表的时候指定写关键字:
CREATE WRITABLE EXTERNAL TABLE weblogs(
md5 text,
url text,
request_date date,
request_time time,
ip inet
)
LOCATION ('gphdfs://<NAMENODE_HOST>:<NAMENODE_PORT>/data/weblogs/
weblog_ entries.txt')
FORMAT 'TEXT' (DELIMITER '\t');
更多的信息可以查看Greenplum管理员手册,见http://media.gpadmin.me/wp-content/uploads/2011/05/GP-4100-AdminGuide.pdf。