更新时间:2024-07-24 GMT+08:00

CarbonData常见配置参数

本章节介绍CarbonData所有常用参数配置的详细信息。

carbon.properties相关参数

根据用户实际使用场景在服务端或者客户端配置CarbonData相关参数。

  • 服务端:登录FusionInsight Manager页面,选择“集群 > 服务 > Spark > 配置 > 全部配置 > JDBCServer(角色) > 自定义”,在参数“spark.carbon.customized.configs”中添加CarbonData相关参数配置。
  • 客户端:登录客户端节点,在“{客户端安装目录}/Spark/spark/conf/carbon.properties”文件中配置相关参数。
表1 carbon.properties中的系统配置

参数

默认值

描述

carbon.ddl.base.hdfs.url

hdfs://hacluster/opt/data

此属性用于从HDFS基本路径配置HDFS相对路径,在“fs.defaultFS”中进行配置。在“carbon.ddl.base.hdfs.url”中配置的路径将被追加到在“fs.defaultFS”中配置的HDFS路径中。如果配置了这个路径,则用户不需要通过完整路径加载数据。

例如:如果CSV文件的绝对路径是“hdfs://10.18.101.155:54310/data/cnbc/2016/xyz.csv”,其中,路径“hdfs://10.18.101.155:54310”来源于属性“fs.defaultFS”并且用户可以把“/data/cnbc/”作为“carbon.ddl.base.hdfs.url”配置。

当前,在数据加载时,用户可以指定CSV文件为“/2016/xyz.csv”

carbon.badRecords.location

-

指定Bad records的存储路径。此路径为HDFS路径。默认值为Null。如果启用了bad records日志记录或者bad records操作重定向,则该路径必须由用户进行配置。

carbon.bad.records.action

fail

以下是bad records的四种行为类型:

FORCE:通过将bad records存储为NULL来自动更正数据。

REDIRECT:Bad records被写入carbon.badRecords.location配置路径下的CSV文件而不是被加载。

IGNORE:Bad records既不被加载也不被写入CSV文件。

FAIL:如果找到任何bad records,则数据加载失败。

carbon.update.sync.folder

/tmp/carbondata

modifiedTime.mdt文件路径,可以设置为已有路径或新路径。

说明:

如果设置为已有路径,需确保所有用户都可以访问该路径,且该路径具有777权限。

carbon.enable.badrecord.action.redirect

false

是否在数据加载中开启redirect方式来处理bad records。启用该配置后,源文件中的bad records会被记录在指定存储位置生成的CSV文件中。在Windows操作系统中打开此类CSV文件时,可能会发生CSV注入。

carbon.enable.partitiondata.trash

false

启动该配置后,ALTER DROP PARTITION操作时会将删除的分区数据移动到Carbon回收站中。

说明:

MRS 3.2.0及之后版本支持才支持该功能。

carbon.enable.show.mv.for.showtables

false

在设置为true时,会在执行show tables命令时过滤materialized views。在表多的情况下,开启该参数会导致show tables命令执行时间很长,请谨慎开启。

说明:

MRS 3.2.0及之后版本支持才支持该功能。

carbon.enable.droptable.remove.staleentry

true

在设置为true时,会在执行drop table命令时去cache中删除该表的废弃记录。在database数量较多时,开启该参数会导致drop table命令执行时间很长。

说明:

MRS 3.2.0及之后版本支持才支持该功能。

carbon.enable.multi.version.table.status

false

是否开启tablestatus文件多版本管理,开启该参数后,每次load/insert/IUD都会产生一个tablestatus文件。

说明:

如果同时使用JDBCServer和客户端对表进行数据加载,那在使用该特性时,需要保证同时开启或同时关闭。

carbon.tablestatus.multi.version.file.coun

3

仅在开启tablestatus文件多版本管理后生效,默认保留最近的tablestatus文件数,超出该参数限制的tablestatus文件会被删除。

表2 carbon.properties中的性能配置

参数

默认值

描述

数据加载配置

carbon.sort.file.write.buffer.size

16384

为了限制内存的使用,CarbonData会将数据排序并写入临时文件中。该参数控制读取和写入临时文件过程使用的缓存大小。单位:字节。

取值范围为:10240~10485760。

carbon.graph.rowset.size

100000

数据加载图步骤之间交换的行集大小。

最小值=500,最大值=1000000

carbon.number.of.cores.while.loading

6

数据加载时所使用的核数。配置的核数越大压缩性能越好。如果CPU资源充足可以增加此值。

carbon.sort.size

500000

内存排序的数据大小。

carbon.enableXXHash

true

用于hashkey计算的hashmap算法。

carbon.number.of.cores.block.sort

7

数据加载时块排序所使用的核数。

carbon.max.driver.lru.cache.size

-1

在driver端加载数据所达到的最大LRU缓存大小。以MB为单位,默认值为-1,表示缓存没有内存限制。只允许使用大于0的整数值。

carbon.max.executor.lru.cache.size

-1

在executor端加载数据所达到的最大LRU缓存大小。以MB为单位,默认值为-1,表示缓存没有内存限制。只允许使用大于0的整数值。如果未配置该参数,则将考虑参数“carbon.max.driver.lru.cache.size”的值。

carbon.merge.sort.prefetch

true

在数据加载过程中,从排序的临时文件中读取数据进行合并排序时,启用数据预取。

carbon.update.persist.enable

true

启用此参数将考虑持久化数据,减少UPDATE操作的执行时间。

enable.unsafe.sort

true

指定在数据加载期间是否使用非安全排序。非安全的排序减少了数据加载操作期间的垃圾回收(GC),从而提高了性能。默认值为“true”,表示启用非安全排序功能。

enable.offheap.sort

true

在数据加载期间启用堆排序。

offheap.sort.chunk.size.inmb

64

指定需要用于排序的数据块的大小。最小值为1MB,最大值为1024MB。

carbon.unsafe.working.memory.in.mb

512

指定非安全工作内存的大小。这将用于排序数据,存储列页面等。单位是MB。

数据加载所需内存:

(“carbon.number.of.cores.while.loading”的值[默认值 = 6]) x 并行加载数据的表格 x (“offheap.sort.chunk.size.inmb”的值[默认值 = 64 MB] + “carbon.blockletgroup.size.in.mb”的值[默认值 = 64 MB] + 当前的压缩率[64 MB/3.5])

= ~900 MB 每表格

数据查询所需内存:

(SPARK_EXECUTOR_INSTANCES. [默认值 = 2]) x ( carbon.blockletgroup.size.in.mb [默认值 = 64 MB] +“carbon.blockletgroup.size.in.mb”解压内容[默认值 = 64 MB * 3.5]) x (每个执行器核数[默认值 = 1])

= ~ 600 MB

carbon.sort.inmemory.storage.size.in.mb

512

指定要存储在内存中的中间排序数据的大小。达到该指定的值,系统会将数据写入磁盘。单位是MB。

sort.inmemory.size.inmb

1024

指定要保存在内存中的中间排序数据的大小。达到该指定值后,系统会将数据写入磁盘。单位:MB。

如果配置了“carbon.unsafe.working.memory.in.mb”“carbon.sort.inmemory.storage.size.in.mb”,则不需要配置该参数。如果此时也配置了该参数,那么这个内存的20%将用于工作内存“carbon.unsafe.working.memory.in.mb”,80%将用于排序存储内存“carbon.sort.inmemory.storage.size.in.mb”

说明:

Spark配置参数“spark.yarn.executor.memoryOverhead”的值应该大于CarbonData配置参数“sort.inmemory.size.inmb”的值,否则如果堆外(off heap)访问超出配置的executor内存,则YARN可能会停止executor。

carbon.blockletgroup.size.in.mb

64

数据作为blocklet group被系统读入。该参数指定blocklet group的大小。较高的值会有更好的顺序IO访问性能。

最小值为16MB,任何小于16MB的值都将重置为默认值(64MB)。

单位:MB。

enable.inmemory.merge.sort

false

指定是否启用内存合并排序(inmemorymerge sort)。

use.offheap.in.query.processing

true

指定是否在查询处理中启用offheap。

carbon.load.sort.scope

local_sort

指定加载操作的排序范围。支持两种类型的排序,batch_sort和local_sort。选择batch_sort将提升加载性能,但会降低查询性能。

说明:

local_sort与分区表的DDL操作存在冲突,不能同时使用,且对分区表性能提升不明显,不建议在分区表上启用该特性。

carbon.batch.sort.size.inmb

-

指定在数据加载期间为批处理排序而考虑的数据大小。推荐值为小于总排序数据的45%。该值以MB为单位。

说明:

如果没有设置参数值,那么默认情况下其大约等于“sort.inmemory.size.inmb”参数值的45%。

enable.unsafe.columnpage

true

指定在数据加载或查询期间,是否将页面数据保留在堆内存中,以避免垃圾回收受阻。

carbon.use.local.dir

false

是否使用YARN本地目录加载多个磁盘的数据。设置为true,则使用YARN本地目录加载多个磁盘的数据,以提高数据加载性能。

carbon.use.multiple.temp.dir

false

是否使用多个临时目录存储临时文件以提高数据加载性能。

carbon.load.datamaps.parallel.db_name.table_name

NA

值为true或者false。可以设置数据库名和表名,使得该表的首次查询性能得到提升。

压缩配置

carbon.number.of.cores.while.compacting

2

在压缩过程中用于写入数据所使用的核数。配置的核数越大压缩性能越好。如果CPU资源充足可以增加此值。

carbon.compaction.level.threshold

4,3

该属性用于Minor压缩,决定合并segment的数量。

例如:如果被设置为“2,3”,则将每2个segment触发一次Minor压缩。“3”是Level 1压缩的segment个数,这些segment将进一步被压缩为新的segment。

有效值为0-100。

carbon.major.compaction.size

1024

使用该参数配置Major压缩的大小。总数低于该阈值的segment将被合并。

单位为MB。

carbon.horizontal.compaction.enable

true

该参数用于配置打开/关闭水平压缩。在每个DELETE和UPDATE语句之后,如果增量(DELETE / UPDATE)文件超过指定的阈值,则可能发生水平压缩。默认情况下,该参数值设置为“true”,打开水平压缩功能,可将参数值设置为“false”来关闭水平压缩功能。

carbon.horizontal.update.compaction.threshold

1

该参数指定segment内的UPDATE增量文件数的阈值限制。在增量文件数量超过阈值的情况下,segment内的UPDATE增量文件变得适合水平压缩,并压缩为单个UPDATE增量文件。默认情况下,该参数值设置为1。可以设置为1到10000之间的值。

carbon.horizontal.delete.compaction.threshold

1

该参数指定segment的block中的DELETE增量文件数量的阈值限制。在增量文件数量超过阈值的情况下,segment特定block的DELETE增量文件变得适合水平压缩,并压缩为单个DELETE增量文件。 默认情况下,该参数值设置为1。可以设置为1到10000之间的值。

查询配置

carbon.number.of.cores

4

查询时所使用的核数。

carbon.limit.block.distribution.enable

false

当查询语句中包含关键字limit时,启用或禁用CarbonData块分布。默认值为“false”,将对包含关键字limit的查询语句禁用块分布。此参数调优请参考CarbonData性能调优常见配置参数

carbon.custom.block.distribution

false

指定是使用Spark还是CarbonData的块分配功能。默认情况下,其配置值为“false”,表明启用Spark块分配。如果要使用CarbonData块分配,请将配置值更改为“true”

carbon.infilter.subquery.pushdown.enable

false

如果启用此参数,并且用户在具有subquery的过滤器中触发Select查询,则执行子查询,并将输出作为IN过滤器广播到左表,否则将执行SortMergeSemiJoin。建议在IN过滤器子查询未返回太多记录时启用此参数。例如,IN子句子查询返回10k或更少的记录时,启用此参数将更快地给出查询结果。

示例:select * from flow_carbon_256b where cus_no in (select cus_no from flow_carbon_256b where dt>='20260101' and dt<='20260701' and txn_bk='tk_1' and txn_br='tr_1') limit 1000;

carbon.scheduler.minRegisteredResourcesRatio

0.8

启动块分布所需的最小资源(executor)比率。默认值为“0.8”,表示所请求资源的80%被分配用于启动块分布。

carbon.dynamicAllocation.schedulerTimeout

5

此参数值指示调度器等待executors处于活动状态的最长时间。默认值为“5”秒,允许的最大值为“15”秒。

enable.unsafe.in.query.processing

true

指定在查询操作期间是否使用非安全排序。非安全排序减少查询操作期间的垃圾回收(GC),从而提高性能。默认值为“true”,表示启用非安全排序功能。

carbon.enable.vector.reader

true

为结果收集(result collection)启用向量处理,以增强查询性能。

carbon.query.show.datamaps

true

SHOW TABLES会展示所有的表包含主表和datamap。如果需要过滤掉datamap,将该配置设置为false。

二级索引配置

carbon.secondary.index.creation.threads

1

该参数用于配置启动二级索引创建期间并行处理segments的线程数。当表的segments数较多时,该参数有助于微调系统生成二级索引的速度。该参数值范围为1到50。

carbon.si.lookup.partialstring

true

  • 当配置为true时,它包括开始,结尾和包含。
  • 当配置为false时,它只包括从二级索引开始。

carbon.si.segment.merge

true

开启这个配置后会合并二级索引表segment内的.carbondata文件。合并发生在导入操作后,在二级索引表导入操作的最后,会检查小文件并合。

说明:

Table Block Size会用作合并小文件的大小阈值。

表3 carbon.properties中的其他配置

参数

默认值

描述

数据加载配置

carbon.lock.type

HDFSLOCK

该配置指定了表上并发操作过程中所要求的锁的类型。

有以下几种类型锁实现方式:

  • LOCALLOCK:基于本地文件系统的文件来创建的锁。该锁只适用于一台机器上只运行一个Spark Driver(或者JDBCServer)的情况。
  • HDFSLOCK:基于HDFS文件系统上的文件来创建的锁。该锁适用于集群上有多个运行的Spark应用而且没有可用的ZooKeeper的情况。

carbon.sort.intermediate.files.limit

20

中间文件的最小数量。生成中间文件后开始排序合并。此参数调优请参考CarbonData性能调优常见配置参数

carbon.csv.read.buffersize.byte

1048576

CSV读缓冲区大小。

carbon.merge.sort.reader.thread

3

用于读取中间文件进行最终合并的最大线程数。

carbon.concurrent.lock.retries

100

指定获取并发操作锁的最大重试次数。该参数用于并发加载。

carbon.concurrent.lock.retry.timeout.sec

1

指定获取并发操作的锁重试之间的间隔。

carbon.lock.retries

3

指定除导入操作外其他所有操作尝试获取锁的次数。

carbon.lock.retry.timeout.sec

5

指定除导入操作外其他所有操作尝试获取锁的时间间隔。

carbon.tempstore.location

/opt/Carbon/TempStoreLoc

临时存储位置。默认情况下,采用“System.getProperty("java.io.tmpdir")”方法获取。此参数调优请参考CarbonData性能调优常见配置参数中关于“carbon.use.local.dir”的描述。

carbon.load.log.counter

500000

数据加载记录计数日志。

SERIALIZATION_NULL_FORMAT

\N

指定需要替换为NULL的值。

carbon.skip.empty.line

false

设置此属性将在数据加载期间忽略CSV文件中的空行。

carbon.load.datamaps.parallel

false

该配置项将会开启对所有会话所有表的datamap并行加载。该配置项通过将导入datamap到内存的工作分发给所有的executor来缩短时间,进而提升查询性能。

合并配置

carbon.numberof.preserve.segments

0

如果用户希望从被合并的segment中保留一定数量的segment,可设置该属性参数。

例如:“carbon.numberof.preserve.segments”=“2”,那么合并的segement中将不包含最新的2个segment。

默认保留No segment的状态。

carbon.allowed.compaction.days

0

合并将合并在配置的指定天数中加载的segment。

例如:如果配置值为“2”,那么只有在2天时间框架中加载的segment被合并。2天以外被加载的segment不会被合并。

该参数默认为禁用。

carbon.enable.auto.load.merge

false

在数据加载时启用压缩。

carbon.merge.index.in.segment

true

如果设置,则Segment内的所有Carbon索引文件(.carbonindex)将合并为单个Carbon索引合并文件(.carbonindexmerge)。 这增强了首次查询性能

carbon.enable.compact.autoclean

false

在设置为true时,会在执行compact成功后调用clean files命令来清理废弃文件。

说明:

MRS 3.2.0及之后版本支持才支持该功能。

查询配置

max.query.execution.time

60

单次查询允许的最大时间。

单位为分钟。

carbon.enableMinMax

true

MinMax用于提高查询性能。设置为false可禁用该功能。

carbon.lease.recovery.retry.count

5

需要为恢复文件租约所需的最大尝试次数。

最小值:1

最大值:50

carbon.lease.recovery.retry.interval

1000 (ms)

尝试在文件上进行租约恢复之后的间隔(Interval)或暂停(Pause)时间。

最小值:1000(ms)

最大值:10000(ms)

spark-defaults.conf相关参数

  • 登录客户端节点,在“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”文件中配置表4相关参数。
    表4 spark-defaults.conf中的Spark配置参考

    参数

    默认值

    描述

    spark.driver.memory

    4G

    指定用于driver端进程的内存,其中SparkContext已初始化。

    说明:

    在客户端模式下,不要使用SparkConf在应用程序中设置该参数,因为驱动程序JVM已经启动。要配置该参数,请在--driver-memory命令行选项或默认属性文件中进行配置。

    spark.executor.memory

    4GB

    指定每个执行程序进程使用的内存。

    spark.sql.crossJoin.enabled

    true

    如果查询包含交叉连接,请启用此属性,以便不会发生错误,此时使用交叉连接而不是连接,可实现更好的性能。

  • 在Spark Driver端的“spark-defaults.conf”文件中配置以下参数。
    • 在spark-sql模式下配置:登录Spark客户端节点,在“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”文件中配置表5相关参数。
      表5 spark-sql模式下的配置参数

      参数

      配置值

      描述

      spark.driver.extraJavaOptions

      -Dlog4j.configuration=file:/opt/client/Spark/spark/conf/log4j.properties -Djetty.version=x.y.z -Dzookeeper.server.principal=zookeeper/hadoop.<系统域名> -Djava.security.krb5.conf=/opt/client/KrbClient/kerberos/var/krb5kdc/krb5.conf -Djava.security.auth.login.config=/opt/client/Spark/spark/conf/jaas.conf -Dorg.xerial.snappy.tempdir=/opt/client/Spark/tmp -Dcarbon.properties.filepath=/opt/client/Spark/spark/conf/carbon.properties -Djava.io.tmpdir=/opt/client/Spark/tmp

      默认值中“/opt/client/Spark/spark”为客户端的CLIENT_HOME,且该默认值是追加到参数“spark.driver.extraJavaOptions”其他值之后的,此参数用于指定Driver端的“carbon.properties”文件路径。

      说明:

      请注意“=”两边不要有空格。

      spark.sql.session.state.builder

      org.apache.spark.sql.hive.FIHiveACLSessionStateBuilder

      指定会话状态构造器。

      spark.carbon.sqlastbuilder.classname

      org.apache.spark.sql.hive.CarbonInternalSqlAstBuilder

      指定AST构造器。

      spark.sql.catalog.class

      org.apache.spark.sql.hive.HiveACLExternalCatalog

      指定Hive的外部目录实现。启用Spark ACL时必须提供。

      spark.sql.hive.implementation

      org.apache.spark.sql.hive.HiveACLClientImpl

      指定Hive客户端调用的实现。启用Spark ACL时必须提供。

      spark.sql.hiveClient.isolation.enabled

      false

      启用Spark ACL时必须提供。

    • 在JDBCServer服务中配置:登录JDBCServer安装节点,在“{BIGDATA_HOME}/FusionInsight_Spark_*/*_JDBCServer/etc/spark-defaults.conf”文件中配置表6相关参数。
      表6 JDBCServer服务中的配置参数

      参数

      配置值

      描述

      spark.driver.extraJavaOptions

      -Xloggc:${SPARK_LOG_DIR}/indexserver-omm-%p-gc.log -XX:+PrintGCDetails -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:MaxDirectMemorySize=512M -XX:MaxMetaspaceSize=512M -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=20 -XX:GCLogFileSize=10M -XX:OnOutOfMemoryError='kill -9 %p' -Djetty.version=x.y.z -Dorg.xerial.snappy.tempdir=${BIGDATA_HOME}/tmp/spark/JDBCServer/snappy_tmp -Djava.io.tmpdir=${BIGDATA_HOME}/tmp/spark/JDBCServer/io_tmp -Dcarbon.properties.filepath=${SPARK_CONF_DIR}/carbon.properties -Djdk.tls.ephemeralDHKeySize=2048 -Dspark.ssl.keyStore=${SPARK_CONF_DIR}/child.keystore #{java_stack_prefer}

      默认值中${SPARK_CONF_DIR}需视具体的集群而定,且该默认值是追加到参数“spark.driver.extraJavaOptions”其他值之后的,此参数用于指定Driver端的“carbon.properties”文件路径。

      说明:

      请注意“=”两边不要有空格。

      spark.sql.session.state.builder

      org.apache.spark.sql.hive.FIHiveACLSessionStateBuilder

      指定会话状态构造器。

      spark.carbon.sqlastbuilder.classname

      org.apache.spark.sql.hive.CarbonInternalSqlAstBuilder

      指定AST构造器。

      spark.sql.catalog.class

      org.apache.spark.sql.hive.HiveACLExternalCatalog

      指定Hive的外部目录实现。启用Spark ACL时必须提供。

      spark.sql.hive.implementation

      org.apache.spark.sql.hive.HiveACLClientImpl

      指定Hive客户端调用的实现。启用Spark ACL时必须提供。

      spark.sql.hiveClient.isolation.enabled

      false

      启用Spark ACL时必须提供。