0. 计算相关序列化
1. ConnectorTableHandle
, ColumnHandle
和 ConnectorTableMetadata
, ColumnMetadata
有什么区别?
-
XXXMetadata
是用来表示table的元数据的, 包括 column_name 和 type, 信息是catalog 不相关的 -
XXXHandle
是用来表示特定的catalog的table/column的信息, 包含column name 和数据类型. 简单来说,XXXHandle
就是XXXMetadata
+connectorId
. 最必需的信息是connectorId. 虽然XXXHandle
默认是一个Marker Interface
(就是没有任何一个方法), 但该数据是会被序列化后传输到worker节点的, 因此connectorId 这个属性是绕不过的. 参见下面connectorId
是干嘛呢
2. connectorId
是干嘛的
presto中数据的组织方式是三层: catalog-->schema --> table. 一个catalog 只能是一种connector, 通过配置文件中connector.name
指定, 例如hive的一个catalog的配置:
connector.name=hive-cdh5
hive.metastore.uri=thrift://localhost:10000
hive.config.resources=/home/ec2-user/presto/etc/core-site.xml,/home/ec2-user/presto/etc/hdfs-site.xml
hive.s3.pin-client-to-current-region=true
而catalog 的名称就是配置文件的名称(去除后缀). 在Connector中, connectorId就是这个对应的catalog的名称. XXXHandle
中connectorId的作用就是worker节点中根据这个 ID 查找对应的配置从而执行计算
3. ConnectorSplit
很简单, 就是coordinator 计算split后要将各个任务序列化后传输给各个worker节点计算. 因此实现的时候仅仅把分块计算所需的任何数据都扔到这个实现类里面, 搞成可序列化即可.
4. Guice 不了解怎么办?
5. Presto如何初始化connector?
总结
-- EOF --