# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# This defines a basic Impala service with a single Impala Daemon and the minimal set of
# services required to support it. A Hive MetaStore service is used to manage metadata.
# All filesystem data is stored in Docker volumes. The default storage location for tables
# is in the impala-quickstart-warehouse volume, i.e. if you create a table in Impala, it
# will be stored in that volume by default.
#
# See README.md in this directory for usage instructions.
version: "3"
services:
  hms:
    image: ${IMPALA_QUICKSTART_IMAGE_PREFIX:-}impala_quickstart_hms
    # Give the HMS an explicit hostname to avoid issues with docker-compose-generated
    # hostnames including underscore, which is rejected by Java's URL parser.
    container_name: quickstart-hive-metastore
    command: ["hms"]
    volumes:
      # Volume used to store Apache Derby database.
      - impala-quickstart-warehouse:/var/lib/hive
      # Warehouse directory. HMS does file operations so needs access to the
      # shared volume.
      - impala-quickstart-warehouse:/user/hive/warehouse
      - ./quickstart_conf:/opt/hive/conf:ro
    networks:
      - quickstart-network
  statestored:
    image: ${IMPALA_QUICKSTART_IMAGE_PREFIX:-}statestored
    ports:
      # Web debug UI
      - "${QUICKSTART_LISTEN_ADDR:?Please set QUICKSTART_LISTEN_ADDR environment variable}:25010:25010"
    command: ["-redirect_stdout_stderr=false", "-logtostderr", "-v=1"]
    volumes:
      - ./quickstart_conf:/opt/impala/conf:ro
    networks:
      - quickstart-network
  catalogd:
    depends_on:
      - statestored
      - hms
    image: ${IMPALA_QUICKSTART_IMAGE_PREFIX:-}catalogd
    ports:
      # Web debug UI
      - "${QUICKSTART_LISTEN_ADDR:?Please set QUICKSTART_LISTEN_ADDR environment variable}:25020:25020"
    command: ["-redirect_stdout_stderr=false", "-logtostderr", "-v=1",
              "-hms_event_polling_interval_s=1", "-invalidate_tables_timeout_s=999999"]
    volumes:
      # Warehouse directory. Catalog does file operations so needs access to the
      # shared volume.
      - impala-quickstart-warehouse:/user/hive/warehouse
      - ./quickstart_conf:/opt/impala/conf:ro
    networks:
      - quickstart-network
  impalad-1:
    image: ${IMPALA_QUICKSTART_IMAGE_PREFIX:-}impalad_coord_exec
    depends_on:
      - statestored
      - catalogd
    ports:
      # Beeswax endpoint (deprecated)
      - "${QUICKSTART_LISTEN_ADDR:?Please set QUICKSTART_LISTEN_ADDR environment variable}:21000:21000"
      # HS2 endpoint
      - "${QUICKSTART_LISTEN_ADDR:?Please set QUICKSTART_LISTEN_ADDR environment variable}:21050:21050"
      # Web debug UI
      - "${QUICKSTART_LISTEN_ADDR:?Please set QUICKSTART_LISTEN_ADDR environment variable}:25000:25000"
      # HS2 over HTTP endpoint.
      - "${QUICKSTART_LISTEN_ADDR:?Please set QUICKSTART_LISTEN_ADDR environment variable}:28000:28000"
    command: [ "-v=1",
              "-redirect_stdout_stderr=false", "-logtostderr",
              "-kudu_master_hosts=kudu-master-1:7051",
              "-mt_dop_auto_fallback=true",
              "-default_query_options=mt_dop=4,default_file_format=parquet,default_transactional_type=insert_only",
              "-mem_limit=4gb"]
    environment:
      # Keep the Java heap small to preserve memory for query execution.
      - JAVA_TOOL_OPTIONS="-Xmx1g"
    volumes:
      - impala-quickstart-warehouse:/user/hive/warehouse
      - ./quickstart_conf:/opt/impala/conf:ro
    networks:
      - quickstart-network
volumes:
  impala-quickstart-hms:
  impala-quickstart-warehouse:

networks:
  quickstart-network:
    external: true

