#
# 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.
#

Introduction
  This utility exports data in Apache Atlas HDP-2.6.x to a file system
  directory, so that the exported data can be imported into Apache Atlas
  in HDP-3.0.

What is exported?
  All data in Titan graph database, both type-system and entity-instances
  data, will be exported.

How much time will it take to export data?
  The duration of the export process depends on the number of entities
  present in graph database. While cluster configuration determines speed
  of operation, for cluster with reasonable configuration, it takes about
  30 minutes to export 1 million entities.

Steps to export data from Apache Atlas in HDP-2.6.x
  - Shutdown Apache Atlas. This is critical to ensure that no updates are
    being made to Apache Atlas database while export is in progress.

  - Execute the following commands in the host where Apache Atlas server runs:
      cd <Atlas-installation-directory>/tools/atlas-migration-exporter
      python atlas_migration_export.py -d <output directory>

  - On successful completion, the migration exporter will display messages like:
      atlas-migration-export: starting migration export. Log file location /var/log/atlas/atlas-migration-exporter.log
	  atlas-migration-export: initializing
      atlas-migration-export: initialized
      atlas-migration-export: exporting typesDef to file <output directory>/atlas-migration-typesdef.json
      atlas-migration-export: exported  typesDef to file <output directory>/atlas-migration-typesdef.json
      atlas-migration-export: exporting data to file <output directory>/atlas-migration-data.json
      atlas-migration-export: exported  data to file <output directory>/atlas-migration-data.json
      atlas-migration-export: completed migration export!

Next Steps
  Once export completes successfully, please refer to Apache Atlas Migration
  Guide for details on importing the data in Apache Atlas in HDP-3.0.
