Search in sources :

Example 1 with StatsCalculatorModule

use of com.facebook.presto.cost.StatsCalculatorModule in project presto by prestodb.

the class PrestoSparkModule method setup.

@Override
protected void setup(Binder binder) {
    // configs
    // TODO: decouple configuration properties that don't make sense on Spark
    configBinder(binder).bindConfig(NodeSchedulerConfig.class);
    configBinder(binder).bindConfig(SimpleTtlNodeSelectorConfig.class);
    configBinder(binder).bindConfig(QueryManagerConfig.class);
    configBinder(binder).bindConfigGlobalDefaults(QueryManagerConfig.class, PrestoSparkSettingsRequirements::setDefaults);
    configBinder(binder).bindConfig(FeaturesConfig.class);
    configBinder(binder).bindConfigGlobalDefaults(FeaturesConfig.class, PrestoSparkSettingsRequirements::setDefaults);
    configBinder(binder).bindConfig(MemoryManagerConfig.class);
    configBinder(binder).bindConfig(TaskManagerConfig.class);
    configBinder(binder).bindConfig(TransactionManagerConfig.class);
    configBinder(binder).bindConfig(NodeMemoryConfig.class);
    configBinder(binder).bindConfig(WarningCollectorConfig.class);
    configBinder(binder).bindConfig(NodeSpillConfig.class);
    configBinder(binder).bindConfig(CompilerConfig.class);
    configBinder(binder).bindConfig(SqlEnvironmentConfig.class);
    configBinder(binder).bindConfig(StaticFunctionNamespaceStoreConfig.class);
    configBinder(binder).bindConfig(PrestoSparkConfig.class);
    configBinder(binder).bindConfig(TracingConfig.class);
    // json codecs
    jsonCodecBinder(binder).bindJsonCodec(ViewDefinition.class);
    jsonCodecBinder(binder).bindJsonCodec(TaskInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(PrestoSparkTaskDescriptor.class);
    jsonCodecBinder(binder).bindJsonCodec(PlanFragment.class);
    jsonCodecBinder(binder).bindJsonCodec(TaskSource.class);
    jsonCodecBinder(binder).bindJsonCodec(TableCommitContext.class);
    jsonCodecBinder(binder).bindJsonCodec(ExplainAnalyzeContext.class);
    jsonCodecBinder(binder).bindJsonCodec(ExecutionFailureInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(StageInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(OperatorStats.class);
    jsonCodecBinder(binder).bindJsonCodec(QueryInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(PrestoSparkQueryStatusInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(PrestoSparkQueryData.class);
    jsonCodecBinder(binder).bindListJsonCodec(TaskMemoryReservationSummary.class);
    // smile codecs
    smileCodecBinder(binder).bindSmileCodec(TaskSource.class);
    smileCodecBinder(binder).bindSmileCodec(TaskInfo.class);
    PrestoSparkConfig prestoSparkConfig = buildConfigObject(PrestoSparkConfig.class);
    if (prestoSparkConfig.isSmileSerializationEnabled()) {
        binder.bind(new TypeLiteral<Codec<TaskSource>>() {
        }).to(new TypeLiteral<SmileCodec<TaskSource>>() {
        }).in(Scopes.SINGLETON);
        binder.bind(new TypeLiteral<Codec<TaskInfo>>() {
        }).to(new TypeLiteral<SmileCodec<TaskInfo>>() {
        }).in(Scopes.SINGLETON);
    } else {
        binder.bind(new TypeLiteral<Codec<TaskSource>>() {
        }).to(new TypeLiteral<JsonCodec<TaskSource>>() {
        }).in(Scopes.SINGLETON);
        binder.bind(new TypeLiteral<Codec<TaskInfo>>() {
        }).to(new TypeLiteral<JsonCodec<TaskInfo>>() {
        }).in(Scopes.SINGLETON);
    }
    // index manager
    binder.bind(IndexManager.class).in(Scopes.SINGLETON);
    // handle resolver
    binder.install(new HandleJsonModule());
    // plugin manager
    configBinder(binder).bindConfig(PluginManagerConfig.class);
    binder.bind(PluginManager.class).in(Scopes.SINGLETON);
    // catalog manager
    binder.bind(StaticCatalogStore.class).in(Scopes.SINGLETON);
    configBinder(binder).bindConfig(StaticCatalogStoreConfig.class);
    // catalog
    binder.bind(ConnectorManager.class).in(Scopes.SINGLETON);
    binder.bind(CatalogManager.class).in(Scopes.SINGLETON);
    // property managers
    binder.bind(SessionPropertyManager.class).toProvider(PrestoSparkSessionPropertyManagerProvider.class).in(Scopes.SINGLETON);
    binder.bind(SystemSessionProperties.class).in(Scopes.SINGLETON);
    binder.bind(PrestoSparkSessionProperties.class).in(Scopes.SINGLETON);
    binder.bind(SessionPropertyDefaults.class).in(Scopes.SINGLETON);
    binder.bind(SchemaPropertyManager.class).in(Scopes.SINGLETON);
    binder.bind(TablePropertyManager.class).in(Scopes.SINGLETON);
    binder.bind(ColumnPropertyManager.class).in(Scopes.SINGLETON);
    binder.bind(AnalyzePropertyManager.class).in(Scopes.SINGLETON);
    binder.bind(QuerySessionSupplier.class).in(Scopes.SINGLETON);
    // block encodings
    binder.bind(BlockEncodingManager.class).in(Scopes.SINGLETON);
    binder.bind(BlockEncodingSerde.class).to(BlockEncodingManager.class).in(Scopes.SINGLETON);
    newSetBinder(binder, BlockEncoding.class);
    jsonBinder(binder).addSerializerBinding(Block.class).to(BlockJsonSerde.Serializer.class);
    jsonBinder(binder).addDeserializerBinding(Block.class).to(BlockJsonSerde.Deserializer.class);
    // metadata
    binder.bind(FunctionAndTypeManager.class).in(Scopes.SINGLETON);
    binder.bind(MetadataManager.class).in(Scopes.SINGLETON);
    binder.bind(Metadata.class).to(MetadataManager.class).in(Scopes.SINGLETON);
    binder.bind(StaticFunctionNamespaceStore.class).in(Scopes.SINGLETON);
    // type
    newSetBinder(binder, Type.class);
    binder.bind(TypeManager.class).to(FunctionAndTypeManager.class).in(Scopes.SINGLETON);
    jsonBinder(binder).addDeserializerBinding(Type.class).to(TypeDeserializer.class);
    // PageSorter
    binder.bind(PageSorter.class).to(PagesIndexPageSorter.class).in(Scopes.SINGLETON);
    // PageIndexer
    binder.bind(PagesIndex.Factory.class).to(PagesIndex.DefaultFactory.class);
    binder.bind(PageIndexerFactory.class).to(GroupByHashPageIndexerFactory.class).in(Scopes.SINGLETON);
    // compilers
    binder.bind(JoinFilterFunctionCompiler.class).in(Scopes.SINGLETON);
    newExporter(binder).export(JoinFilterFunctionCompiler.class).withGeneratedName();
    binder.bind(JoinCompiler.class).in(Scopes.SINGLETON);
    newExporter(binder).export(JoinCompiler.class).withGeneratedName();
    binder.bind(OrderingCompiler.class).in(Scopes.SINGLETON);
    newExporter(binder).export(OrderingCompiler.class).withGeneratedName();
    binder.bind(LookupJoinOperators.class).in(Scopes.SINGLETON);
    binder.bind(DomainTranslator.class).to(RowExpressionDomainTranslator.class).in(Scopes.SINGLETON);
    binder.bind(PredicateCompiler.class).to(RowExpressionPredicateCompiler.class).in(Scopes.SINGLETON);
    binder.bind(DeterminismEvaluator.class).to(RowExpressionDeterminismEvaluator.class).in(Scopes.SINGLETON);
    binder.bind(ExpressionCompiler.class).in(Scopes.SINGLETON);
    binder.bind(PageFunctionCompiler.class).in(Scopes.SINGLETON);
    // split manager
    binder.bind(SplitManager.class).in(Scopes.SINGLETON);
    // partitioning provider manager
    binder.bind(PartitioningProviderManager.class).in(Scopes.SINGLETON);
    // executors
    ExecutorService executor = newCachedThreadPool(daemonThreadsNamed("presto-spark-executor-%s"));
    binder.bind(Executor.class).toInstance(executor);
    binder.bind(ExecutorService.class).toInstance(executor);
    binder.bind(ScheduledExecutorService.class).toInstance(newScheduledThreadPool(0, daemonThreadsNamed("presto-spark-scheduled-executor-%s")));
    // task executor
    binder.bind(EmbedVersion.class).in(Scopes.SINGLETON);
    binder.bind(MultilevelSplitQueue.class).in(Scopes.SINGLETON);
    binder.bind(TaskExecutor.class).in(Scopes.SINGLETON);
    // data stream provider
    binder.bind(PageSourceManager.class).in(Scopes.SINGLETON);
    binder.bind(PageSourceProvider.class).to(PageSourceManager.class).in(Scopes.SINGLETON);
    // connector distributed metadata manager
    binder.bind(ConnectorMetadataUpdaterManager.class).in(Scopes.SINGLETON);
    // page sink provider
    binder.bind(PageSinkManager.class).in(Scopes.SINGLETON);
    binder.bind(PageSinkProvider.class).to(PageSinkManager.class).in(Scopes.SINGLETON);
    // query explainer
    binder.bind(QueryExplainer.class).in(Scopes.SINGLETON);
    // parser
    binder.bind(PlanChecker.class).in(Scopes.SINGLETON);
    binder.bind(SqlParser.class).in(Scopes.SINGLETON);
    binder.bind(SqlParserOptions.class).toInstance(sqlParserOptions);
    // planner
    binder.bind(PlanFragmenter.class).in(Scopes.SINGLETON);
    binder.bind(PlanOptimizers.class).in(Scopes.SINGLETON);
    binder.bind(ConnectorPlanOptimizerManager.class).in(Scopes.SINGLETON);
    binder.bind(LocalExecutionPlanner.class).in(Scopes.SINGLETON);
    configBinder(binder).bindConfig(FileFragmentResultCacheConfig.class);
    binder.bind(FragmentCacheStats.class).in(Scopes.SINGLETON);
    binder.bind(IndexJoinLookupStats.class).in(Scopes.SINGLETON);
    binder.bind(QueryIdGenerator.class).in(Scopes.SINGLETON);
    binder.bind(QueryPreparer.class).in(Scopes.SINGLETON);
    jsonBinder(binder).addKeySerializerBinding(VariableReferenceExpression.class).to(VariableReferenceExpressionSerializer.class);
    jsonBinder(binder).addKeyDeserializerBinding(VariableReferenceExpression.class).to(VariableReferenceExpressionDeserializer.class);
    // statistics calculator / cost calculator
    binder.install(new StatsCalculatorModule());
    binder.bind(CostCalculator.class).to(CostCalculatorUsingExchanges.class).in(Scopes.SINGLETON);
    binder.bind(CostCalculator.class).annotatedWith(CostCalculator.EstimatedExchanges.class).to(CostCalculatorWithEstimatedExchanges.class).in(Scopes.SINGLETON);
    binder.bind(CostComparator.class).in(Scopes.SINGLETON);
    // JMX (Do not export to the real MXBean server, as the Presto context may be created multiple times per JVM)
    binder.bind(MBeanServer.class).toInstance(new TestingMBeanServer());
    binder.bind(MBeanExporter.class).in(Scopes.SINGLETON);
    // spill
    binder.bind(SpillerFactory.class).to(GenericSpillerFactory.class).in(Scopes.SINGLETON);
    binder.bind(SingleStreamSpillerFactory.class).to(TempStorageSingleStreamSpillerFactory.class).in(Scopes.SINGLETON);
    binder.bind(PartitioningSpillerFactory.class).to(GenericPartitioningSpillerFactory.class).in(Scopes.SINGLETON);
    binder.bind(SpillerStats.class).in(Scopes.SINGLETON);
    binder.bind(StandaloneSpillerFactory.class).to(TempStorageStandaloneSpillerFactory.class).in(Scopes.SINGLETON);
    // monitoring
    jsonCodecBinder(binder).bindJsonCodec(OperatorInfo.class);
    binder.bind(QueryMonitor.class).in(Scopes.SINGLETON);
    configBinder(binder).bindConfig(QueryMonitorConfig.class);
    binder.bind(SplitMonitor.class).in(Scopes.SINGLETON);
    // Determine the NodeVersion
    ServerConfig serverConfig = buildConfigObject(ServerConfig.class);
    NodeVersion nodeVersion = new NodeVersion(serverConfig.getPrestoVersion());
    binder.bind(NodeVersion.class).toInstance(nodeVersion);
    // Support DDL statements. Helper class binds DDL statements to DataDefinitionTasks
    PrestoDataDefBindingHelper.bindDDLDefinitionTasks(binder);
    // TODO: Decouple node specific system tables
    binder.bind(QueryManager.class).to(PrestoSparkQueryManager.class).in(Scopes.SINGLETON);
    binder.bind(TaskManager.class).to(PrestoSparkTaskManager.class).in(Scopes.SINGLETON);
    binder.install(new SystemConnectorModule());
    // TODO: support explain analyze for Spark
    binder.bind(new TypeLiteral<Optional<ExplainAnalyzeContext>>() {
    }).toInstance(Optional.of(new ExplainAnalyzeContext((queryId) -> {
        throw new UnsupportedOperationException("explain analyze is not supported");
    })));
    // TODO: support CBO, supply real nodes count
    binder.bind(TaskCountEstimator.class).toInstance(new TaskCountEstimator(() -> 1000));
    // TODO: Decouple and remove: required by ConnectorManager
    binder.bind(InternalNodeManager.class).toInstance(new PrestoSparkInternalNodeManager());
    // TODO: Decouple and remove: required by PluginManager
    binder.bind(InternalResourceGroupManager.class).in(Scopes.SINGLETON);
    binder.bind(ResourceGroupManager.class).to(InternalResourceGroupManager.class);
    binder.bind(new TypeLiteral<ResourceGroupManager<?>>() {
    }).to(new TypeLiteral<InternalResourceGroupManager<?>>() {
    });
    binder.bind(LegacyResourceGroupConfigurationManager.class).in(Scopes.SINGLETON);
    binder.bind(ClusterMemoryPoolManager.class).toInstance(((poolId, listener) -> {
    }));
    binder.bind(QueryPrerequisitesManager.class).in(Scopes.SINGLETON);
    binder.bind(ResourceGroupService.class).to(NoopResourceGroupService.class).in(Scopes.SINGLETON);
    binder.bind(NodeTtlFetcherManager.class).to(ThrowingNodeTtlFetcherManager.class).in(Scopes.SINGLETON);
    binder.bind(ClusterTtlProviderManager.class).to(ThrowingClusterTtlProviderManager.class).in(Scopes.SINGLETON);
    // TODO: Decouple and remove: required by SessionPropertyDefaults, PluginManager, InternalResourceGroupManager, ConnectorManager
    configBinder(binder).bindConfig(NodeConfig.class);
    binder.bind(NodeInfo.class).in(Scopes.SINGLETON);
    // TODO: Decouple and remove: required by LocalExecutionPlanner, PlanFragmenter
    binder.bind(NodePartitioningManager.class).to(PrestoSparkNodePartitioningManager.class).in(Scopes.SINGLETON);
    // TODO: Decouple and remove: required by PluginManager
    install(new ServerSecurityModule());
    // spark specific
    binder.bind(SparkProcessType.class).toInstance(sparkProcessType);
    binder.bind(PrestoSparkExecutionExceptionFactory.class).in(Scopes.SINGLETON);
    binder.bind(PrestoSparkSettingsRequirements.class).in(Scopes.SINGLETON);
    binder.bind(PrestoSparkQueryPlanner.class).in(Scopes.SINGLETON);
    binder.bind(PrestoSparkPlanFragmenter.class).in(Scopes.SINGLETON);
    binder.bind(PrestoSparkRddFactory.class).in(Scopes.SINGLETON);
    binder.bind(PrestoSparkTaskExecutorFactory.class).in(Scopes.SINGLETON);
    binder.bind(PrestoSparkQueryExecutionFactory.class).in(Scopes.SINGLETON);
    binder.bind(PrestoSparkService.class).in(Scopes.SINGLETON);
    binder.bind(PrestoSparkBroadcastTableCacheManager.class).in(Scopes.SINGLETON);
    newSetBinder(binder, PrestoSparkServiceWaitTimeMetrics.class);
    // extra credentials and authenticator for Presto-on-Spark
    newSetBinder(binder, PrestoSparkCredentialsProvider.class);
    newSetBinder(binder, PrestoSparkAuthenticatorProvider.class);
}
Also used : RowExpressionDomainTranslator(com.facebook.presto.sql.relational.RowExpressionDomainTranslator) PrestoSparkBroadcastTableCacheManager(com.facebook.presto.spark.execution.PrestoSparkBroadcastTableCacheManager) PageSourceProvider(com.facebook.presto.split.PageSourceProvider) PluginManagerConfig(com.facebook.presto.server.PluginManagerConfig) QueryExplainer(com.facebook.presto.sql.analyzer.QueryExplainer) ConnectorPlanOptimizerManager(com.facebook.presto.sql.planner.ConnectorPlanOptimizerManager) ColumnPropertyManager(com.facebook.presto.metadata.ColumnPropertyManager) OperatorStats(com.facebook.presto.operator.OperatorStats) StageInfo(com.facebook.presto.execution.StageInfo) InternalNodeManager(com.facebook.presto.metadata.InternalNodeManager) PrestoSparkTaskExecutorFactory(com.facebook.presto.spark.execution.PrestoSparkTaskExecutorFactory) ThrowingNodeTtlFetcherManager(com.facebook.presto.ttl.nodettlfetchermanagers.ThrowingNodeTtlFetcherManager) NoOpFragmentResultCacheManager(com.facebook.presto.operator.NoOpFragmentResultCacheManager) Executors.newScheduledThreadPool(java.util.concurrent.Executors.newScheduledThreadPool) Multibinder.newSetBinder(com.google.inject.multibindings.Multibinder.newSetBinder) QueryManagerConfig(com.facebook.presto.execution.QueryManagerConfig) FragmentResultCacheManager(com.facebook.presto.operator.FragmentResultCacheManager) PageFunctionCompiler(com.facebook.presto.sql.gen.PageFunctionCompiler) TaskCountEstimator(com.facebook.presto.cost.TaskCountEstimator) ServerConfig(com.facebook.presto.server.ServerConfig) ClusterTtlProviderManager(com.facebook.presto.ttl.clusterttlprovidermanagers.ClusterTtlProviderManager) SessionPropertyDefaults(com.facebook.presto.server.SessionPropertyDefaults) EmbedVersion(com.facebook.presto.version.EmbedVersion) PageSinkManager(com.facebook.presto.split.PageSinkManager) GenericPartitioningSpillerFactory(com.facebook.presto.spiller.GenericPartitioningSpillerFactory) StandaloneSpillerFactory(com.facebook.presto.spiller.StandaloneSpillerFactory) DomainTranslator(com.facebook.presto.spi.relation.DomainTranslator) QueryIdGenerator(com.facebook.presto.execution.QueryIdGenerator) FeaturesConfig(com.facebook.presto.sql.analyzer.FeaturesConfig) QueryInfo(com.facebook.presto.execution.QueryInfo) QueryPreparer(com.facebook.presto.execution.QueryPreparer) QuerySessionSupplier(com.facebook.presto.server.QuerySessionSupplier) RowExpressionPredicateCompiler(com.facebook.presto.sql.gen.RowExpressionPredicateCompiler) FragmentCacheStats(com.facebook.presto.operator.FragmentCacheStats) PrestoSparkInternalNodeManager(com.facebook.presto.spark.node.PrestoSparkInternalNodeManager) TaskMemoryReservationSummary(com.facebook.presto.operator.TaskMemoryReservationSummary) InternalResourceGroupManager(com.facebook.presto.execution.resourceGroups.InternalResourceGroupManager) TypeLiteral(com.google.inject.TypeLiteral) SystemSessionProperties(com.facebook.presto.SystemSessionProperties) ViewDefinition(com.facebook.presto.metadata.ViewDefinition) NodeInfo(com.facebook.airlift.node.NodeInfo) TempStorageSingleStreamSpillerFactory(com.facebook.presto.spiller.TempStorageSingleStreamSpillerFactory) VariableReferenceExpressionDeserializer(com.facebook.presto.sql.Serialization.VariableReferenceExpressionDeserializer) ResourceGroupService(com.facebook.presto.resourcemanager.ResourceGroupService) LookupJoinOperators(com.facebook.presto.operator.LookupJoinOperators) NoopResourceGroupService(com.facebook.presto.resourcemanager.NoopResourceGroupService) StaticCatalogStore(com.facebook.presto.metadata.StaticCatalogStore) Binder(com.google.inject.Binder) BlockEncodingManager(com.facebook.presto.common.block.BlockEncodingManager) StaticFunctionNamespaceStoreConfig(com.facebook.presto.metadata.StaticFunctionNamespaceStoreConfig) GenericSpillerFactory(com.facebook.presto.spiller.GenericSpillerFactory) PrestoSparkExecutionExceptionFactory(com.facebook.presto.spark.execution.PrestoSparkExecutionExceptionFactory) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) PageSorter(com.facebook.presto.spi.PageSorter) AnalyzePropertyManager(com.facebook.presto.metadata.AnalyzePropertyManager) IndexJoinLookupStats(com.facebook.presto.operator.index.IndexJoinLookupStats) TransactionManager(com.facebook.presto.transaction.TransactionManager) ResourceGroupManager(com.facebook.presto.execution.resourceGroups.ResourceGroupManager) LegacyResourceGroupConfigurationManager(com.facebook.presto.execution.resourceGroups.LegacyResourceGroupConfigurationManager) TableCommitContext(com.facebook.presto.operator.TableCommitContext) ClusterMemoryPoolManager(com.facebook.presto.spi.memory.ClusterMemoryPoolManager) PrestoSparkTaskManager(com.facebook.presto.spark.node.PrestoSparkTaskManager) Executor(java.util.concurrent.Executor) SystemConnectorModule(com.facebook.presto.connector.system.SystemConnectorModule) ServerSecurityModule(com.facebook.presto.server.security.ServerSecurityModule) PrestoSparkNodePartitioningManager(com.facebook.presto.spark.node.PrestoSparkNodePartitioningManager) PrestoSparkRddFactory(com.facebook.presto.spark.planner.PrestoSparkRddFactory) SqlEnvironmentConfig(com.facebook.presto.sql.SqlEnvironmentConfig) PrestoSparkQueryPlanner(com.facebook.presto.spark.planner.PrestoSparkQueryPlanner) MultilevelSplitQueue(com.facebook.presto.execution.executor.MultilevelSplitQueue) StaticCatalogStoreConfig(com.facebook.presto.metadata.StaticCatalogStoreConfig) TracingConfig(com.facebook.presto.tracing.TracingConfig) QueryMonitor(com.facebook.presto.event.QueryMonitor) StaticFunctionNamespaceStore(com.facebook.presto.metadata.StaticFunctionNamespaceStore) InMemoryTransactionManager(com.facebook.presto.transaction.InMemoryTransactionManager) ThrowingClusterTtlProviderManager(com.facebook.presto.ttl.clusterttlprovidermanagers.ThrowingClusterTtlProviderManager) SpillerFactory(com.facebook.presto.spiller.SpillerFactory) TaskInfo(com.facebook.presto.execution.TaskInfo) Metadata(com.facebook.presto.metadata.Metadata) PartitioningProviderManager(com.facebook.presto.sql.planner.PartitioningProviderManager) FunctionAndTypeManager(com.facebook.presto.metadata.FunctionAndTypeManager) PartitioningSpillerFactory(com.facebook.presto.spiller.PartitioningSpillerFactory) LocalExecutionPlanner(com.facebook.presto.sql.planner.LocalExecutionPlanner) JsonCodec(com.facebook.airlift.json.JsonCodec) TablePropertyManager(com.facebook.presto.metadata.TablePropertyManager) SqlParserOptions(com.facebook.presto.sql.parser.SqlParserOptions) CostCalculatorWithEstimatedExchanges(com.facebook.presto.cost.CostCalculatorWithEstimatedExchanges) MetadataManager(com.facebook.presto.metadata.MetadataManager) TestingMBeanServer(org.weakref.jmx.testing.TestingMBeanServer) BlockEncoding(com.facebook.presto.common.block.BlockEncoding) VariableReferenceExpression(com.facebook.presto.spi.relation.VariableReferenceExpression) NodeVersion(com.facebook.presto.client.NodeVersion) TaskManagerConfig(com.facebook.presto.execution.TaskManagerConfig) PagesIndex(com.facebook.presto.operator.PagesIndex) TempStorageStandaloneSpillerFactory(com.facebook.presto.spiller.TempStorageStandaloneSpillerFactory) PlanFragment(com.facebook.presto.sql.planner.PlanFragment) WarningCollectorConfig(com.facebook.presto.execution.warnings.WarningCollectorConfig) AbstractConfigurationAwareModule(com.facebook.airlift.configuration.AbstractConfigurationAwareModule) ConnectorManager(com.facebook.presto.connector.ConnectorManager) PrestoSparkPlanFragmenter(com.facebook.presto.spark.planner.PrestoSparkPlanFragmenter) ExportBinder.newExporter(org.weakref.jmx.guice.ExportBinder.newExporter) HandleJsonModule(com.facebook.presto.metadata.HandleJsonModule) PageIndexerFactory(com.facebook.presto.spi.PageIndexerFactory) OperatorInfo(com.facebook.presto.operator.OperatorInfo) ConnectorMetadataUpdaterManager(com.facebook.presto.metadata.ConnectorMetadataUpdaterManager) FileFragmentResultCacheManager(com.facebook.presto.operator.FileFragmentResultCacheManager) NodeMemoryConfig(com.facebook.presto.memory.NodeMemoryConfig) CostCalculatorUsingExchanges(com.facebook.presto.cost.CostCalculatorUsingExchanges) CostCalculator(com.facebook.presto.cost.CostCalculator) JsonBinder.jsonBinder(com.facebook.airlift.json.JsonBinder.jsonBinder) NodeSpillConfig(com.facebook.presto.spiller.NodeSpillConfig) SplitManager(com.facebook.presto.split.SplitManager) SchemaPropertyManager(com.facebook.presto.metadata.SchemaPropertyManager) Codec(com.facebook.airlift.json.Codec) NodeConfig(com.facebook.airlift.node.NodeConfig) SqlParser(com.facebook.presto.sql.parser.SqlParser) PrestoSparkQueryManager(com.facebook.presto.spark.node.PrestoSparkQueryManager) Threads.daemonThreadsNamed(com.facebook.airlift.concurrent.Threads.daemonThreadsNamed) TransactionManagerConfig(com.facebook.presto.transaction.TransactionManagerConfig) NodeTtlFetcherManager(com.facebook.presto.ttl.nodettlfetchermanagers.NodeTtlFetcherManager) TaskExecutor(com.facebook.presto.execution.executor.TaskExecutor) Optional(java.util.Optional) PredicateCompiler(com.facebook.presto.spi.relation.PredicateCompiler) PluginManager(com.facebook.presto.server.PluginManager) ExpressionCompiler(com.facebook.presto.sql.gen.ExpressionCompiler) NodeSchedulerConfig(com.facebook.presto.execution.scheduler.NodeSchedulerConfig) DeterminismEvaluator(com.facebook.presto.spi.relation.DeterminismEvaluator) VariableReferenceExpressionSerializer(com.facebook.presto.sql.Serialization.VariableReferenceExpressionSerializer) SpillerStats(com.facebook.presto.spiller.SpillerStats) QueryPrerequisitesManager(com.facebook.presto.dispatcher.QueryPrerequisitesManager) PrestoDataDefBindingHelper(com.facebook.presto.util.PrestoDataDefBindingHelper) SimpleTtlNodeSelectorConfig(com.facebook.presto.execution.scheduler.nodeSelection.SimpleTtlNodeSelectorConfig) PageSinkProvider(com.facebook.presto.split.PageSinkProvider) RowExpressionDeterminismEvaluator(com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator) ExecutionFailureInfo(com.facebook.presto.execution.ExecutionFailureInfo) QueryManager(com.facebook.presto.execution.QueryManager) Singleton(javax.inject.Singleton) JsonCodecBinder.jsonCodecBinder(com.facebook.airlift.json.JsonCodecBinder.jsonCodecBinder) BlockJsonSerde(com.facebook.presto.block.BlockJsonSerde) BlockEncodingSerde(com.facebook.presto.common.block.BlockEncodingSerde) StatsCalculatorModule(com.facebook.presto.cost.StatsCalculatorModule) PlanOptimizers(com.facebook.presto.sql.planner.PlanOptimizers) PageSourceManager(com.facebook.presto.split.PageSourceManager) OrderingCompiler(com.facebook.presto.sql.gen.OrderingCompiler) PlanChecker(com.facebook.presto.sql.planner.sanity.PlanChecker) SmileCodec(com.facebook.airlift.json.smile.SmileCodec) TypeManager(com.facebook.presto.common.type.TypeManager) TaskManager(com.facebook.presto.execution.TaskManager) FileFragmentResultCacheConfig(com.facebook.presto.operator.FileFragmentResultCacheConfig) MBeanServer(javax.management.MBeanServer) Objects.requireNonNull(java.util.Objects.requireNonNull) ExplainAnalyzeContext(com.facebook.presto.execution.ExplainAnalyzeContext) IndexManager(com.facebook.presto.index.IndexManager) MemoryManagerConfig(com.facebook.presto.memory.MemoryManagerConfig) SingleStreamSpillerFactory(com.facebook.presto.spiller.SingleStreamSpillerFactory) SessionPropertyManager(com.facebook.presto.metadata.SessionPropertyManager) PlanFragmenter(com.facebook.presto.sql.planner.PlanFragmenter) Type(com.facebook.presto.common.type.Type) ExecutorService(java.util.concurrent.ExecutorService) PagesIndexPageSorter(com.facebook.presto.PagesIndexPageSorter) NodePartitioningManager(com.facebook.presto.sql.planner.NodePartitioningManager) SplitMonitor(com.facebook.presto.event.SplitMonitor) TaskSource(com.facebook.presto.execution.TaskSource) JoinFilterFunctionCompiler(com.facebook.presto.sql.gen.JoinFilterFunctionCompiler) SparkProcessType(com.facebook.presto.spark.classloader_interface.SparkProcessType) Scopes(com.google.inject.Scopes) Executors.newFixedThreadPool(java.util.concurrent.Executors.newFixedThreadPool) CatalogManager(com.facebook.presto.metadata.CatalogManager) CompilerConfig(com.facebook.presto.sql.planner.CompilerConfig) SmileCodecBinder.smileCodecBinder(com.facebook.airlift.json.smile.SmileCodecBinder.smileCodecBinder) TypeDeserializer(com.facebook.presto.type.TypeDeserializer) Provides(com.google.inject.Provides) QueryMonitorConfig(com.facebook.presto.event.QueryMonitorConfig) Executors.newCachedThreadPool(java.util.concurrent.Executors.newCachedThreadPool) CostComparator(com.facebook.presto.cost.CostComparator) ConfigBinder.configBinder(com.facebook.airlift.configuration.ConfigBinder.configBinder) GroupByHashPageIndexerFactory(com.facebook.presto.GroupByHashPageIndexerFactory) Block(com.facebook.presto.common.block.Block) MBeanExporter(org.weakref.jmx.MBeanExporter) JoinCompiler(com.facebook.presto.sql.gen.JoinCompiler) PrestoSparkPlanFragmenter(com.facebook.presto.spark.planner.PrestoSparkPlanFragmenter) RowExpressionPredicateCompiler(com.facebook.presto.sql.gen.RowExpressionPredicateCompiler) PrestoSparkQueryManager(com.facebook.presto.spark.node.PrestoSparkQueryManager) PrestoSparkTaskExecutorFactory(com.facebook.presto.spark.execution.PrestoSparkTaskExecutorFactory) PluginManager(com.facebook.presto.server.PluginManager) NodeVersion(com.facebook.presto.client.NodeVersion) JsonCodec(com.facebook.airlift.json.JsonCodec) Codec(com.facebook.airlift.json.Codec) SmileCodec(com.facebook.airlift.json.smile.SmileCodec) FunctionAndTypeManager(com.facebook.presto.metadata.FunctionAndTypeManager) QueryMonitor(com.facebook.presto.event.QueryMonitor) TestingMBeanServer(org.weakref.jmx.testing.TestingMBeanServer) MBeanServer(javax.management.MBeanServer) PrestoSparkRddFactory(com.facebook.presto.spark.planner.PrestoSparkRddFactory) JoinCompiler(com.facebook.presto.sql.gen.JoinCompiler) GenericPartitioningSpillerFactory(com.facebook.presto.spiller.GenericPartitioningSpillerFactory) QueryExplainer(com.facebook.presto.sql.analyzer.QueryExplainer) SessionPropertyDefaults(com.facebook.presto.server.SessionPropertyDefaults) StaticFunctionNamespaceStore(com.facebook.presto.metadata.StaticFunctionNamespaceStore) SparkProcessType(com.facebook.presto.spark.classloader_interface.SparkProcessType) BlockJsonSerde(com.facebook.presto.block.BlockJsonSerde) NoopResourceGroupService(com.facebook.presto.resourcemanager.NoopResourceGroupService) MultilevelSplitQueue(com.facebook.presto.execution.executor.MultilevelSplitQueue) NodeInfo(com.facebook.airlift.node.NodeInfo) PlanOptimizers(com.facebook.presto.sql.planner.PlanOptimizers) CostCalculatorWithEstimatedExchanges(com.facebook.presto.cost.CostCalculatorWithEstimatedExchanges) ClusterMemoryPoolManager(com.facebook.presto.spi.memory.ClusterMemoryPoolManager) PrestoSparkPlanFragmenter(com.facebook.presto.spark.planner.PrestoSparkPlanFragmenter) PlanFragmenter(com.facebook.presto.sql.planner.PlanFragmenter) TempStorageStandaloneSpillerFactory(com.facebook.presto.spiller.TempStorageStandaloneSpillerFactory) PagesIndex(com.facebook.presto.operator.PagesIndex) PrestoSparkBroadcastTableCacheManager(com.facebook.presto.spark.execution.PrestoSparkBroadcastTableCacheManager) Executor(java.util.concurrent.Executor) TaskExecutor(com.facebook.presto.execution.executor.TaskExecutor) InternalNodeManager(com.facebook.presto.metadata.InternalNodeManager) PrestoSparkInternalNodeManager(com.facebook.presto.spark.node.PrestoSparkInternalNodeManager) TypeLiteral(com.google.inject.TypeLiteral) ServerSecurityModule(com.facebook.presto.server.security.ServerSecurityModule) SystemConnectorModule(com.facebook.presto.connector.system.SystemConnectorModule) CostCalculatorUsingExchanges(com.facebook.presto.cost.CostCalculatorUsingExchanges) EmbedVersion(com.facebook.presto.version.EmbedVersion) ExplainAnalyzeContext(com.facebook.presto.execution.ExplainAnalyzeContext) PrestoSparkQueryPlanner(com.facebook.presto.spark.planner.PrestoSparkQueryPlanner) LookupJoinOperators(com.facebook.presto.operator.LookupJoinOperators) PageSinkManager(com.facebook.presto.split.PageSinkManager) StatsCalculatorModule(com.facebook.presto.cost.StatsCalculatorModule) CostComparator(com.facebook.presto.cost.CostComparator) TaskCountEstimator(com.facebook.presto.cost.TaskCountEstimator) RowExpressionDeterminismEvaluator(com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator) ConnectorPlanOptimizerManager(com.facebook.presto.sql.planner.ConnectorPlanOptimizerManager) JoinFilterFunctionCompiler(com.facebook.presto.sql.gen.JoinFilterFunctionCompiler) RowExpressionDomainTranslator(com.facebook.presto.sql.relational.RowExpressionDomainTranslator) TempStorageSingleStreamSpillerFactory(com.facebook.presto.spiller.TempStorageSingleStreamSpillerFactory) ConnectorManager(com.facebook.presto.connector.ConnectorManager) CatalogManager(com.facebook.presto.metadata.CatalogManager) Type(com.facebook.presto.common.type.Type) SparkProcessType(com.facebook.presto.spark.classloader_interface.SparkProcessType) ConnectorMetadataUpdaterManager(com.facebook.presto.metadata.ConnectorMetadataUpdaterManager) TablePropertyManager(com.facebook.presto.metadata.TablePropertyManager) TaskSource(com.facebook.presto.execution.TaskSource) PrestoSparkTaskManager(com.facebook.presto.spark.node.PrestoSparkTaskManager) QueryIdGenerator(com.facebook.presto.execution.QueryIdGenerator) PageSourceManager(com.facebook.presto.split.PageSourceManager) TaskInfo(com.facebook.presto.execution.TaskInfo) PagesIndexPageSorter(com.facebook.presto.PagesIndexPageSorter) QueryPreparer(com.facebook.presto.execution.QueryPreparer) ServerConfig(com.facebook.presto.server.ServerConfig) PrestoSparkNodePartitioningManager(com.facebook.presto.spark.node.PrestoSparkNodePartitioningManager) OrderingCompiler(com.facebook.presto.sql.gen.OrderingCompiler) LegacyResourceGroupConfigurationManager(com.facebook.presto.execution.resourceGroups.LegacyResourceGroupConfigurationManager) SqlParserOptions(com.facebook.presto.sql.parser.SqlParserOptions) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) TestingMBeanServer(org.weakref.jmx.testing.TestingMBeanServer) QueryPrerequisitesManager(com.facebook.presto.dispatcher.QueryPrerequisitesManager) StaticCatalogStore(com.facebook.presto.metadata.StaticCatalogStore) IndexJoinLookupStats(com.facebook.presto.operator.index.IndexJoinLookupStats) SplitMonitor(com.facebook.presto.event.SplitMonitor) MBeanExporter(org.weakref.jmx.MBeanExporter) SqlParser(com.facebook.presto.sql.parser.SqlParser) InternalResourceGroupManager(com.facebook.presto.execution.resourceGroups.InternalResourceGroupManager) ResourceGroupManager(com.facebook.presto.execution.resourceGroups.ResourceGroupManager) ThrowingNodeTtlFetcherManager(com.facebook.presto.ttl.nodettlfetchermanagers.ThrowingNodeTtlFetcherManager) SpillerStats(com.facebook.presto.spiller.SpillerStats) IndexManager(com.facebook.presto.index.IndexManager) TaskExecutor(com.facebook.presto.execution.executor.TaskExecutor) BlockEncodingManager(com.facebook.presto.common.block.BlockEncodingManager) PlanChecker(com.facebook.presto.sql.planner.sanity.PlanChecker) VariableReferenceExpression(com.facebook.presto.spi.relation.VariableReferenceExpression) Block(com.facebook.presto.common.block.Block) ExpressionCompiler(com.facebook.presto.sql.gen.ExpressionCompiler) GroupByHashPageIndexerFactory(com.facebook.presto.GroupByHashPageIndexerFactory) ThrowingClusterTtlProviderManager(com.facebook.presto.ttl.clusterttlprovidermanagers.ThrowingClusterTtlProviderManager) ColumnPropertyManager(com.facebook.presto.metadata.ColumnPropertyManager) PageFunctionCompiler(com.facebook.presto.sql.gen.PageFunctionCompiler) PartitioningProviderManager(com.facebook.presto.sql.planner.PartitioningProviderManager) PrestoSparkTaskExecutorFactory(com.facebook.presto.spark.execution.PrestoSparkTaskExecutorFactory) GenericPartitioningSpillerFactory(com.facebook.presto.spiller.GenericPartitioningSpillerFactory) StandaloneSpillerFactory(com.facebook.presto.spiller.StandaloneSpillerFactory) TempStorageSingleStreamSpillerFactory(com.facebook.presto.spiller.TempStorageSingleStreamSpillerFactory) GenericSpillerFactory(com.facebook.presto.spiller.GenericSpillerFactory) PrestoSparkExecutionExceptionFactory(com.facebook.presto.spark.execution.PrestoSparkExecutionExceptionFactory) PrestoSparkRddFactory(com.facebook.presto.spark.planner.PrestoSparkRddFactory) SpillerFactory(com.facebook.presto.spiller.SpillerFactory) PartitioningSpillerFactory(com.facebook.presto.spiller.PartitioningSpillerFactory) TempStorageStandaloneSpillerFactory(com.facebook.presto.spiller.TempStorageStandaloneSpillerFactory) PageIndexerFactory(com.facebook.presto.spi.PageIndexerFactory) SingleStreamSpillerFactory(com.facebook.presto.spiller.SingleStreamSpillerFactory) GroupByHashPageIndexerFactory(com.facebook.presto.GroupByHashPageIndexerFactory) HandleJsonModule(com.facebook.presto.metadata.HandleJsonModule) InternalResourceGroupManager(com.facebook.presto.execution.resourceGroups.InternalResourceGroupManager) SchemaPropertyManager(com.facebook.presto.metadata.SchemaPropertyManager) FragmentCacheStats(com.facebook.presto.operator.FragmentCacheStats) GenericSpillerFactory(com.facebook.presto.spiller.GenericSpillerFactory) AnalyzePropertyManager(com.facebook.presto.metadata.AnalyzePropertyManager) LocalExecutionPlanner(com.facebook.presto.sql.planner.LocalExecutionPlanner) PrestoSparkExecutionExceptionFactory(com.facebook.presto.spark.execution.PrestoSparkExecutionExceptionFactory) PrestoSparkInternalNodeManager(com.facebook.presto.spark.node.PrestoSparkInternalNodeManager) SplitManager(com.facebook.presto.split.SplitManager) CostCalculator(com.facebook.presto.cost.CostCalculator) QuerySessionSupplier(com.facebook.presto.server.QuerySessionSupplier) MetadataManager(com.facebook.presto.metadata.MetadataManager) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ExecutorService(java.util.concurrent.ExecutorService) SystemSessionProperties(com.facebook.presto.SystemSessionProperties)

Example 2 with StatsCalculatorModule

use of com.facebook.presto.cost.StatsCalculatorModule in project presto by prestodb.

the class CoordinatorModule method setup.

@Override
protected void setup(Binder binder) {
    httpServerBinder(binder).bindResource("/ui", "webapp").withWelcomeFile("index.html");
    httpServerBinder(binder).bindResource("/tableau", "webapp/tableau");
    // discovery server
    install(installModuleIf(EmbeddedDiscoveryConfig.class, EmbeddedDiscoveryConfig::isEnabled, new EmbeddedDiscoveryModule()));
    // presto coordinator announcement
    discoveryBinder(binder).bindHttpAnnouncement("presto-coordinator");
    // statement resource
    jsonCodecBinder(binder).bindJsonCodec(QueryInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(TaskInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(QueryResults.class);
    jsonCodecBinder(binder).bindJsonCodec(SelectedRole.class);
    jaxrsBinder(binder).bind(QueuedStatementResource.class);
    jaxrsBinder(binder).bind(ExecutingStatementResource.class);
    binder.bind(StatementHttpExecutionMBean.class).in(Scopes.SINGLETON);
    newExporter(binder).export(StatementHttpExecutionMBean.class).withGeneratedName();
    // resource for serving static content
    jaxrsBinder(binder).bind(WebUiResource.class);
    // failure detector
    binder.install(new FailureDetectorModule());
    jaxrsBinder(binder).bind(NodeResource.class);
    jaxrsBinder(binder).bind(WorkerResource.class);
    httpClientBinder(binder).bindHttpClient("workerInfo", ForWorkerInfo.class);
    // query monitor
    jsonCodecBinder(binder).bindJsonCodec(OperatorInfo.class);
    configBinder(binder).bindConfig(QueryMonitorConfig.class);
    binder.bind(QueryMonitor.class).in(Scopes.SINGLETON);
    // query manager
    jaxrsBinder(binder).bind(QueryResource.class);
    jaxrsBinder(binder).bind(StageResource.class);
    jaxrsBinder(binder).bind(QueryStateInfoResource.class);
    jaxrsBinder(binder).bind(ResourceGroupStateInfoResource.class);
    binder.bind(QueryIdGenerator.class).in(Scopes.SINGLETON);
    binder.bind(QueryManager.class).to(SqlQueryManager.class).in(Scopes.SINGLETON);
    newExporter(binder).export(QueryManager.class).withGeneratedName();
    binder.bind(QueryPreparer.class).in(Scopes.SINGLETON);
    binder.bind(SessionSupplier.class).to(QuerySessionSupplier.class).in(Scopes.SINGLETON);
    binder.bind(InternalResourceGroupManager.class).in(Scopes.SINGLETON);
    newExporter(binder).export(InternalResourceGroupManager.class).withGeneratedName();
    binder.bind(ResourceGroupManager.class).to(InternalResourceGroupManager.class);
    binder.bind(LegacyResourceGroupConfigurationManager.class).in(Scopes.SINGLETON);
    binder.bind(RetryCircuitBreaker.class).in(Scopes.SINGLETON);
    newExporter(binder).export(RetryCircuitBreaker.class).withGeneratedName();
    binder.bind(LocalQueryProvider.class).in(Scopes.SINGLETON);
    jaxrsBinder(binder).bind(TaskInfoResource.class);
    // dispatcher
    binder.bind(DispatchManager.class).in(Scopes.SINGLETON);
    binder.bind(FailedDispatchQueryFactory.class).in(Scopes.SINGLETON);
    binder.bind(DispatchExecutor.class).in(Scopes.SINGLETON);
    // local dispatcher
    binder.bind(DispatchQueryFactory.class).to(LocalDispatchQueryFactory.class);
    // cluster memory manager
    binder.bind(ClusterMemoryManager.class).in(Scopes.SINGLETON);
    binder.bind(ClusterMemoryPoolManager.class).to(ClusterMemoryManager.class).in(Scopes.SINGLETON);
    httpClientBinder(binder).bindHttpClient("memoryManager", ForMemoryManager.class).withTracing().withConfigDefaults(config -> {
        config.setRequestTimeout(new Duration(10, SECONDS));
    });
    bindLowMemoryKiller(LowMemoryKillerPolicy.NONE, NoneLowMemoryKiller.class);
    bindLowMemoryKiller(LowMemoryKillerPolicy.TOTAL_RESERVATION, TotalReservationLowMemoryKiller.class);
    bindLowMemoryKiller(LowMemoryKillerPolicy.TOTAL_RESERVATION_ON_BLOCKED_NODES, TotalReservationOnBlockedNodesLowMemoryKiller.class);
    newExporter(binder).export(ClusterMemoryManager.class).withGeneratedName();
    // node monitor
    binder.bind(ClusterSizeMonitor.class).in(Scopes.SINGLETON);
    // statistics calculator
    binder.install(new StatsCalculatorModule());
    // cost calculator
    binder.bind(TaskCountEstimator.class).in(Scopes.SINGLETON);
    binder.bind(CostCalculator.class).to(CostCalculatorUsingExchanges.class).in(Scopes.SINGLETON);
    binder.bind(CostCalculator.class).annotatedWith(EstimatedExchanges.class).to(CostCalculatorWithEstimatedExchanges.class).in(Scopes.SINGLETON);
    binder.bind(CostComparator.class).in(Scopes.SINGLETON);
    // cluster statistics
    jaxrsBinder(binder).bind(ClusterStatsResource.class);
    // planner
    binder.bind(PlanFragmenter.class).in(Scopes.SINGLETON);
    binder.bind(PlanOptimizers.class).in(Scopes.SINGLETON);
    // query explainer
    binder.bind(QueryExplainer.class).in(Scopes.SINGLETON);
    // explain analyze
    binder.bind(ExplainAnalyzeContext.class).in(Scopes.SINGLETON);
    // execution scheduler
    binder.bind(RemoteTaskFactory.class).to(HttpRemoteTaskFactory.class).in(Scopes.SINGLETON);
    newExporter(binder).export(RemoteTaskFactory.class).withGeneratedName();
    binder.bind(RemoteTaskStats.class).in(Scopes.SINGLETON);
    newExporter(binder).export(RemoteTaskStats.class).withGeneratedName();
    httpClientBinder(binder).bindHttpClient("scheduler", ForScheduler.class).withTracing().withFilter(GenerateTraceTokenRequestFilter.class).withConfigDefaults(config -> {
        config.setRequestTimeout(new Duration(10, SECONDS));
        config.setMaxConnectionsPerServer(250);
    });
    binder.bind(ScheduledExecutorService.class).annotatedWith(ForScheduler.class).toInstance(newSingleThreadScheduledExecutor(threadsNamed("stage-scheduler")));
    // query execution
    binder.bind(ExecutorService.class).annotatedWith(ForQueryExecution.class).toInstance(newCachedThreadPool(threadsNamed("query-execution-%s")));
    binder.bind(QueryExecutionMBean.class).in(Scopes.SINGLETON);
    newExporter(binder).export(QueryExecutionMBean.class).as(generatedNameOf(QueryExecution.class));
    MapBinder<Class<? extends Statement>, QueryExecutionFactory<?>> executionBinder = newMapBinder(binder, new TypeLiteral<Class<? extends Statement>>() {
    }, new TypeLiteral<QueryExecution.QueryExecutionFactory<?>>() {
    });
    binder.bind(SplitSchedulerStats.class).in(Scopes.SINGLETON);
    newExporter(binder).export(SplitSchedulerStats.class).withGeneratedName();
    binder.bind(SqlQueryExecutionFactory.class).in(Scopes.SINGLETON);
    binder.bind(SectionExecutionFactory.class).in(Scopes.SINGLETON);
    Set<Map.Entry<Class<? extends Statement>, QueryType>> queryTypes = getAllQueryTypes().entrySet();
    // bind sql query statements to SqlQueryExecutionFactory
    queryTypes.stream().filter(entry -> entry.getValue() != QueryType.DATA_DEFINITION).forEach(entry -> executionBinder.addBinding(entry.getKey()).to(SqlQueryExecutionFactory.class).in(Scopes.SINGLETON));
    binder.bind(PartialResultQueryManager.class).in(Scopes.SINGLETON);
    // bind data definition statements to DataDefinitionExecutionFactory
    queryTypes.stream().filter(entry -> entry.getValue() == QueryType.DATA_DEFINITION && !isSessionTransactionControlStatement(entry.getKey())).forEach(entry -> executionBinder.addBinding(entry.getKey()).to(DDLDefinitionExecutionFactory.class).in(Scopes.SINGLETON));
    binder.bind(DDLDefinitionExecutionFactory.class).in(Scopes.SINGLETON);
    // bind session Control statements to SessionTransactionExecutionFactory
    queryTypes.stream().filter(entry -> (entry.getValue() == QueryType.DATA_DEFINITION && isSessionTransactionControlStatement(entry.getKey()))).forEach(entry -> executionBinder.addBinding(entry.getKey()).to(SessionDefinitionExecutionFactory.class).in(Scopes.SINGLETON));
    binder.bind(SessionDefinitionExecutionFactory.class).in(Scopes.SINGLETON);
    // helper class binding data definition tasks and statements
    PrestoDataDefBindingHelper.bindDDLDefinitionTasks(binder);
    PrestoDataDefBindingHelper.bindTransactionControlDefinitionTasks(binder);
    MapBinder<String, ExecutionPolicy> executionPolicyBinder = newMapBinder(binder, String.class, ExecutionPolicy.class);
    executionPolicyBinder.addBinding("all-at-once").to(AllAtOnceExecutionPolicy.class);
    executionPolicyBinder.addBinding("phased").to(PhasedExecutionPolicy.class);
    configBinder(binder).bindConfig(NodeResourceStatusConfig.class);
    binder.bind(NodeResourceStatusProvider.class).to(NodeResourceStatus.class).in(Scopes.SINGLETON);
    newOptionalBinder(binder, ResourceManagerProxy.class);
    install(installModuleIf(ServerConfig.class, ServerConfig::isResourceManagerEnabled, rmBinder -> {
        httpClientBinder(rmBinder).bindHttpClient("resourceManager", ForResourceManager.class);
        rmBinder.bind(ResourceManagerProxy.class).in(Scopes.SINGLETON);
    }));
    // cleanup
    binder.bind(ExecutorCleanup.class).in(Scopes.SINGLETON);
}
Also used : JaxrsBinder.jaxrsBinder(com.facebook.airlift.jaxrs.JaxrsBinder.jaxrsBinder) QueryExplainer(com.facebook.presto.sql.analyzer.QueryExplainer) QueryPerformanceFetcher(com.facebook.presto.execution.QueryPerformanceFetcher) QueryExecutionFactory(com.facebook.presto.execution.QueryExecution.QueryExecutionFactory) Executors.newSingleThreadScheduledExecutor(java.util.concurrent.Executors.newSingleThreadScheduledExecutor) Executors.newScheduledThreadPool(java.util.concurrent.Executors.newScheduledThreadPool) Map(java.util.Map) SqlQueryExecutionFactory(com.facebook.presto.execution.SqlQueryExecution.SqlQueryExecutionFactory) TaskCountEstimator(com.facebook.presto.cost.TaskCountEstimator) RemoteTaskFactory(com.facebook.presto.execution.RemoteTaskFactory) PhasedExecutionPolicy(com.facebook.presto.execution.scheduler.PhasedExecutionPolicy) Set(java.util.Set) QueryIdGenerator(com.facebook.presto.execution.QueryIdGenerator) ForMemoryManager(com.facebook.presto.memory.ForMemoryManager) RetryCircuitBreaker(com.facebook.presto.server.protocol.RetryCircuitBreaker) QueryExecution(com.facebook.presto.execution.QueryExecution) QueryInfo(com.facebook.presto.execution.QueryInfo) QueryPreparer(com.facebook.presto.execution.QueryPreparer) NodeResourceStatusConfig(com.facebook.presto.execution.NodeResourceStatusConfig) InternalResourceGroupManager(com.facebook.presto.execution.resourceGroups.InternalResourceGroupManager) TypeLiteral(com.google.inject.TypeLiteral) DispatchExecutor(com.facebook.presto.dispatcher.DispatchExecutor) EmbeddedDiscoveryModule(com.facebook.airlift.discovery.server.EmbeddedDiscoveryModule) Binder(com.google.inject.Binder) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) LocalDispatchQueryFactory(com.facebook.presto.dispatcher.LocalDispatchQueryFactory) NoneLowMemoryKiller(com.facebook.presto.memory.NoneLowMemoryKiller) ExecutingStatementResource(com.facebook.presto.server.protocol.ExecutingStatementResource) RemoteTaskStats(com.facebook.presto.server.remotetask.RemoteTaskStats) TransactionManager(com.facebook.presto.transaction.TransactionManager) ResourceGroupManager(com.facebook.presto.execution.resourceGroups.ResourceGroupManager) DDLDefinitionExecutionFactory(com.facebook.presto.execution.DDLDefinitionExecution.DDLDefinitionExecutionFactory) LegacyResourceGroupConfigurationManager(com.facebook.presto.execution.resourceGroups.LegacyResourceGroupConfigurationManager) ClusterMemoryPoolManager(com.facebook.presto.spi.memory.ClusterMemoryPoolManager) Threads.threadsNamed(com.facebook.airlift.concurrent.Threads.threadsNamed) QueryExecutionMBean(com.facebook.presto.execution.QueryExecutionMBean) AllAtOnceExecutionPolicy(com.facebook.presto.execution.scheduler.AllAtOnceExecutionPolicy) QueryMonitor(com.facebook.presto.event.QueryMonitor) InMemoryTransactionManager(com.facebook.presto.transaction.InMemoryTransactionManager) ForQueryExecution(com.facebook.presto.execution.ForQueryExecution) ClusterSizeMonitor(com.facebook.presto.execution.ClusterSizeMonitor) TaskInfo(com.facebook.presto.execution.TaskInfo) CostCalculatorWithEstimatedExchanges(com.facebook.presto.cost.CostCalculatorWithEstimatedExchanges) ForScheduler(com.facebook.presto.operator.ForScheduler) EstimatedExchanges(com.facebook.presto.cost.CostCalculator.EstimatedExchanges) SectionExecutionFactory(com.facebook.presto.execution.scheduler.SectionExecutionFactory) TaskManagerConfig(com.facebook.presto.execution.TaskManagerConfig) Duration(io.airlift.units.Duration) PreDestroy(javax.annotation.PreDestroy) AbstractConfigurationAwareModule(com.facebook.airlift.configuration.AbstractConfigurationAwareModule) HttpClientBinder.httpClientBinder(com.facebook.airlift.http.client.HttpClientBinder.httpClientBinder) ExportBinder.newExporter(org.weakref.jmx.guice.ExportBinder.newExporter) OperatorInfo(com.facebook.presto.operator.OperatorInfo) MapBinder(com.google.inject.multibindings.MapBinder) ExecutionPolicy(com.facebook.presto.execution.scheduler.ExecutionPolicy) OptionalBinder.newOptionalBinder(com.google.inject.multibindings.OptionalBinder.newOptionalBinder) ForResourceManager(com.facebook.presto.resourcemanager.ForResourceManager) ResourceManagerProxy(com.facebook.presto.resourcemanager.ResourceManagerProxy) StatementUtils.isSessionTransactionControlStatement(com.facebook.presto.util.StatementUtils.isSessionTransactionControlStatement) SplitSchedulerStats(com.facebook.presto.execution.scheduler.SplitSchedulerStats) ConditionalModule.installModuleIf(com.facebook.airlift.configuration.ConditionalModule.installModuleIf) CostCalculatorUsingExchanges(com.facebook.presto.cost.CostCalculatorUsingExchanges) CostCalculator(com.facebook.presto.cost.CostCalculator) LowMemoryKiller(com.facebook.presto.memory.LowMemoryKiller) Threads.daemonThreadsNamed(com.facebook.airlift.concurrent.Threads.daemonThreadsNamed) List(java.util.List) StatementUtils.getAllQueryTypes(com.facebook.presto.util.StatementUtils.getAllQueryTypes) TransactionManagerConfig(com.facebook.presto.transaction.TransactionManagerConfig) PrestoDataDefBindingHelper(com.facebook.presto.util.PrestoDataDefBindingHelper) DispatchQueryFactory(com.facebook.presto.dispatcher.DispatchQueryFactory) HttpRemoteTaskFactory(com.facebook.presto.server.remotetask.HttpRemoteTaskFactory) TotalReservationLowMemoryKiller(com.facebook.presto.memory.TotalReservationLowMemoryKiller) QueryResults(com.facebook.presto.client.QueryResults) ForTransactionManager(com.facebook.presto.transaction.ForTransactionManager) QueryManager(com.facebook.presto.execution.QueryManager) Singleton(javax.inject.Singleton) JsonCodecBinder.jsonCodecBinder(com.facebook.airlift.json.JsonCodecBinder.jsonCodecBinder) StatsCalculatorModule(com.facebook.presto.cost.StatsCalculatorModule) PlanOptimizers(com.facebook.presto.sql.planner.PlanOptimizers) Inject(javax.inject.Inject) BoundedExecutor(com.facebook.airlift.concurrent.BoundedExecutor) ImmutableList(com.google.common.collect.ImmutableList) ExplainAnalyzeContext(com.facebook.presto.execution.ExplainAnalyzeContext) MemoryManagerConfig(com.facebook.presto.memory.MemoryManagerConfig) PlanFragmenter(com.facebook.presto.sql.planner.PlanFragmenter) ExecutorService(java.util.concurrent.ExecutorService) SelectedRole(com.facebook.presto.spi.security.SelectedRole) MapBinder.newMapBinder(com.google.inject.multibindings.MapBinder.newMapBinder) SessionDefinitionExecutionFactory(com.facebook.presto.execution.SessionDefinitionExecution.SessionDefinitionExecutionFactory) ObjectNames.generatedNameOf(org.weakref.jmx.ObjectNames.generatedNameOf) ClusterMemoryManager(com.facebook.presto.memory.ClusterMemoryManager) LocalQueryProvider(com.facebook.presto.server.protocol.LocalQueryProvider) DispatchManager(com.facebook.presto.dispatcher.DispatchManager) LowMemoryKillerPolicy(com.facebook.presto.memory.MemoryManagerConfig.LowMemoryKillerPolicy) Scopes(com.google.inject.Scopes) CatalogManager(com.facebook.presto.metadata.CatalogManager) TotalReservationOnBlockedNodesLowMemoryKiller(com.facebook.presto.memory.TotalReservationOnBlockedNodesLowMemoryKiller) FailureDetectorModule(com.facebook.presto.failureDetector.FailureDetectorModule) Provides(com.google.inject.Provides) QueryMonitorConfig(com.facebook.presto.event.QueryMonitorConfig) QueuedStatementResource(com.facebook.presto.server.protocol.QueuedStatementResource) QueryType(com.facebook.presto.spi.resourceGroups.QueryType) Executors.newCachedThreadPool(java.util.concurrent.Executors.newCachedThreadPool) HttpServerBinder.httpServerBinder(com.facebook.airlift.http.server.HttpServerBinder.httpServerBinder) CostComparator(com.facebook.presto.cost.CostComparator) FailedDispatchQueryFactory(com.facebook.presto.dispatcher.FailedDispatchQueryFactory) SqlQueryManager(com.facebook.presto.execution.SqlQueryManager) ConfigBinder.configBinder(com.facebook.airlift.configuration.ConfigBinder.configBinder) DiscoveryBinder.discoveryBinder(com.facebook.airlift.discovery.client.DiscoveryBinder.discoveryBinder) SECONDS(java.util.concurrent.TimeUnit.SECONDS) PartialResultQueryManager(com.facebook.presto.execution.PartialResultQueryManager) Statement(com.facebook.presto.sql.tree.Statement) QueryIdGenerator(com.facebook.presto.execution.QueryIdGenerator) DispatchManager(com.facebook.presto.dispatcher.DispatchManager) FailureDetectorModule(com.facebook.presto.failureDetector.FailureDetectorModule) RetryCircuitBreaker(com.facebook.presto.server.protocol.RetryCircuitBreaker) QueryPreparer(com.facebook.presto.execution.QueryPreparer) RemoteTaskStats(com.facebook.presto.server.remotetask.RemoteTaskStats) QueryMonitor(com.facebook.presto.event.QueryMonitor) HttpRemoteTaskFactory(com.facebook.presto.server.remotetask.HttpRemoteTaskFactory) QueryExecutionMBean(com.facebook.presto.execution.QueryExecutionMBean) LegacyResourceGroupConfigurationManager(com.facebook.presto.execution.resourceGroups.LegacyResourceGroupConfigurationManager) RemoteTaskFactory(com.facebook.presto.execution.RemoteTaskFactory) HttpRemoteTaskFactory(com.facebook.presto.server.remotetask.HttpRemoteTaskFactory) DDLDefinitionExecutionFactory(com.facebook.presto.execution.DDLDefinitionExecution.DDLDefinitionExecutionFactory) QueryExplainer(com.facebook.presto.sql.analyzer.QueryExplainer) InternalResourceGroupManager(com.facebook.presto.execution.resourceGroups.InternalResourceGroupManager) ResourceGroupManager(com.facebook.presto.execution.resourceGroups.ResourceGroupManager) Duration(io.airlift.units.Duration) PartialResultQueryManager(com.facebook.presto.execution.PartialResultQueryManager) LocalQueryProvider(com.facebook.presto.server.protocol.LocalQueryProvider) SplitSchedulerStats(com.facebook.presto.execution.scheduler.SplitSchedulerStats) QueryExecutionFactory(com.facebook.presto.execution.QueryExecution.QueryExecutionFactory) SqlQueryExecutionFactory(com.facebook.presto.execution.SqlQueryExecution.SqlQueryExecutionFactory) PlanOptimizers(com.facebook.presto.sql.planner.PlanOptimizers) CostCalculatorWithEstimatedExchanges(com.facebook.presto.cost.CostCalculatorWithEstimatedExchanges) ForQueryExecution(com.facebook.presto.execution.ForQueryExecution) SessionDefinitionExecutionFactory(com.facebook.presto.execution.SessionDefinitionExecution.SessionDefinitionExecutionFactory) PlanFragmenter(com.facebook.presto.sql.planner.PlanFragmenter) QueryExecution(com.facebook.presto.execution.QueryExecution) ForQueryExecution(com.facebook.presto.execution.ForQueryExecution) FailedDispatchQueryFactory(com.facebook.presto.dispatcher.FailedDispatchQueryFactory) SqlQueryExecutionFactory(com.facebook.presto.execution.SqlQueryExecution.SqlQueryExecutionFactory) InternalResourceGroupManager(com.facebook.presto.execution.resourceGroups.InternalResourceGroupManager) CostCalculatorUsingExchanges(com.facebook.presto.cost.CostCalculatorUsingExchanges) ForScheduler(com.facebook.presto.operator.ForScheduler) ExplainAnalyzeContext(com.facebook.presto.execution.ExplainAnalyzeContext) ClusterSizeMonitor(com.facebook.presto.execution.ClusterSizeMonitor) StatsCalculatorModule(com.facebook.presto.cost.StatsCalculatorModule) TaskCountEstimator(com.facebook.presto.cost.TaskCountEstimator) CostComparator(com.facebook.presto.cost.CostComparator) ForResourceManager(com.facebook.presto.resourcemanager.ForResourceManager) StatementUtils.isSessionTransactionControlStatement(com.facebook.presto.util.StatementUtils.isSessionTransactionControlStatement) Statement(com.facebook.presto.sql.tree.Statement) EmbeddedDiscoveryModule(com.facebook.airlift.discovery.server.EmbeddedDiscoveryModule) CostCalculator(com.facebook.presto.cost.CostCalculator) LocalDispatchQueryFactory(com.facebook.presto.dispatcher.LocalDispatchQueryFactory) DispatchQueryFactory(com.facebook.presto.dispatcher.DispatchQueryFactory) FailedDispatchQueryFactory(com.facebook.presto.dispatcher.FailedDispatchQueryFactory) PhasedExecutionPolicy(com.facebook.presto.execution.scheduler.PhasedExecutionPolicy) AllAtOnceExecutionPolicy(com.facebook.presto.execution.scheduler.AllAtOnceExecutionPolicy) ExecutionPolicy(com.facebook.presto.execution.scheduler.ExecutionPolicy) ClusterMemoryManager(com.facebook.presto.memory.ClusterMemoryManager) QueryManager(com.facebook.presto.execution.QueryManager) SqlQueryManager(com.facebook.presto.execution.SqlQueryManager) PartialResultQueryManager(com.facebook.presto.execution.PartialResultQueryManager) DispatchExecutor(com.facebook.presto.dispatcher.DispatchExecutor) SectionExecutionFactory(com.facebook.presto.execution.scheduler.SectionExecutionFactory) SqlQueryManager(com.facebook.presto.execution.SqlQueryManager)

Aggregations

Threads.daemonThreadsNamed (com.facebook.airlift.concurrent.Threads.daemonThreadsNamed)2 AbstractConfigurationAwareModule (com.facebook.airlift.configuration.AbstractConfigurationAwareModule)2 ConfigBinder.configBinder (com.facebook.airlift.configuration.ConfigBinder.configBinder)2 JsonCodecBinder.jsonCodecBinder (com.facebook.airlift.json.JsonCodecBinder.jsonCodecBinder)2 CostCalculator (com.facebook.presto.cost.CostCalculator)2 CostCalculatorUsingExchanges (com.facebook.presto.cost.CostCalculatorUsingExchanges)2 CostCalculatorWithEstimatedExchanges (com.facebook.presto.cost.CostCalculatorWithEstimatedExchanges)2 CostComparator (com.facebook.presto.cost.CostComparator)2 StatsCalculatorModule (com.facebook.presto.cost.StatsCalculatorModule)2 TaskCountEstimator (com.facebook.presto.cost.TaskCountEstimator)2 QueryMonitor (com.facebook.presto.event.QueryMonitor)2 QueryMonitorConfig (com.facebook.presto.event.QueryMonitorConfig)2 ExplainAnalyzeContext (com.facebook.presto.execution.ExplainAnalyzeContext)2 QueryIdGenerator (com.facebook.presto.execution.QueryIdGenerator)2 QueryInfo (com.facebook.presto.execution.QueryInfo)2 QueryManager (com.facebook.presto.execution.QueryManager)2 BoundedExecutor (com.facebook.airlift.concurrent.BoundedExecutor)1 Threads.threadsNamed (com.facebook.airlift.concurrent.Threads.threadsNamed)1 ConditionalModule.installModuleIf (com.facebook.airlift.configuration.ConditionalModule.installModuleIf)1 DiscoveryBinder.discoveryBinder (com.facebook.airlift.discovery.client.DiscoveryBinder.discoveryBinder)1