Hawq采用分层架构,将MPP shared-nothing的计算层架在HDFS之上。
Hawq集群中有三种角色:master, namenode和segment hosts。
1、Master负责认证、授权、从查询解析、分析、优化到生成计划,启动并分发计划,并收集执行状态和结果。
2、segment host包含一个hdfs datanode和多个segment以更好地利用多核架构,datanode和segment放在一起可以更好地利用数据本地性。一个datanode对应多个segment,segment通过libhdfs3来访问hdfs,libhdfs3是一个c++的hdfs client。对于segment,每个segment在hdfs上对应一个单独的目录,在负责读写分配给它的数据时,就是读写该目录下的文件。
Hawq支持两种分配方式:hash和random。hash distribution将某个指定的列进行hash来分配数据。对于hash数据分配方式,相同key的数据都由同一个segment负责读取,而不需要再做shuffle或redistribute,既提升性能又节省网络带宽。
Hawq支持事务,对于catalog数据, 使用write ahead log(WAL)和mvcc多版本并发控制。
• A massively parallel processing SQL engine
• Inherits merits from MPP database and HDFS
• Stateless segment design supported by metadata dispatch and self-described execution plan
• UDP based interconnect to overcome TCP limitations
• Transaction management supported by a swimming lane model and truncate operation in HDFS
• Significant performance advantage over Stinger