blob: 8a257cadff9c3cb8f5f0d3e8e1278cab25167166 [file] [log] [blame]
/*
* 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.
*/
package org.apache.iotdb.tsfile.common.conf;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.fileSystem.FSType;
import org.apache.iotdb.tsfile.utils.FSUtils;
import java.io.Serializable;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
/** TSFileConfig is a configuration class. Every variable is public and has default value. */
public class TSFileConfig implements Serializable {
/** encoding configuration. */
public static final int RLE_MIN_REPEATED_NUM = 8;
public static final int RLE_MAX_REPEATED_NUM = 0x7FFF;
public static final int RLE_MAX_BIT_PACKED_NUM = 63;
public static final int FLOAT_VALUE_LENGTH = 6;
public static final int DOUBLE_VALUE_LENGTH = 7;
public static final int VALUE_BITS_LENGTH_32BIT = 32;
public static final int LEADING_ZERO_BITS_LENGTH_32BIT = 5;
public static final int MEANINGFUL_XOR_BITS_LENGTH_32BIT = 5;
public static final int VALUE_BITS_LENGTH_64BIT = 64;
public static final int LEADING_ZERO_BITS_LENGTH_64BIT = 6;
public static final int MEANINGFUL_XOR_BITS_LENGTH_64BIT = 6;
public static final int GORILLA_ENCODING_ENDING_INTEGER = Integer.MIN_VALUE;
public static final long GORILLA_ENCODING_ENDING_LONG = Long.MIN_VALUE;
public static final float GORILLA_ENCODING_ENDING_FLOAT = Float.NaN;
public static final double GORILLA_ENCODING_ENDING_DOUBLE = Double.NaN;
/** String encoder with UTF-8 encodes a character to at most 4 bytes. */
public static final int BYTE_SIZE_PER_CHAR = 4;
public static final String STRING_ENCODING = "UTF-8";
public static final Charset STRING_CHARSET = StandardCharsets.UTF_8;
public static final String CONFIG_FILE_NAME = "iotdb-common.properties";
public static final String MAGIC_STRING = "TsFile";
public static final String VERSION_NUMBER_V2 = "000002";
public static final String VERSION_NUMBER_V1 = "000001";
/** version number is changed to use 1 byte to represent since version 3. */
public static final byte VERSION_NUMBER = 0x03;
/** Bloom filter constrain. */
public static final double MIN_BLOOM_FILTER_ERROR_RATE = 0.01;
public static final double MAX_BLOOM_FILTER_ERROR_RATE = 0.1;
/** The primitive array capacity threshold. */
public static final int ARRAY_CAPACITY_THRESHOLD = 1000;
/** Memory size threshold for flushing to disk, default value is 128MB. */
private int groupSizeInByte = 128 * 1024 * 1024;
/** The memory size for each series writer to pack page, default value is 64KB. */
private int pageSizeInByte = 64 * 1024;
/** The maximum number of data points in a page, default value is 10000. */
private int maxNumberOfPointsInPage = 10_000;
/** The maximum degree of a metadataIndex node, default value is 256. */
private int maxDegreeOfIndexNode = 256;
/** Data type for input timestamp, TsFile supports INT64. */
private TSDataType timeSeriesDataType = TSDataType.INT64;
/** Max length limitation of input string. */
private int maxStringLength = 128;
/** Floating-point precision. */
private int floatPrecision = 2;
/**
* Encoder of time column, TsFile supports TS_2DIFF, PLAIN and RLE(run-length encoding) Default
* value is TS_2DIFF.
*/
private String timeEncoding = "TS_2DIFF";
/**
* Encoder of value series. default value is PLAIN. For int, long data type, TsFile also supports
* TS_2DIFF, REGULAR, GORILLA and RLE(run-length encoding). For float, double data type, TsFile
* also supports TS_2DIFF, RLE(run-length encoding) and GORILLA. For text data type, TsFile only
* supports PLAIN.
*/
private String valueEncoder = "PLAIN";
/** Default bit width of RLE encoding is 8. */
private int rleBitWidth = 8;
/** Default block size of two-diff. delta encoding is 128. */
private int deltaBlockSize = 128;
/** Default frequency type is SINGLE_FREQ. */
private String freqType = "SINGLE_FREQ";
/** Default PLA max error is 100. */
private double plaMaxError = 100;
/** Default SDT max error is 100. */
private double sdtMaxError = 100;
/** Default DFT satisfy rate is 0.1 */
private double dftSatisfyRate = 0.1;
/** Data compression method, TsFile supports UNCOMPRESSED, SNAPPY, ZSTD or LZ4. */
private CompressionType compressor = CompressionType.LZ4;
/** Line count threshold for checking page memory occupied size. */
private int pageCheckSizeThreshold = 100;
/** Default endian value is BIG_ENDIAN. */
private String endian = "BIG_ENDIAN";
/** Default storage is in local file system. */
private FSType[] tSFileStorageFs = new FSType[] {FSType.LOCAL};
/** Default core-site.xml file path is /etc/hadoop/conf/core-site.xml */
private String coreSitePath = "/etc/hadoop/conf/core-site.xml";
/** Default hdfs-site.xml file path is /etc/hadoop/conf/hdfs-site.xml */
private String hdfsSitePath = "/etc/hadoop/conf/hdfs-site.xml";
/** Default hdfs ip is localhost. */
private String hdfsIp = "localhost";
/** Default hdfs port is 9000. */
private String hdfsPort = "9000";
/** Default DFS NameServices is hdfsnamespace. */
private String dfsNameServices = "hdfsnamespace.";
/** Default DFS HA name nodes are nn1 and nn2. */
private String dfsHaNamenodes = "nn1,nn2";
/** Default DFS HA automatic failover is enabled. */
private boolean dfsHaAutomaticFailoverEnabled = true;
/**
* Default DFS client failover proxy provider is
* "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
*/
private String dfsClientFailoverProxyProvider =
"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider";
/** whether use kerberos to authenticate hdfs. */
private boolean useKerberos = false;
/** full path of kerberos keytab file. */
private String kerberosKeytabFilePath = "/path";
/** kerberos pricipal. */
private String kerberosPrincipal = "principal";
/** The acceptable error rate of bloom filter. */
private double bloomFilterErrorRate = 0.05;
/** The amount of data iterate each time. */
private int batchSize = 1000;
/** Maximum capacity of a TsBlock, allow up to two pages. */
private int maxTsBlockSizeInBytes = 128 * 1024;
/** Maximum number of lines in a single TsBlock. */
private int maxTsBlockLineNumber = 1000;
private int patternMatchingThreshold = 1000000;
private String hdfsFile = "org.apache.iotdb.hadoop.fileSystem.HDFSFile";
private String hdfsTsFileInput = "org.apache.iotdb.hadoop.fileSystem.HDFSInput";
private String hdfsTsFileOutput = "org.apache.iotdb.hadoop.fileSystem.HDFSOutput";
private String objectStorageFile = "org.apache.iotdb.os.fileSystem.OSFile";
private String objectStorageTsFileInput = "org.apache.iotdb.os.fileSystem.OSTsFileInput";
private String objectStorageTsFileOutput = "org.apache.iotdb.os.fileSystem.OSTsFileOutput";
/** customizedProperties, this should be empty by default. */
private Properties customizedProperties = new Properties();
public TSFileConfig() {
// do nothing because we already give default value to each field when they are being declared
}
public int getGroupSizeInByte() {
return groupSizeInByte;
}
public void setGroupSizeInByte(int groupSizeInByte) {
this.groupSizeInByte = groupSizeInByte;
}
public int getPageSizeInByte() {
return pageSizeInByte;
}
public void setPageSizeInByte(int pageSizeInByte) {
this.pageSizeInByte = pageSizeInByte;
}
public int getMaxNumberOfPointsInPage() {
return maxNumberOfPointsInPage;
}
public void setMaxNumberOfPointsInPage(int maxNumberOfPointsInPage) {
this.maxNumberOfPointsInPage = maxNumberOfPointsInPage;
}
public int getMaxDegreeOfIndexNode() {
return maxDegreeOfIndexNode;
}
public void setMaxDegreeOfIndexNode(int maxDegreeOfIndexNode) {
this.maxDegreeOfIndexNode = maxDegreeOfIndexNode;
}
public TSDataType getTimeSeriesDataType() {
return timeSeriesDataType;
}
// TS_2DIFF configuration
public void setTimeSeriesDataType(TSDataType timeSeriesDataType) {
this.timeSeriesDataType = timeSeriesDataType;
}
public int getMaxStringLength() {
return maxStringLength;
}
// Freq encoder configuration
public void setMaxStringLength(int maxStringLength) {
this.maxStringLength = maxStringLength;
}
public int getFloatPrecision() {
return floatPrecision;
}
public void setFloatPrecision(int floatPrecision) {
this.floatPrecision = floatPrecision;
}
public String getTimeEncoder() {
return timeEncoding;
}
// Compression configuration
public void setTimeEncoder(String timeEncoder) {
this.timeEncoding = timeEncoder;
}
// Don't change the following configuration
public String getValueEncoder() {
return valueEncoder;
}
public void setValueEncoder(String valueEncoder) {
this.valueEncoder = valueEncoder;
}
public int getRleBitWidth() {
return rleBitWidth;
}
public void setRleBitWidth(int rleBitWidth) {
this.rleBitWidth = rleBitWidth;
}
public int getDeltaBlockSize() {
return deltaBlockSize;
}
public void setDeltaBlockSize(int deltaBlockSize) {
this.deltaBlockSize = deltaBlockSize;
}
public String getFreqType() {
return freqType;
}
public void setFreqType(String freqType) {
this.freqType = freqType;
}
public double getPlaMaxError() {
return plaMaxError;
}
public void setPlaMaxError(double plaMaxError) {
this.plaMaxError = plaMaxError;
}
public double getSdtMaxError() {
return sdtMaxError;
}
public void setSdtMaxError(double sdtMaxError) {
this.sdtMaxError = sdtMaxError;
}
public double getDftSatisfyRate() {
return dftSatisfyRate;
}
public void setDftSatisfyRate(double dftSatisfyRate) {
this.dftSatisfyRate = dftSatisfyRate;
}
public CompressionType getCompressor() {
return compressor;
}
public void setCompressor(String compressor) {
this.compressor = CompressionType.valueOf(compressor);
}
public int getPageCheckSizeThreshold() {
return pageCheckSizeThreshold;
}
public void setPageCheckSizeThreshold(int pageCheckSizeThreshold) {
this.pageCheckSizeThreshold = pageCheckSizeThreshold;
}
public String getEndian() {
return endian;
}
public void setEndian(String endian) {
this.endian = endian;
}
public boolean isUseKerberos() {
return useKerberos;
}
public void setUseKerberos(boolean useKerberos) {
this.useKerberos = useKerberos;
}
public String getKerberosKeytabFilePath() {
return kerberosKeytabFilePath;
}
public void setKerberosKeytabFilePath(String kerberosKeytabFilePath) {
this.kerberosKeytabFilePath = kerberosKeytabFilePath;
}
public String getKerberosPrincipal() {
return kerberosPrincipal;
}
public void setKerberosPrincipal(String kerberosPrincipal) {
this.kerberosPrincipal = kerberosPrincipal;
}
public double getBloomFilterErrorRate() {
return bloomFilterErrorRate;
}
public void setBloomFilterErrorRate(double bloomFilterErrorRate) {
this.bloomFilterErrorRate = bloomFilterErrorRate;
}
public FSType[] getTSFileStorageFs() {
return this.tSFileStorageFs;
}
public void setTSFileStorageFs(FSType[] fileStorageFs) {
this.tSFileStorageFs = fileStorageFs;
FSUtils.reload();
}
public String getCoreSitePath() {
return coreSitePath;
}
public void setCoreSitePath(String coreSitePath) {
this.coreSitePath = coreSitePath;
}
public String getHdfsSitePath() {
return hdfsSitePath;
}
public void setHdfsSitePath(String hdfsSitePath) {
this.hdfsSitePath = hdfsSitePath;
}
public String[] getHdfsIp() {
return hdfsIp.split(",");
}
public void setHdfsIp(String[] hdfsIp) {
this.hdfsIp = String.join(",", hdfsIp);
}
public String getHdfsPort() {
return this.hdfsPort;
}
public void setHdfsPort(String hdfsPort) {
this.hdfsPort = hdfsPort;
}
public String getDfsNameServices() {
return dfsNameServices;
}
public void setDfsNameServices(String dfsNameServices) {
this.dfsNameServices = dfsNameServices;
}
public String[] getDfsHaNamenodes() {
return dfsHaNamenodes.split(",");
}
public void setDfsHaNamenodes(String[] dfsHaNamenodes) {
this.dfsHaNamenodes = String.join(",", dfsHaNamenodes);
}
public boolean isDfsHaAutomaticFailoverEnabled() {
return dfsHaAutomaticFailoverEnabled;
}
public void setDfsHaAutomaticFailoverEnabled(boolean dfsHaAutomaticFailoverEnabled) {
this.dfsHaAutomaticFailoverEnabled = dfsHaAutomaticFailoverEnabled;
}
public String getDfsClientFailoverProxyProvider() {
return dfsClientFailoverProxyProvider;
}
public void setDfsClientFailoverProxyProvider(String dfsClientFailoverProxyProvider) {
this.dfsClientFailoverProxyProvider = dfsClientFailoverProxyProvider;
}
public int getBatchSize() {
return batchSize;
}
public void setBatchSize(int batchSize) {
this.batchSize = batchSize;
}
public int getMaxTsBlockSizeInBytes() {
return maxTsBlockSizeInBytes;
}
public void setMaxTsBlockSizeInBytes(int maxTsBlockSizeInBytes) {
this.maxTsBlockSizeInBytes = maxTsBlockSizeInBytes;
}
public int getMaxTsBlockLineNumber() {
return maxTsBlockLineNumber;
}
public void setMaxTsBlockLineNumber(int maxTsBlockLineNumber) {
this.maxTsBlockLineNumber = maxTsBlockLineNumber;
}
public int getPatternMatchingThreshold() {
return patternMatchingThreshold;
}
public void setPatternMatchingThreshold(int patternMatchingThreshold) {
this.patternMatchingThreshold = patternMatchingThreshold;
}
public Properties getCustomizedProperties() {
return customizedProperties;
}
public void setCustomizedProperties(Properties customizedProperties) {
this.customizedProperties = customizedProperties;
}
public String getSprintzPredictScheme() {
return "fire";
}
public String getHdfsFile() {
return hdfsFile;
}
public void setHdfsFile(String hdfsFile) {
this.hdfsFile = hdfsFile;
}
public String getHdfsTsFileInput() {
return hdfsTsFileInput;
}
public void setHdfsTsFileInput(String hdfsTsFileInput) {
this.hdfsTsFileInput = hdfsTsFileInput;
}
public String getHdfsTsFileOutput() {
return hdfsTsFileOutput;
}
public void setHdfsTsFileOutput(String hdfsTsFileOutput) {
this.hdfsTsFileOutput = hdfsTsFileOutput;
}
public String getObjectStorageFile() {
return objectStorageFile;
}
public void setObjectStorageFile(String objectStorageFile) {
this.objectStorageFile = objectStorageFile;
}
public String getObjectStorageTsFileInput() {
return objectStorageTsFileInput;
}
public void setObjectStorageTsFileInput(String objectStorageTsFileInput) {
this.objectStorageTsFileInput = objectStorageTsFileInput;
}
public String getObjectStorageTsFileOutput() {
return objectStorageTsFileOutput;
}
public void setObjectStorageTsFileOutput(String objectStorageTsFileOutput) {
this.objectStorageTsFileOutput = objectStorageTsFileOutput;
}
}