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

# Generic HDFS Connector Resources

############################

# Link Config
linkConfig.label = Link configuration
linkConfig.help = Here you supply information necessary to connect to HDFS

linkConfig.uri.label = HDFS URI
linkConfig.uri.help = HDFS URI used to connect to HDFS

linkConfig.confDir.label = Hadoop conf directory
linkConfig.confDir.help = Directory with Hadoop configuration files. The connector will load all -site.xml files.

# To Job Config
#
toJobConfig.label = To HDFS configuration
toJobConfig.help = You must supply the information requested in order to \
                   get information where you want to store your data.

toJobConfig.storageType.label = Storage type
toJobConfig.storageType.help = Target on Hadoop ecosystem where to store data

toJobConfig.outputFormat.label = Output format
toJobConfig.outputFormat.help = Format in which data should be serialized

toJobConfig.compression.label = Compression format
toJobConfig.compression.help = Compression that should be used for the data

toJobConfig.customCompression.label = Custom compression format
toJobConfig.customCompression.help = Full class name of the custom compression

toJobConfig.outputDirectory.label = Output directory
toJobConfig.outputDirectory.help = Output directory for final data

toJobConfig.appendMode.label = Append mode
toJobConfig.appendMode.help = Append new files to existing directory if the output directory already exists

toJobConfig.overrideNullValue.label = Override null value
toJobConfig.overrideNullValue.help = If set to true, then the null value will \
                                     be overridden with the value set in \
                                     toJobConfig.nullValue.

toJobConfig.nullValue.label = Null value
toJobConfig.nullValue.help = Use this particular character or sequence of characters \
                             as a value representing null when outputting to a file.

# From Job Config
#
fromJobConfig.label = From HDFS configuration
fromJobConfig.help = Specifies information required to get data from Hadoop ecosystem

fromJobConfig.inputDirectory.label = Input directory
fromJobConfig.inputDirectory.help = Directory that should be exported

fromJobConfig.overrideNullValue.label = Override null value
fromJobConfig.overrideNullValue.help = If set to true, then the null value will \
                                     be overridden with the value set in \
                                     toJobConfig.nullValue.

fromJobConfig.nullValue.label = Null value
fromJobConfig.nullValue.help = Use this particular character or sequence of characters \
                             as a value representing null when outputting to a file.
