Greenplum企业应用实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-09 18:21:20

点击下载

作者:何勇陈晓峰

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Greenplum企业应用实战

Greenplum企业应用实战试读:

前言

为什么写作本书

阿里巴巴是国内最早使用Greenplum作为数据仓库计算中心的公司。从2009年到2012年Greenplum都是阿里巴巴B2B最重要的数据计算中心,它替换掉了之前的Oracle RAC,有非常多的优点。

·Greenplum的性能在数据量为TB级别时表现非常优秀,单机性能相比Hadoop要快好几倍。

·Greenplum是基于PostgreSQL的一个完善的数据库,在功能和语法上都要比Hadoop上的SQL引擎Hive好用很多,对于普通用户来说更加容易上手。

·Greenplum有着完善的工具,相比Hive,整个体系都比较完善,不需要像Hive一样花太多的时间和精力进行改造,非常适合作为一些大型的数据仓库解决方案。

·Greenplum能够方便地与Hadoop进行结合,可直接把数据写在Hadoop上,还可以直接在数据库上写MapReduce任务,并且配置简单。

从2010年毕业加入阿里巴巴B2B的数据仓库起,我就开始接触Greenplum数据库,并有幸维护了一年多的Greenplum数据库,积累了很多数据库的相关知识。Greenplum在国内的应用相对比较少,尤其是网上资料相当匮乏。在使用Greenplum的过程中,阿里巴巴遇到了很多困难,也积累了很多宝贵经验。

由于学习资料的匮乏,我和何勇有了将阿里巴巴使用Greenplum的一些经验技巧汇聚成书的想法,这样既总结和沉淀了自身知识,同时也可以给国内使用Greenplum的同行们提供一点帮助。本书组织结构

本书从实战角度出发,结合了大量实践案例(附有详细的代码),由浅入深介绍了Greenplum。本书由15章组成,主要分为3篇。

上篇(第1~3章)——基础篇

基础篇目的是帮助读者快速了解Greenplum,从实战的角度介绍一些入门必备的基础知识。从如何安装部署Greenplum开始,一步步引导读者搭建自己的Greenplum数据库,然后介绍基本的语法及相关操作。本篇最后通过分析两个具体的数据仓库ETL的案例,加强读者对Greenplum功能特性的了解,提高实践能力。

中篇(第4~7章)——进阶篇

进阶篇重点介绍Greenplum的数据字典、执行计划、架构以及一些高级特性。

数据字典是Greenplum对元数据信息的组织方式,执行计划是数据库执行SQL的灵魂,高级特性则是Greenplum的优势所在。本篇结合了大量案例对以上内容进行了深入分析。通过对这些内容的学习,可以深入理解数据库的工作原理,是进阶的必经之路,可以让读者游刃有余地应对各种Greenplum的日常操作。

下篇(第8~15章)——管理篇

管理篇主要介绍一些与数据库管理员相关的知识,包括线上部署、性能优化、权限控制、监控、容灾/扩容方案、常用脚本以及常见问题等。这些更偏向于后台管理,是DBA必修的课程。本书面向的读者

阅读本书需要读者对关系型数据库有基本了解,最好也了解一些Linux的基本操作。本书面向的读者主要有:

·Greenplum数据库管理员

·使用Greenplum的ETL开发工程师

·数据库爱好者、分布式系统爱好者

·数据分析师、商业智能分析师如何阅读本书

对于刚接触Greenplum的读者来说,建议从第1章读起,书中有很多结合实践的例子,帮助读者加深对Greenplum的理解。

如果对Greenplum已经比较熟悉,可以从第4章开始读起,应重点关注第5章讲解分布式执行计划。了解执行计划是熟悉数据库工作原理的一种有效方法,分布式执行计划与普通执行计划还是有较大差别的。

如果只是想通过本书了解Greenplum数据库与普通关系型数据库的差异,可以先阅读第7章,了解Greenplum架构,然后再选取自己喜欢的章节进行阅读。

本书偏向于实战,理论方面的知识相对较少,感兴趣的读者可以结合其他介绍数据库的资料进行阅读,如“PostgreSQL8.2官方文档”、《数据库系统概念》、《数据库系统实现》。

虽然Greenplum并不是开源的,但是Greenplum是基于PostgreSQL开发的,而PostgreSQL是开源的。还有,Greenplum自带了很多维护脚本,大部分采用Shell和Python编写。因此,对于想深入理解Greenplum的读者来说,建议结合PostgreSQL源码及Greenplum安装目录下的一些脚本代码进行阅读。通过阅读这些源码,可以加深对Greenplum底层的了解。

本书大部分例子都是基于Greenpum 4.1版本进行编写的,在写作的过程,Greenplum已经升级到Greenpum 4.3,因此在书稿快完成时,笔者对全书进行了审核。由于Greenplum 4.3与Greenplum 4.1大部分的内容都是相同的,因此,笔者在书稿中必要的地方采用修改或备注的方式加入了一些Greenplum 4.3的新特性,尽量保证了本书的时效性。勘误和支持

本书第1、3、7、8、14章由何勇撰写,其余章节由陈晓峰撰写,由于是第一次写作,在写作上肯定会有很多的不足,加上笔者能力有限,难免会有遗漏或错误。如果读者发现书中有遗漏或错误的地方,可以发邮件到greenplum_book@163.com,同时欢迎大家通过邮件一起交流关于Greenplum的问题。致谢

感谢姜迅、吴伟两位老大,我在阿里巴巴B2B数据平台工作时他们给予了我很多帮助,是他们给予了我充足的时间来学习和锻炼;感谢孔令西、孙伟光、张耀耀、江小辉、曾春秋等各位同事对我工作的支持和帮助;感谢一起维护Greenplum数据库的何勇、唐成、王海、任振中,他们带给我一段难忘的共同奋斗的经历。特别感谢女友李梅花在写书过程中的支持和体谅,她作为一个数据分析师,从用户的角度,在本书写作过程中给予了很多宝贵的建议。没有这些支持,我们不可能完成本书的写作。

最后,感谢杨福川、姜影在本书出版过程中提供的帮助,尤其是姜影,她在本书审阅过程中非常认真和仔细,指出了书稿中很多的问题。陈晓峰上篇基础篇■第1章 Greenplum简介■第2章 Greenplum快速入门■第3章 Greenplum实战第1章Greenplum简介

本章先介绍Greenplum的产生背景、特性及应用场景、与PostgreSQL关系,以及发展历程。1.1 Greenplum的起源和发展历程

短短十多年,互联网在中国经历了从门户网站、搜索、即时通信、游戏娱乐、垂直细分……到电子商务、Web 2.0,再到社会化网络、移动互联网的一系列进化和变革。无论是互联网还是移动互联网,都是由海量的数据构成。对海量数据分析的需求开始突破传统边界,不再局限于电信、移动、金融、保险、制造等传统企业,涌现出大批将海量、庞杂的数据转化为知识,提供业务经营决策支持的企业。针对数据密集型计算中的海量数据处理这一问题,研究者开始考虑如何利用大规模集群系统所具有的可伸缩性和容错性的优势,实现高效的数据管理功能。比较典型的解决方案有Teradata、Greenplum、Hadoop Hive、Oracle Exadata、IBM Netteza等。

Greenplum是一家总部位于美国加利福尼亚州,为全球大型企业用户提供新型企业级数据仓库(EDW)、企业级数据云(EDC)和商务智能(BI)提供解决方案和咨询服务的公司。选择Greenplum的产品的国际大客户有:纳斯达克、纽约证券交易所、Skype.FOX、T-Mobile等,在中国,中信实业银行、东方航空公司、阿里巴巴、华泰保险、中国远洋(Cosco)、李宁公司等大型企业用户也选择了Greenplum的产品。Greenplum的发展历程简要如下。

·2003:Greenplum由Scott Yara和Luke Lonergan成立。

·2005:Greenplum数据库第一个版本发布。

·2006:与Sun公司合作,成为其合伙人。

·2008:Greenplum MapReduce发布,同年12月份进入中国市场,一年多后,Greenplum正式宣布在中国独立运营。

·2010:Greenplum被EMC收购,并被整合到EMC的云计算战略中。

·2011—2012:Greenplum社区版发布,Greenplum Chorus发布并开源。

·2014:Greenplum 4.3发布。1.2 OLTP与OLAP

数据库系统一般分为两种类型,一种是面向前台应用的,应用比较简单,但是重吞吐和高并发的OLTP类型;一种是重计算的,对大数据集进行统计分析的OLAP类型。Greenplum属于后者,下面简单介绍下这两种数据库系统的特点。

OLTP(On-Line Transaction Processing,联机事务处理)系统也称为生产系统,它是事件驱动的、面向应用的,比如电子商务网站的交易系统就是一个典型的OLTP系统。OLTP的基本特点是:

·数据在系统中产生;

·基于交易的处理系统(Transaction-Based);

·每次交易牵涉的数据量很小;

·对响应时间要求非常高;

·用户数量非常庞大,主要是操作人员;

·数据库的各种操作主要基于索引进行。

OLAP(On-Line Analytical Processing,联机分析处理)是基于数据仓库的信息分析处理过程,是数据仓库的用户接口部分。OLAP系统是跨部门的、面向主题的,其基本特点是:

·本身不产生数据,其基础数据来源于生产系统中的操作数据(OperationalData);

·基于查询的分析系统;

·复杂查询经常使用多表联结、全表扫描等,牵涉的数据量往往十分庞大;

·响应时间与具体查询有很大关系;

·用户数量相对较小,其用户主要是业务人员与管理人员;

·由于业务问题不固定,数据库的各种操作不能完全基于索引进行。1.3 PostgreSQL与Greenplum的关系1.3.1 PostgreSQL

PostgreSQL是一种非常先进的对象–关系型数据库管理系统(ORDBMS),是目前功能最强大,特性最丰富和技术最先进的自由软件数据库系统之一,其某些特性甚至连商业数据库都不具备。这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目,并且有非常广泛的用户。

PostgreSQL的特点可以说是数不胜数,称其为最先进的开源软件数据库当之无愧,支持绝大部分的主流数据库特性,主要体现在如下几方面。(1)函数/存储过程

PostgreSQL对非常丰富的过程类语言提供支持,可以编写自定义函数/存储过程。

·内置的plpgsql,一种类似Oracle的PLsql的语言。

·支持的脚本语言有:PL/Lua、PL/LOLCODE、PL/Perl、PL/HP、PL/Python、PL/Ruby、PL/sh、PL/Tcl和PL/Scheme。

·编译语言有C、C++和JAVA。

·统计语言PL/R。(2)索引

PostgreSQL支持用户定义的索引访问方法,并且内置了B-tree、哈希和GiST索引。PostgreSQL中的索引有下面几个特点。

·可以从后向前扫描。

·可以创建表达式索引。

·部分索引。(3)触发器

触发器是由SQL查询的动作触发的事件。比如,一个INSERT查询可能激活一个检查输入值是否有效的触发器。大多数触发器都只对INSERT或者UPDATE查询有效。

PostgreSQL完全支持触发器,可以附着在表上,但是不能在视图上。不过视图可以有规则。多个触发器是按照字母顺序触发的。我们还可以用其他过程语言书写触发器函数,不仅仅PL/PgSQL。(4)并发管理(MVCC)

PostgreSQL的并发管理使用的是一种叫做“MVCC”(多版本并发机制)的机制,这种机制实际上就是现在在众多所谓的编程语言中极其火爆的“Lock Free”,其本质是通过类似科幻世界的时空穿梭的原理,给予每个用户一个自己的“时空”,然后通过原子的“时空”控制来控制时间基线,并以此控制并发更改的可见区域,从而实现近乎无锁的并发,而同时还能在很大程度上保证数据库的ACID特性。(5)规则(RULE)

规则允许我们对由一个查询生成的查询树进行改写。(6)数据类型

PostgreSQL支持非常广泛的数据类型,包括:

·任意精度的数值类型;

·无限长度的文本类型;

·几何原语;

·IPv4和IPv6类型;

·CIDR块和MAC地址;

·数组。

用户还可以创建自己的类型,并且可以利用GiST框架把这些类型做成完全可索引的,比如来自PostGIS的地理信息系统(GIS)的数据类型。(7)用户定义对象

因为PostgreSQL使用一种基于系统表的可扩展的结构设计,所以PostgreSQL内部的几乎所有对象都可以由用户定义,这些对象包括:

·索引;

·操作符(内部操作符可以被覆盖);

·聚集函数;

·域;

·类型转换;

·编码转换。(8)继承

PostgreSQL的表是可以相互继承的。一个表可以有父表,父表的结构变化会导致子表的结构变化,而对子表的插入和数据更新等也会反映到父表中。(9)其他特性与扩展

PostgreSQL还支持大量其他的特性,比如:

·二进制和文本大对象存储;

·在线备份;

·TOAST(The Oversized-Attribute Storage Technique)用于透明地在独立的地方保存大的数据库属性,当数据超过一定大小的时候,会自动进行压缩以节省空间;

·正则表达式。

此外PostgreSQL还有大量的附加模块和扩展版本,比如,多种不同的主从/主主复制方案:

·Slony-I;

·pgcluster;

·Mammoth replicator;

·Bucardo。1.3.2 Greenplum

简单地说,Greenplum就是一个与Oracle、DB2、PostgreSQL一样面向对象的关系型数据库。我们通过标准的SQL可以对Greenplum中的数据进行访问存取。

本质上讲,Greenplum是一个关系型数据库集群,它实际上是由数个独立的数据库服务组合成的逻辑数据库。与Oracle RAC的Shared-Everything架构不同,Greenplum采用Shared-Nothing架构,整个集群由很多个数据节点(Segment Host)和控制节点(Master Host)组成,其中每个数据节点上可以运行多个数据库。简单来说,Shared-Nothing是一个分布式的架构,每个节点相对独立。在典型的Shared-Nothing中,每一个节点上所有的资源(CPU,内存,磁盘)都是独立的,每个节点都只有全部数据的一部分,也只能使用本节点的资源。

基于对Shared-Nothing分布式架构模式的分析,Greenplum高效处理I/O数据吞吐和并发计算的过程就很好理解了。在Greenplum中,需要存储的数据在进入数据库时,将先进行数据分布的处理工作,将一个表中的数据平均分布到每个节点上,并为每个表指定一个分发列(distribute Column),之后便根据Hash来分布数据。基于Shared-Nothing的原则,Greenplum这样处理可以充分发挥每个节点处I/O的处理能力。在这一过程中,控制节点(Master Host)将不再承担计算任务,而只负责必要的逻辑控制和客户端交互。I/O瓶颈的解决为并行计算能力的提升创造了良好的环境,所有节点服务器组成一个强大的计算平台,实现快速的海量并行运算。Greenplum在数据仓库、商业智能的应用上,尤其是在海量数据的处理方面性能极其优异。

Greenplum是面向数据仓库应用的关系型数据库,它是基于目前流行的PosgreSQL开发的,跟PostgreSQL的兼容性非常好,大部分的PostgreSQL客户端工具及PostgreSQL应用都能运行在Greenplum平台上。1.4 Greenplum特性及应用场景1.4.1 Greenplum特性(1)支持海量数据存储和处理

当今是个数据迅速增长的时代,数据量从过去的MB到GB,再到TB增长到现在的PB级规模,传统的OLTP数据库在TB级别以上的数据管理中已经捉襟见肘。Greenplum使用MPP架构,同时使用多台机器并行计算,极大地提高了对海量数据的处理能力。采取MPP架构的数据库系统才能对海量数据进行管理。(2)高性价比

Greenplum数据库可以搭建在业界各种开放式硬件平台上,在硬件选型上有很强的自由性。

相比其他封闭式数据仓库专用系统及Hadoop分析平台,Greenplum在每TB数据量上的投资是前者的1/5甚至更低。

Greenplum licence相比Oracle RAC、Teradata等,价格低廉。

Greenplum易于维护,可以节省大量的维护成本。(3)支持Just In Time BI

Greenplum通过准实时、实时的数据加载方式,实现数据仓库的实时更新,进而实现动态数据仓库(ADW)。基于动态数据仓库,业务用户能对当前业务数据进行BI实时分析(Just In Time BI),能够让企业敏锐感知市场的变化,加快决策支持反应速度。(4)系统易用性

Greenplum是基于PostgreSQL开发的,语法与PostgreSQL几乎一样,PostgreSQL的工具基本上都能够在Greenplum中使用,比如pgadmin等。Greenplum使用通用的PostgreSQL连接包即可与数据库连接,支持绝大部分开发语言。Greenplum的易用性具体表现如下。

·支持主流的SQL语法,使用起来十分方便,学习成本低。

·扩展性好,支持多语言的自定义函数和自定义类型等。

·提供了大量的维护工具,使用维护起来很方便。

·在Internet上有着丰富的PostgreSQL资源供用户参考。(5)支持线性扩展

Greenplum采用MPP并行处理架构。在MPP架构中增加节点就可以线性提高系统的存储容量和处理能力。Greenplum在扩展节点时操作简单,在很短时间内就能完成数据的重新分布。Greenplum线性扩展支持为数据分析系统将来的拓展提供了技术上的保障,使用户可根据实施需要进行容量和性能的扩展。(6)较好的并发支持及高可用性支持

Greenplum是高可用的系统,在已有案例中最多使用了96台机器的集群MPP环境。除了硬件级的Raid技术外,Greenplum还提供数据库层Mirror机制保护,也就是将每个节点的数据在另外的节点中同步镜像,单个节点的错误不影响整个系统的使用。对于主节点,Greenplum提供Master/Stand by机制进行主节点容错,当主节点发生错误时,可以切换到Stand by节点继续服务。(7)支持MapReduce

MapReduce已经被谷歌和雅虎等互联网领先企业证明是一种大规模数据分析技术,Greenplum将这种能力提供给企业。(8)数据库内部压缩

面对海量数据,压缩可以节省很大的空间,而且在对大数据的分析时,压缩也可能减少对磁盘的访问。Greenplum支持对数据库表进行压缩处理,从而提升数据库的性能。1.4.2 Greenplum应用场景

Greenplum数据引擎是为新一代数据仓库和大规模分析处理而建立的软件解决方案,其最大的特点是不需要高端的硬件支持仍然可以支撑大规模的高性能数据仓库和商业智能查询。在数据仓库、商业智能的应用上,尤其在海量数据的处理方面Greenplum表现出极其优异的性能。

传统数据库侧重交易处理,关注的是多用户的同时的双向操作,在保障即时性的要求下,系统通过内存来处理数据的分配、读写等操作,存在IO瓶颈。而分析型数据库是以实时多维分析技术作为基础,对数据进行多角度的模拟和归纳,从而得出数据中所包含的信息和知识。Greenplum虽然是关系型数据库产品,但是它具有查询速度快、数据装载速度快、批量DML处理快的主要特点,而且性能可以随着硬件的添加呈线性增加,拥有非常良好的可扩展性。因此,Greenplum主要适用于面向分析的应用,比如构建企业级ODS/EDW、数据集市等。

在国内,笔者所在公司——阿里巴巴(中国)网络技术有限公司,从2008年开始引入Greenplum,将原有的Oracle RAC迁移到Greenplum上,作为数据仓库的计算中心,其中一个应用就是通过分析用户的网络点击日志进行产品的关联分析。支付宝在2008年也引入了Greenplum数据库作为数据中心。国内还有很多银行也引入了Greenplum作为基础的数据平台,如北京银行、深发展银行、中信银行信用卡中心等。在TB级的数据仓库的OLAP应用中Greenplum在易用性和性能方面有着很大的优势。1.5 小结

本章非常简短地介绍了Greenplum产生的背景,并分别对比OLTP与OLAP、PostgreSQL和Greenplum,另外简要介绍了Greenplum的特性、应用场景及发展历程,相信通过这一章能让读者在总体上对Greenplum有所认识。第2章Greenplum快速入门

本章将介绍如何快速安装部署Greenplum,以及Greenplum的一些常用命令及工具。“工欲善其事,必先利其器”,因此我们先从如何安装Greenplum开始介绍,然后介绍一些简单的工具,以及Greenplum的语法及特性。

为了让读者更加快速地入门,避免涉及太多底层的东西。本章不会涉及硬件选型、操作系统参数讲解、机器性能测试等高级内容,这些会在“第8章Greenplum线上环境部署”中介绍。2.1 软件安装及数据库初始化

下面先介绍如何搭建一个完整的Greenplum环境。在搭建环境之前,我们必须对Greenplum的架构有一定的了解,并且准备好安装部署的机器,机器硬件、操作系统的安装配置读者可自行完成。2.1.1 Greenplum架构

在安装数据库的时候,我们先要对Greenplum架构有一定的了解,这样可以对数据库的安装和使用起到一个指导性的作用。同时在搭建Greenplum环境的过程中,可以加深对Grenplum架构的理解。Greenplum总体架构图如图2-1所示。图2-1 Greenplum总体架构图

下面介绍每个部件的主要功能,如表2-1所示。表2-1 Master主机与Segment主机对比

通过图2-2可以看出Master与Segment的关系。图2-2 Master与Segment的关系

Master和Segment其实都是一个单独的PostgreSQL数据库。每一个都有自己单独的一套元数据字典,在这里,Master节点一般也叫主节点,Segment也叫做数据节点。

Segment节点与Master节点的通信,通过千兆(或万兆)网卡组成的内部连接(InterConnect),在同一台数据节点机器上可以放多个Segment,不同的Segment节点会被赋予不同的端口,同时,Segment之间也不断地进行着交互。为了实现高可用,每个Segment都有对应的备节点(Mirror Segment),分别存在于不同的机器上。

Client一般只能与Master节点进行交互,Client将SQL发给Master,然后Master对SQL进行分析后,再将其分配给所有的Segment进行操作,并且将汇总结果返回给客户端。2.1.2 环境搭建1.Greenplum集群介绍

在这里的Greenplum集群中,有4台机器,IP分别是:

·10.20.151.7;

·10.20.151.8;

·10.20.151.9;

·10.20.151.10。

机器对应的Master和Segment如下分配:10.20.151.7作为Master节点,10.20.151.8~10作为Segment节点,每个机器上配置两个Primary Segment和两个Mirror Segment;同时10.20.151.10作为Master Standy节点。

通过图2-3的架构图可以清晰地知道我们所搭建的集群的概况。图2-3 安装测试环境的Greenplum架构2.安装Linux

Greenplum没有Windows版本,只能安装在类UNIX的操作系统上,例如:

·SUSE Linux SLES 10.2 or higher;

·CentOS 5.0 or higher;

·RedHat Enterprise Linux 5.0 or higher;

·Solaris x86 v10 update 7。

如果读者没有现成的Linux机器,可以在虚拟机(如VMWare)上安装,用户可自行安装VMWare及对应的Linux操作系统,网上相应的资料很多,这里就不再阐述。3.数据库存储

对于数据库来说,在性能上磁盘IO很容易成为瓶颈,由于数据库的特性,每一个SQL基本都是对全表数据进行分析,每次处理的数据量非常大,数据基本上都是没有缓存的(数据字典除外),极度消耗IO资源(全表扫描主要都是顺序IO),所以Greenplum对存储的要求比较高。在文件系统的选择上,在Linux下建议使用XFS,在Solaris下建议使用ZFS,对于Raid根据需求选择硬Raid或软Raid,如果需要更大的空间,建议使用Raid 5,如果对性能有更高的要求,可以选择Raid 1+0。相关内容请参考第8章关于Greenplum线上环境部署的介绍。

如果只是想试用Greenplum,数据量比较小,那么怎么存储无所谓,可以用任意的目录作为数据库数据目录。4.网络(hosts)

在确定机器配置的时候,要保证所有机器的网络都是通的,并且每台机器的防火墙都是关闭的,避免存在网络不通的问题。

在配置/etc/hosts时,习惯将Master机器叫做mdw,将Segment机器叫做sdw,配置好后,使用ping命令确定所有hostname都是通的。#cat /etc/hosts#BEGIN_GROUP_CUSTOMER127.0.0.1 localhost localhost.localdomain10.20.151.7 dw-greenplum-1 mdw10.20.151.8 dw-greenplum-2 sdw110.20.151.9 dw-greenplum-3 sdw210.20.151.10 dw-greenplum-4 sdw3#END_GROUP_CUSTOMER5.创建用户及用户组

创建gpadmin用户及用户组,将其作为安装Greenplum的操作系统用户。

将原有用户删除:#groupdel gpadmin#userdel gpadmin

创建新的用户和用户组:#groupadd -g 530 gpadmin#useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin

对文件夹进行赋权,为新用户创建密码:#chown -R gpadmin:gpadmin /home/gpadmin/#passwd gpadminChanging password for user gpadmin.New UNIX password:Retype new UNIX password:2.1.3 Greenplum安装1.安装数据库软件

读者可以在Greenplum官网上下载最新版本的Greenplum,下载地址是:https://network.gopivotal.com/products/pivotal-gpdb,如图2-4所示。图2-4 官方网站Greenplum下载页面

选择相应的操作系统版本,比如RedHat操作系统选择“RHEL”,下载时需要在网站上注册一个账号,如图2-5所示。

读者可以选择自己需要的版本下载,这里以正式版本Greenplum 4.1.1.1为例,介绍如何安装Greenplum。图2-5 Greenplum版本选择注意 Greenplum最新版本是Greenplum 4.3,但是安装方式都是一样的。

首先准备好安装文件:greenplum-db-4.1.1.1-build-1-RHEL5-x86_64.zip

执行unzip命令解压安装文件:unzip greenplum-db-4.1.1.1-build-1-RHEL5-x86_64.zip

解压后生成两个文件:

·README_INSTALL;

·greenplum-db-4.1.1.1-build-1-RHEL5-x86_64.bin。

为Greenplum软件创建安装目录,并且赋给gpadmin用户权限:mkdir /opt/greenplumchown -R gpadmin:gpadmin /opt/greenplum

执行以下命令开始安装软件:./greenplum-db-4.1.1.1-build-1-RHEL5-x86_64.bin

屏幕上会出现License的一些信息,按“空格”键使信息显示完全,如图2-6所示。

确认License之后,接着出现如图2-7所示的信息。

输入“yes”后会提示安装目录,我们选择安装在/opt/greenplum/greenplum-db-4.1.1.1下面,如图2-8所示。图2-6 安装Greenplum的License信息图2-7 是否接受License图2-8 选择安装目录

完成以上步骤后,软件开始自动安装。最后显示软件安装成功,安装目录如图2-9b所示。图2-9 安装后的Greenplum软件目录

Greenplum的环境变量已经在greenplum_path.sh中设置了,这里需要应用一下这个环境变量配置:source /opt/greenplum/greenplum-db/greenplum_path.sh2.配置hostlist

配置hostlist文件,将所有的服务器名记录在里面。[gpadmin@dw-greenplum-1 conf]$ cat hostlist mdwsdw1sdw2sdw3

seg_hosts只保存segment节点的hostname。[gpadmin@dw-greenplum-1 conf]$ cat seg_hosts sdw1sdw2sdw33.使用gpssh-exkeys打通所有服务器

使用gpssh-exkeys将所有机器的通道打开,这样就不用输入密码使登录在每台机器之间跳转了,代码如下:[gpadmin@dw-greenplum-1 conf]$ gpssh-exkeys -f hostlist [STEP 1 of 5] create local ID and authorize on local host[STEP 2 of 5] keyscan all hosts and update known_hosts file[STEP 3 of 5] authorize current user on remote hosts ... send to sdw1 *** *** Enter password for sdw1: ... send to sdw2 ... send to sdw3[STEP 4 of 5] determine common authentication file content[STEP 5 of 5] copy authentication files to all remote hosts ... finished key exchange with sdw1 ... finished key exchange with sdw2 ... finished key exchange with sdw3[INFO] completed successfully

在打通所有机器通道之后,我们就可以使用gpssh命令对所有机器进行批量操作了。[gpadmin@dw-greenplum-1 conf]$ gpssh -f hostlist => pwd[sdw3] /home/gpadmin[ mdw] /home/gpadmin[sdw1] /home/gpadmin[sdw2] /home/gpadmin4.将软件分发到每一台机器上

接下来将安装后的文件打包:tar -cf gp4.1.tar greenplum-db-4.1.1.1/

然后利用gpscp命令将这个文件复制到每一台机器上:gpscp -f /home/gpadmin/conf/hostlist gp4.1.tar =:/opt/greenplum

使用gpssh命令批量解压文件包:=> cd /opt/greenplum[sdw3][ mdw][sdw1][sdw2]=> tar -xf gp4.1.tar[sdw3][ mdw][sdw1][sdw2]

建立软连接,如图2-10所示。图2-10 建立Greenplum安装路径的软连接

下面创建数据库数据目录。

·MASTER目录:=> mkdir -p /home/gpadmin/gpdata/gpmaster

·Primary节点目录:=> mkdir -p /home/gpadmin/gpdata/gpdatap1=> mkdir -p /home/gpadmin/gpdata/gpdatap2

·Mirror节点目录:=> mkdir -p /home/gpadmin/gpdata/gpdatam1=> mkdir -p /home/gpadmin/gpdata/gpdatam2

Gpmaster目录保存Master的数据,每个机器上的gpdatap1、gpdatap2分别对应这个机器上的两个主数据节点目录,同样的,gpdatam1、gpdatam2对应备数据节点目录。5.配置~/.bash_profile

要对系统的环境变量进行配置,需要修改~/.bash_profile,添加以下内容:source /opt/greenplum/greenplum-db/greenplum_path.shexport MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1export PGPORT=2345export PGDATABASE=testDB

其中greenplum_path.sh保存了运行Greenplum的一些环境变量设置,包括GPHOME、PYTHONHOME等设置。6.初始化Greenplum的配置文件

配置文件的模板可以在$GPHOME/docs/cli_help/gpconfigs/目录下找到。gpinitsystem_config文件是初始化Greenplum的模板,在这个模板中,Mirror Segment的配置都被注释掉了,模板中基本初始化数据库的参数都是有的。

下面是初始化的配置文件initgp_config。#数据库的代号ARRAY_NAME="Greenplum" MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts #Segment的名称前缀SEG_PREFIX=gpseg #Primary Segment起始的端口号PORT_BASE=33000 #指定Primary Segment的数据目录declare -a DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatap1 /home/gpadmin/gpdata/gpdatap2)#Master所在机器的HostnameMASTER_HOSTNAME=mdw#指定Master的数据目录MASTER_DIRECTORY=/home/gpadmin/gpdata/gpmaster #Master的端口MASTER_PORT=2345#指定Bash的版本TRUSTED_SHELL=/usr/bin/ssh#字符集ENCODING=UNICODE#Mirror Segment起始的端口号MIRROR_PORT_BASE=43000#Primary Segment主备同步的起始端口号REPLICATION_PORT_BASE=34000#Mirror Segment主备同步的起始端口号MIRROR_REPLICATION_PORT_BASE=44000#Mirror Segment的数据目录declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/gpdata/gpdatam1 /home/gpadmin/gpdata/gpdatam2)7.初始化数据库

使用gpinitsystem脚本来初始化数据库,命令如下:gpinitsystem -c initgp_config -s sdw3

根据脚本出现的提示操作即可,如图2-11所示。图2-11 初始化数据库

这样,数据库就初始化成功了,尝试登录Greenplum默认的数据库postgres:[gpadmin@dw-greenplum-1 ~]$ psql -d postgrespsql (8.2.15)Type "help" for help.postgres=#2.1.4 创建数据库

现在我们开始创建测试数据库:createdb testDB -E utf-8

没有设置PGDATABASE这个环境变量时,使用psql进行登录,默认的数据库是与操作系统用户名一致的,这时候会报错: [gpadmin@dw-greenplum-1 ~]$ psqlpsql: FATAL: database "gpadmin" does not exist

然后设置(export)环境变量PGDATABASE=testDB,这样就默认登录testDB数据库:[gpadmin@dw-greenplum-1 ~]$ export PGDATABASE=testDB [gpadmin@dw-greenplum-1 ~]$ psqlpsql (8.2.15)Type "help" for help.testDB=#

查询数据库版本并创建一张简单的表:testDB=# select version();version---------------------------------------------------------- PostgreSQL 8.2.15 (Greenplum Database 4.1.1.1 build 1) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2 compiled on May 12 2011 18:07:08(1 row)testDB=# create table test01(id int primary key,name varchar(128));NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test01_pkey" for table "test01"CREATE TABLE2.1.5 数据库启动与关闭1.启动数据库

Greenplum提供一系列的脚本来管理数据库,其中gpstart就是启动数据库的脚本,我们可以用gpstart–help来查看帮助,例如:[gpadmin@inc-dw-hadoop-151-7 ~]$ gpstart --helpCOMMAND NAME: gpstartStarts a Greenplum Database system.*****************************************************SYNOPSIS*****************************************************gpstart [-d ] [-B ] [-R] [-m] [-y] [-a] [-t ] [-l logfile_directory] [-v | -q]gpstart -? | -h | --helpgpstart --version

一般用gpstart-a直接启动数据库,不用输入“yes”,如图2-12所示。图2-12 启动数据库2.关闭数据库

关闭数据库的脚本是gpstop,其使用方法如下:COMMAND NAME: gpstopStops or restarts a Greenplum Database system.*****************************************************SYNOPSIS*****************************************************gpstop [-d ] [-B ] [-M smart | fast | immediate] [-t ] [-r] [-y] [-a] [-l ] [-v | -q]gpstop -m [-d ] [-y] [-l ] [-v | -q]gpstop -u [-d ] [-l ] [-v | -q] gpstop --versiongpstop -? | -h | --help

与gpstart一样,在关闭数据库时,一般使用gpstop-a,这样就不用输入“yes”了,如图2-13所示。图2-13 关闭数据库2.2 安装Greenplum的常见问题

安装Greenplum最常见的错误就是环境变量设置错误,网卡配置错误,或者是每个Segment的通道或网络没有打通。

如果子节点的操作系统环境不一样,也可能会导致各种各样的错误。所以在搭建环境的时候,要求每一台机器的配置基本一样,方便以后管理与维护,避免一些奇怪的问题。下面将介绍几个常见的报错及处理方法。2.2.1 /etc/hosts配置错误

现在来看一个奇怪的报错SQL,查询一张普通表时报如下错误,但是查询数据字典又不报错:testDB=# select * from test002;WARNING: Greenplum Database detected segment failure(s), system is reconnectedWARNING: Greenplum Database detected segment failure(s), system is reconnectedERROR: No primary gang allocated (cdbgang.c:1635)testDB=# select count(1) from pg_class; count ------- 633(1 row)

报这个错误是因为Master连接不到Segment。如果原先是一个正常的系统,突然报错了,就要想想是否修改了什么导致的。在这个例子中,是因为修改了/etc/hosts,不小心将:10.20.151.8 inc-dw-hadoop-151-8 sdw1

改成了:10.20.151.18 inc-dw-hadoop-151-8 sdw1

Master连接Segment的时候连接不上,就报了这个错误,但是pg_class是每一个节点都有的,而Master上的数据只需要在Master上查询,不用连接Segment,所以没有报错,只需将配置修改回来即可。

有些时候,也可以利用这个方法来判断一个操作是否需要与Master交互,比如生成执行计划(关于执行计划的详细内容可阅读第5章)是否只在Master上执行,与Segment有没有交互:testDB=# explain select * from test002;WARNING: Greenplum Database detected segment failure(s), system is reconnectedWARNING: Greenplum Database detected segment failure(s), system is reconnectedERROR: No primary gang allocated (cdbgang.c:1635)testDB=# explain select count(1) from pg_class; QUERY PLAN ------------------------------------------------------------------ Aggregate (cost=39.20..39.21 rows=1 width=0) -> Seq Scan on pg_class (cost=0.00..20.48 rows=7488 width=0)(2 rows)

这样就可以看出,生成分布式执行计划也是需要与Segment进行交互的。那么为什么下面生成pg_class的执行计划不会报错呢?这是因为表test002是业务数据,数据分布在Segment上,生成的执行计划是分布式的,而pg_class是保存表元数据信息的数据字典,数据保存在Master上,生成的执行计划是单机的,详见第5章执行计划。注意 在Greenplum 4.3中,这个报错是:ERROR:Unexpected internal error(cdbgang.c:1622)。报错的内容与原因都是一样的,只是在显示上Greenplum 4.1与Greenplum 4.3有所区别。

在Greenplum 3.3.x版本中,如果修改了Master的/etc/hosts配置,将:127.0.0.1 localhost localhost.localdomain

错写成:127.0.0.1 localhost localhost.localdomain mdw

那么还会有如下的奇怪现象发生。

在创建表的时候Master没有报错,说明Master与Segment是可以通信的,但是查询这张表的时候就会报如下的错误:testDB=# create table aaa(like bbb);NOTICE: Table doesn't have 'distributed by' clause, defaulting to distribution columns from LIKE tableCREATE TABLEtestDB =# select * from bbbb;ERROR: Interconnect timeout: Unable to complete setup of all connections within time limit.DETAIL: Completed 2 of 6 incoming and 0 of 0 outgoing connections.gp_interconnect_setup_timeout = 20 seconds.

错误提示已经超时了,建议将超时时间设置大一点,但是修改相关参数还是没有用。其实是因为Segment在连接到Master的时候使用的IP是127.0.0.1,指定到了本地机器,导致Segment连接不到Master,故报出这个错误。将Master连接到Segment就没有问题,因此将对应的/etc/hosts修改回来就可以了。提示 将/etc/hosts改回来之后,进行查询后还是报同样的错,这是因为当前连接还没有生效,要退出当前的session,重新连接Greenplum才行。

Greenplum内部会有很多的网络通信交互,因此建议将操作系统的防火墙关闭,避免各种奇怪的问题,其中防火墙就会引起本节介绍的在Greenplum 3.3.x版本中遇到的问题。2.2.2 MASTER_DATA_DIRECTORY设置错误

没有设置MASTER_DATA_DIRECTORY,会报这样的错误:[gpadmin@dw-greenplum-1 ~]$ gpstop

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载