比较前沿的HAWQ

一.HAWQ的历史与现状

  1. 想法和原型系统(2011):GOH阶段(Greenplum Database On HDFS)。

  2. HAWQ 1.0 Alpha(2012):多个国外大型客户试用,当时客户性能测试是Hive的数百倍。促进了HAWQ 1.0作为正式产品发布。

  3. HAWQ 1.0 GA(2013年初):改变了传统MPP数据库架构,包括事务,容错,元数据管等。

  4. HAWQ 1.X版本(2014-2015 Q2):增加了一些企业级需要的功能,比如Parquet存储,新的优化器,Kerberos,Ambari安装部署。客户覆盖全球。

  5. HAWQ 2.0 Alpha发布并成为Apache孵化器项目:针对云环境的系统架构重新设计,数十个高级功能,包括弹性执行引擎,高级资源管理,YARN集成,秒级扩容等等。现在大家在Apache开源的是最新的2.0 Alpha版本。未来的开发都在Apache进行。

二.HAWQ介绍

HAWQ是一个Hadoop原生大规模并行SQL分析引擎,针对的是分析性应用。和其他关系型数据库类似,接受SQL,返回结果集。但它具有大规模并行处理很多传统数据库以及其他数据库没有的特性及功能。让我们考虑一流SQL on Hadoop的各个方面,并将之与HAWQ相比较。

1. 丰富且完全兼容的SQL标准

HAWQ是100%符合ANSI SQL规范并且支持SQL 92、99、2003 OLAP以及基于Hadoop的PostgreSQL。它包含关联子查询、窗口函数、汇总与数据库、广泛的标量函数与聚合函数的功能。用户可通过ODBC和JDBC连接HAWQ。对企业来说,好处是有一个庞大的商业智能、数据分析和数据可视化工具生态系统,由于该系统完全符合SQL支持规范,因此打开后立即可与HAWQ配合使用。另外,越过HAWQ编写的分析应用程序可以轻松移植到其它符合 SQL规范的数据引擎上,反之亦然。这可以防止供应商锁定企业并在控制业务风险的同时促进创新。

2. TPC-DS合规规范

TPC-DS针对具有各种操作要求和复杂性的查询定义了99个模板(例如,点对点、报告、迭代、OLAP、数据挖掘等)。成熟的基于Hadoop的 PostgreSQL系统需要支持和正确执行多数此类查询,以解决各种不同分析工作负载和使用案例中的问题。基准测试是通过TPC-DS中的99个模板生成的111个查询来执行的。依据符合两个要求受支持的查询个数,以下条形图显示了一些基于SQL on Hadoop常见系统的合规等级:1. 每个系统可以优化的查询个数(如,返回查询计划)以及 2. 可以完成执行并返回查询结果的查询个数。

HAWQ的扩展性的SQL支持能力是基于数据仓库的代码库,HAWQ成功完成了全部111个查询。这些结果的详细信息公布在关于大数据模块化查询优化器架构的ACM Sigmod数据管理国际会议的文件中。

3. 可实现灵活高效的连接

HAWQ吸收了最先进的基于代价的SQL查询优化器,在SQL on Hadoop领域是行业先锋。该查询优化器以针对大数据模块化查询优化器架构中的研究结果为基础而设计。 HAWQ能够制定执行计划,可优化使用Hadoop 集群的资源,而不计查询的复杂程度或数据的大小。还可以针对特定环境配置优化器内的成本函数,如:版本、硬件、CPU、IOPS 等。 HAWQ已经过验证,能够快速为涉及超过50个关联表的高要求查询找到理想查询计划,从而成为业内最佳的SQL on Hadoop数据发现与查询引擎。这就使企业能够使用HAWQ以显著降低的成本来降低用于大量数据分析的传统企业数据仓库工作负载要求。

4. 利用线性可扩展性,加速Hadoop查询

HAWQ为PB级SQL on Hadoop操作专门设计。数据直接存储在HDFS上,并且SQL查询优化器中已经为基于HDFS的文件系统性能特征进行过细致的优化。 SQL on Hadoop的主要设计目标是在Hadoop上执行SQL连接时最大程度地降低数据传输的开销。HAWQ采用Dynamic pipelining来解决这一关键要求,使基于HDFS的数据适用于交互式查询。Dynamic pipelining是一种并行数据流框架,结合了以下独特的技术:

  • 适应性高速UDP互联技术。

  • 操作运行时执行环境,是所有SQL查询的基础,并针对大数据工作负载进行了调整。

  • 运行时资源管理层,它确保查询的完整性,即使在重度负载集群里出现其它要求极高的查询。

  • 无缝数据分配机制,它将经常用于特定查询的部分数据集集中起来。

大数据模块化查询优化器架构中突出的性能分析显示,对于基于Hadoop的分析与数据仓储工作负载,HAWQ要比现有Hadoop查询引擎快一或两个数量级。这些性能改进主要归功于Dynamic pipelining和HAWQ内基于成本的查询优化器的强大功能。这使HAWQ能够帮助企业以显著降低的成本摆脱企业数据仓库工作负载。

5. 一体化深度分析与机器学习功能

除表连接与聚合外,数据分析通常还需要使用统计学、数学和机器学习算法,如拟合和主成分分析等,这些代码需要进行重构,以便在并行环境中高效运行。这正在成为SQL on Hadoop方案的基本要求。 HAWQ利用可扩展数据库内分析的开源库MADLib来提供这些功能,从而通过用户定义的函数扩展SQL on Hadoop能力。MADLib还支持在 PL/R、PL/Python和PL/Java环境中实施用户定义函数(UDF)来指定自定义机器学习能力。对于有此类需求的用户场景来说,这将使其能在通常的分析型工作负载中嵌入高级机器学习的分析能力。

6. 数据联合能力

SQL on Hadoop可以联合外部数据源数据,提供更多灵活性,能够将各种来源的数据结合起来进行分析。数据通常是跨其它分析/企业数据仓库、HDFS、Hbase以及Hive实例进行联合的,且需要利用基于SQL on Hadoop实施所固有的并行性。HAWQ通过名为Pivotal eXtension Framework(PXF)的模块提供数据联合功能。除了常见的数据联合功能外,PXF还利用SQL on Hadoop提供其它具有行业特色的能力:

  • 任意大数据集低延迟:PXF使用智能抓取,其过滤器下推到Hive和Hbase。查询工作负载被下推到联合数据堆栈,从而尽可能减少数据移动和改善延迟性能,尤其是对于交互式查询而言。

  • 可扩展且可自定义:PXF提供框架API以便客户为其自有数据堆栈开发新的连接器,进而增强数据引擎的松散耦合和避免实施端对端分析使用案例时常常需要执行的数据重构操作。

  • 高效:PXF利用ANALYZE可收集外部数据的统计资料。这样可通过基于代价的优化器优化联合数据源统计信息,帮助联合环境构建更高效的查询。

7.高可用性和容错能力

HAWQ支持各种事务,是SQL on Hadoop方案的首选。事务允许用户隔离Hadoop上的并行活动并在出错时进行回滚。HAWQ的容错性、可靠性和高可用性三个特点能容忍磁盘级与节点级故障。这些能力可确保业务的连续性,并且实现了将更多关键业务分析迁移到到HAWQ上运行。

8.原生Hadoop文件格式支持

HAWQ在Hadoop中支持AVRO、Parquet和本地HDFS文件格式。这在最大程度上减少了数据摄取期间对ETL的需求,并且利用HAWQ实现了 schema-on-read(读时模式)类处理。对ETL和数据移动需求的减少直接有助于降低分析解决方案的拥有成本。

9.通过Apache Ambari进行原生的Hadoop管理

HAWQ使用Apache Ambari作为管理和配置的基础,合适的Ambari插件可以使得HAWQ像其他的通用Hadoop服务一样被Ambari来管理,所以IT管理团队不再需要两套管理界面,一套管理Hadoop,一套管理HAWQ。这样可以使得企业专注于功能场景最小化支持所需的工作量,例如配置和管理。同时,Ambari是完全的Hadoop开源管理和配置工具,消除了供应商绑定和减低商业风险。

10.Hortonworks Hadoop兼容

为了更进一步的跟进开放数据联盟ODP的步伐,HAWQ可以与Hortonworks HDP大数据体系无缝兼容,使得企业在已经投资的Hortonworks 大数据平台上感受到业界最先进的SQL on Hadoop方案带来的所有好处,HAWQ也同时支持Pivotal自己的Hadoop发行版Pivotal HD。

11.HAWQ的其它主要特性

(1)弹性执行引擎:可以根据查询大小来决定执行查询使用的节点及Segment个数。 (2)支持多种分区方法及多级分区:比如List分区和Range分区。分区表对性能有很大帮助,比如你只想访问最近一个月的数据,查询只需要扫描最近一个月数据所在分区。 (3)支持多种压缩方法:snappy,gzip,quicklz,RLE等。 (4)动态扩容:动态按需扩容,按照存储大小或者计算需求,秒级添加节点。 (5)多级资源或负载管理:和外部资源管理器YARN集成;可以管理CPU,Memory资源等;支持多级资源队列;方便的DDL管理接口。 (6)完善的安全及权限管理:kerberos;数据库,表等各个级别的授权管理。 (7)支持多种第三方工具:比如Tableau,SAS,较新的Apache Zeppelin等。 (8)支持对HDFS和YARN的快速访问库:libhdfs3和libyarn(其他项目也可以使用)。 (9)支持在本地、虚拟化环境或者在云端部署。

三.HAWQ的"原生"体现在以下几个方面

  1. 数据都存储在HDFS上,不需要使用connector模式。

  2. 高可扩展性:和其他Hadoop组件一样,高可扩展,并且具有高性能。

  3. 原生的代码存取:和其他Hadoop项目一样,HAWQ是Apache项目。用户可以自由的下载,使用和做贡献,区别于其他的伪开源软件。

  4. 透明性:用Apache的方式开发软件,所有功能的开发及讨论都是公开的,用户可以自由参与。

  5. 原生的管理:可以通过Ambari部署、资源可以从YARN分配,与其它Hadoop组件可以运行在同一个集群。

四.HAWQ的搭建

1.HAWQ的架构

HAWQ架构是分布式系统中经典的master-slave模式,主要分为下面三个服务:

  • HAWQ master:HAWQ master是整个系统的入口点,负责接收和认证客户端的连接请求,处理客户端提交的SQL命令,解析并优化查询,向集群的各个Segemt节点下发查询并合理分布负载,协调从各Segemt节点返回的子查询结果,向客户端程序返回合并后的最终处理结果。HAWQ master内部由HAWQ Resource Manager,HAWQ Catalog Service,HAWQ Fault Tolerance Service,HAWQ Dispatcher等组件组成。HAWQ master还需要维护global system catalog,global system catalog是系统表的集合,其中包含了HAWQ集群的元数据信息;HAWQ master上不包含任何用户数据,所有数据都在HDFS上。

  • HAWQ segment:HAWQ segment是HAWQ集群的计算节点,负责大规模查询的并行处理;HAWQ segment节点本身不存储任何数据和元数据,所有需要处理的数据都存储在底层的HDFS上,segment本身只负责计算,是无状态的;HAWQ master在分派SQL请求给Segment时会附带相关的元数据信息,元数据信息里包含了需要处理的表的HDFS URL,Segment通过元数据里的HDFS URL访问SQL请求需要处理的数据。

  • PXF agent:PXF(HAWQ Extension Framework)是一个允许HAWQ访问外部系统数据的可扩展的框架,PXF内置了访问HDFS文件,HBase表以及Hive表的连接器(connectors),PXF还可以通过和HCatalog集成来直接访问Hive表;PXF允许用户通过开发新的连接器来访问其它并行数据存储和处理引擎。PXF agent是PXF的服务,需要部署在集群的Segment节点上。

  • 在HAWQ集群中,master节点上需要启动HAWQ master,HDFS namenode和Yarn resourcemanager;每个slave节点上需要启动HAWQ segment,PXF agent,HDFS datanode和Yarn nodemanager。HAWQ集群的数据直接存储在HDFS上,可以集成Yarn来进行计算资源管理(HAWQ自身也提供了不依赖于Yarn的Standalone模式,Ambari部署的HAWQ默认是Standalone模式,用户可以在Ambari页面上自行切换);HAWQ也可以通过PXF查询HBase和Hive的库表。

    用户通过连接master节点来与HAWQ集群交互,可以使用数据库客户端程序(psql)或者JDBC和ODBC这样的API连接HAWQ的库表。

    用户通过连接HAWQ master服务与HAWQ集群交互。和大多数Hadoop组件类似,HAWQ也提供了命令行和API两种交互方式:由于HAWQ继承自Greemplum/PostgresSQL技术栈,所以天然的选择了PostgresSQL的客户端程序psql作为命令行工具去连接HAWQ库表,提交SQL查询;HAWQ支持JDBC和ODBC作为编程接口,第三方程序可以通过JDBC/OCBC方式访问HAWQ。

在HAWQ集群中,master节点上需要启动HAWQ master,HDFS namenode和Yarn resourcemanager;每个slave节点上需要启动HAWQ segment,PXF agent,HDFS datanode和Yarn nodemanager。HAWQ集群的数据直接存储在HDFS上,可以集成Yarn来进行计算资源管理(HAWQ自身也提供了不依赖于Yarn的Standalone模式,Ambari部署的HAWQ默认是Standalone模式,用户可以在Ambari页面上自行切换);HAWQ也可以通过PXF查询HBase和Hive的库表。

用户通过连接master节点来与HAWQ集群交互,可以使用数据库客户端程序(psql)或者JDBC和ODBC这样的API连接HAWQ的库表。

用户通过连接HAWQ master服务与HAWQ集群交互。和大多数Hadoop组件类似,HAWQ也提供了命令行和API两种交互方式:由于HAWQ继承自Greemplum/PostgresSQL技术栈,所以天然的选择了PostgresSQL的客户端程序psql作为命令行工具去连接HAWQ库表,提交SQL查询;HAWQ支持JDBC和ODBC作为编程接口,第三方程序可以通过JDBC/OCBC方式访问HAWQ。

2.搭建步骤

  • 操作系统环境准备

    • 安装centos7,设置主机名,关闭防火墙,关闭selinux

      chkconfig iptables off

      chkconfig ip6tables off

      systemctl stop firewalld.service

      sestatus //查询

      vi /etc/selinux/config //关闭selinux

  • 软件环境准备

    • curl -L"https://bintray.com/wangzw/rpm/rpm" -o/etc/yum.repos.d/bintray-wangzw-rpm.repo

      yum install -y epel-release

      yum makecache

      yum install -y man passwd sudo tar whichgit mlocate links make bzip2 net-tools \

      autoconf automake libtool m4 gcc gcc-c++ gdb bison flex cmake gperfmaven indent \

      libuuid-devel krb5-devel libgsasl-devel expat-devel libxml2-devel \

      perl-ExtUtils-Embed pam-devel python-devel libcurl-devel snappy-devel \

      thrift-devel libyaml-devel libevent-devel bzip2-devel openssl-devel \

      openldap-devel protobuf-devel readline-devel net-snmp-devel apr-devel \

      libesmtp-devel xerces-c-devel python-pip json-c-devel libhdfs3-devel \

      apache-ivy java-1.7.0-openjdk-devel \

      openssh-clients openssh-server

      yum install -y postgresql-devel

      pip --retries=50 --timeout=300 installpg8000 simplejson unittest2 pycrypto pygresql pyyaml lockfile paramiko psi

      pip --retries=50 --timeout=300 installhttp://darcs.idyll.org/~t/projects/figleaf-0.6.1.tar.gz

      pip --retries=50 --timeout=300 installhttp://sourceforge.net/projects/pychecker/files/pychecker/0.8.19/pychecker-0.8.19.tar.gz/download

      yum erase -y postgresql postgresql-libspostgresql-devel

  • 下载incubator-hawq

  • 安装libyarn

    • cd depends/libyarn/

      mkdir build

      cd build

      ../bootstrap --prefix=/usr/local/

      make

      sudo make install

      把结果*.so文件复制至/usr/lib或者如下操作

      ln -s /usr/local/libyarn.so /usr/lib

      ln -s /usr/local/libyarn.so.1 /usr/lib

      ln -s /usr/local/libyarn.so.0.1.10 /usr/lib

      ldconfig

  • 配置及编译hawq(注意保持网络通畅)

    • ./configure --prefix=/hawq

      make

      make install

  • 拷贝到另外两台虚拟机上

    • 第一部分操作完成后,保存虚拟机hawq1,然后copy成2份,然后分别打开虚拟机根据虚拟机主机列表更改主机名,IP等操作,然后互ping IP,确认虚机机之间网络通畅。

  • 安装hadoop2.x

    • hadoop 2.X系统安装配置(可以利用gpssh设置互信等),然后启动运行.

  • 初识化HAWQ

    • source /install/dir/greenplum_path.sh

      hawq init cluster

      hawq stop/restart/start cluster