CarbonData常见配置参数
本章节介绍CarbonData所有常用参数配置的详细信息。
carbon.properties相关参数
根据用户实际使用场景在服务端或者客户端配置CarbonData相关参数。
- 服务端:登录FusionInsight Manager页面,选择“集群 > 服务 > Spark > 配置 > 全部配置 > JDBCServer(角色) > 自定义”,在参数“spark.carbon.customized.configs”中添加CarbonData相关参数配置。
- 客户端:登录客户端节点,在“{客户端安装目录}/Spark/spark/conf/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文件会被删除。 |
参数 |
默认值 |
描述 |
---|---|---|
数据加载配置 |
||
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 |
|
carbon.si.segment.merge |
true |
开启这个配置后会合并二级索引表segment内的.carbondata文件。合并发生在导入操作后,在二级索引表导入操作的最后,会检查小文件并合。
说明:
Table Block Size会用作合并小文件的大小阈值。 |
参数 |
默认值 |
描述 |
---|---|---|
数据加载配置 |
||
carbon.lock.type |
HDFSLOCK |
该配置指定了表上并发操作过程中所要求的锁的类型。 有以下几种类型锁实现方式:
|
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时必须提供。
- 在spark-sql模式下配置:登录Spark客户端节点,在“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”文件中配置表5相关参数。