华为云用户手册

  • 参考实例 Flume配置参考示例(SpoolDir--Mem--Hive): server.sources = spool_sourceserver.channels = mem_channelserver.sinks = Hive_Sink#config the sourceserver.sources.spool_source.type = spooldirserver.sources.spool_source.spoolDir = /tmp/testflumeserver.sources.spool_source.montime =server.sources.spool_source.fileSuffix =.COMPLETEDserver.sources.spool_source.deletePolicy = neverserver.sources.spool_source.trackerDir =.flumespoolserver.sources.spool_source.ignorePattern = ^$server.sources.spool_source.batchSize = 20server.sources.spool_source.inputCharset =UTF-8server.sources.spool_source.selector.type = replicatingserver.sources.spool_source.fileHeader = falseserver.sources.spool_source.fileHeaderKey = fileserver.sources.spool_source.basenameHeaderKey= basenameserver.sources.spool_source.deserializer = LINEserver.sources.spool_source.deserializer.maxBatchLine= 1server.sources.spool_source.deserializer.maxLineLength= 2048server.sources.spool_source.channels = mem_channel#config the channelserver.channels.mem_channel.type = memoryserver.channels.mem_channel.capacity =10000server.channels.mem_channel.transactionCapacity= 2000server.channels.mem_channel.channelfullcount= 10server.channels.mem_channel.keep-alive = 3server.channels.mem_channel.byteCapacity =server.channels.mem_channel.byteCapacityBufferPercentage= 20#config the sinkserver.sinks.Hive_Sink.type = hiveserver.sinks.Hive_Sink.channel = mem_channelserver.sinks.Hive_Sink.hive.metastore = thrift://${任意metastore业务IP}:21088server.sinks.Hive_Sink.hive.hiveSite = /opt/hivesink-conf/hive-site.xmlserver.sinks.Hive_Sink.hive.coreSite = /opt/hivesink-conf/core-site.xmlserver.sinks.Hive_Sink.hive.metastoreSite = /opt/hivesink-conf/hivemeatastore-site.xmlserver.sinks.Hive_Sink.hive.database = defaultserver.sinks.Hive_Sink.hive.table = flume_multi_type_partserver.sinks.Hive_Sink.hive.partition = Tag,%Y-%m,%dserver.sinks.Hive_Sink.hive.txnsPerBatchAsk= 100server.sinks.Hive_Sink.hive.autoCreatePartitions= trueserver.sinks.Hive_Sink.useLocalTimeStamp = trueserver.sinks.Hive_Sink.batchSize = 1000server.sinks.Hive_Sink.hive.kerberosPrincipal= super1server.sinks.Hive_Sink.hive.kerberosKeytab= /opt/mykeytab/user.keytabserver.sinks.Hive_Sink.round = trueserver.sinks.Hive_Sink.roundValue = 10server.sinks.Hive_Sink.roundUnit = minuteserver.sinks.Hive_Sink.serializer = DELIMITEDserver.sinks.Hive_Sink.serializer.delimiter= ";"server.sinks.Hive_Sink.serializer.serdeSeparator= ';'server.sinks.Hive_Sink.serializer.fieldnames= id,msg
  • 操作场景 该任务指导用户使用Flume服务端从Kafka的Topic列表(test1)采集日志保存到HDFS上“/flume/test”目录下。 本章节适用于MRS 3.x及之后版本。 本配置默认集群网络环境是安全的,数据传输过程不需要启用SSL认证。如需使用加密方式,请参考配置加密传输。该配置为只用一个Flume场景,例如:Kafka Source+Memory Channel+HDFS Sink.
  • 日志级别 Storm提供了如表2所示的日志级别。 运行日志和审计日志的级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG,程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 ERROR ERROR表示系统运行的错误信息。 WARN WARN表示当前事件处理存在异常信息。 INFO INFO表示记录系统及各事件正常运行状态信息。 DEBUG DEBUG表示记录系统及系统的调试信息。 如果您需要修改日志级别,请执行如下操作: 请参考修改集群服务配置参数,进入Storm的“全部配置”页面。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 保存配置,在弹出窗口中单击“确定”使配置生效。
  • JVM调优 当应用程序需要处理大量数据从而占用更多的内存时,存在worker内存大于2GB的情况,推荐使用G1垃圾回收算法。 表2 调优参数 配置参数 缺省值 调优场景 WORKER_GC_OPTS -Xms1G -Xmx1G -XX:+UseG1GC -XX:+PrintGCDetails -Xloggc:artifacts/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump 应用程序内存中需要保存大量数据,worker进程使用的内存大于2G,那么建议使用G1垃圾回收算法,可修改参数值为“-Xms2G -Xmx5G -XX:+UseG1GC”。
  • 日志级别 HBase中提供了如表2所示的日志级别。日志级别优先级从高到低分别是FATAL、ERROR、WARN、INFO、DEBUG。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 FATAL FATAL表示当前事件处理出现严重错误信息,可能导致系统崩溃。 ERROR ERROR表示当前事件处理出现错误信息,系统运行出错。 WARN WARN表示当前事件处理存在异常信息,但认为是正常范围,不会导致系统出错。 INFO INFO表示记录系统及各事件正常运行状态信息 DEBUG DEBUG表示记录系统及系统的调试信息。 如果您需要修改日志级别,请执行如下操作: 进入HBase服务参数“全部配置”界面,具体操作请参考修改集群服务配置参数。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 保存配置,在弹出窗口中单击“确定”使配置生效。 配置完成后立即生效,不需要重启服务。
  • 拓扑调优 当需要提升Storm数据量处理性能时,可以通过拓扑调优的操作提高效率。建议在可靠性要求不高的场景下进行优化。 表1 调优参数 配置参数 默认值 调优场景 topology.acker.executors null Acker的执行器数量。当业务应用对可靠性要求较低,允许不处理部分数据,可设置参数值为“null”或“0”,以关闭Acker的执行器,减少流控制,不统计消息时延,提高性能。 topology.max.spout.pending null Spout消息缓存数,仅在Acker不为0或者不为null的情况下生效。Spout将发送到下游Bolt的每条消息加入到pending队列,待下游Bolt处理完成并确认后,再从pending队列移除,当pending队列占满时Spout暂停消息发送。增加pending值可提高Spout的每秒消息吞吐量,提高性能,但延时同步增加。 topology.transfer.buffer.size 32 每个worker进程Distuptor消息队列大小,建议在4到32之间,增大消息队列可以提升吞吐量,但延时可能会增加。 RES_CPUSET_PERCENTAGE 80 设置各个节点上的Supervisor角色实例(包含其启动并管理的Worker进程)所使用的物理CPU百分比。根据Supervisor所在节点业务量需求,适当调整参数值,优化CPU使用率。
  • 日志级别 Kafka提供了如表3所示的日志级别。 运行日志的级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG,程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表3 日志级别 级别 描述 ERROR ERROR表示系统运行的错误信息。 WARN WARN表示当前事件处理存在异常信息。 INFO INFO表示记录系统及各事件正常运行状态信息。 DEBUG DEBUG表示记录系统及系统的调试信息。 如果您需要修改日志级别,请执行如下操作: 请参考修改集群服务配置参数,进入Kafka的“全部配置”页面。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 保存配置,在弹出窗口中单击“确定”使配置生效。
  • 操作场景 本章节内容适用于MRS 3.x及后续版本。 使用Storm业务用户提交一个拓扑以后,该任务需要使用提交拓扑的用户身份持续运行。在拓扑运行的过程中,worker进程可能需要正常重启以保持拓扑工作。若业务用户的密码被修改,或密码使用天数超过了默认密码策略指定的最大有效期,则会影响拓扑正常运行。MRS集群管理员需要根据企业安全要求,为Storm业务用户配置独立的密码策略。 如果不为Storm业务用户配置独立的密码策略,在修改业务用户密码以后,可以删除旧的拓扑并重新提交,使拓扑继续运行。
  • 参数说明 表1 参数说明 配置参数 说明 默认值 supervisor.slots.ports supervisor上能够运行workers的端口列表。每个worker占用一个端口,且每个端口只运行一个worker。通过这项配置可以设置每台机器上运行的worker数量。端口的取值范围是1024到65535,不同端口使用逗号分隔。 6700,6701,6702,6703 WORKER_GC_OPTS supervisor启动worker时使用的jvm选项。需要根据业务中对内存等的使用来进行设置,例如是简单业务处理,建议1G,既“-Xmx1G”;如果有窗口缓存,根据窗口大小计算:每条记录大小*周期*2。 -Xms1G -Xmx1G -XX:+UseG1GC -XX:+PrintGCDetails -Xloggc:artifacts/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump default.schedule.mode 默认调度器的调度模式。目前支持两个值,具体值与含义如下: “AVERAGE”:使用按空闲Slot数目为优先级的调度机制 “RATE”:使用按空闲Slot比率为优先级的调度机制 AVERAGE nimbus.thrift.threads 设置主用Nimbus对外提供服务时的最大连接线程数。当Storm集群规模较大,Supervisor实例数量较多时,需要增加线程数。 512
  • 参数调优 修改服务配置参数,请参考修改集群服务配置参数。调优参数请参考表1。 表1 调优参数 配置参数 缺省值 调优场景 num.recovery.threads.per.data.dir 10 在Kafka启动过程中,数据量较大情况下,可调大此参数,可以提升启动速度。 background.threads 10 Broker后台任务处理的线程数目。数据量较大的情况下,可适当调大此参数,以提升Broker处理能力。 num.replica.fetchers 1 副本向Leader请求同步数据的线程数,增大这个数值会增加副本的I/O并发度。 num.io.threads 8 Broker用来处理磁盘I/O的线程数目,这个线程数目建议至少等于硬盘的个数。 KAFKA_HEAP_OPTS -Xmx6G -Xms6G Kafka JVM堆内存设置。当Broker上数据量较大时,应适当调整堆内存大小。
  • 概述 本章节内容适用于MRS 3.x及后续版本。 Flink从0.10.0版本开始提供了一套API可以将使用Storm API编写的业务平滑迁移到Flink平台上,只需要极少的改动即可完成。通过这项转换可以覆盖大部分的业务场景。 Flink支持两种方式的业务迁移: 完整迁移Storm业务:转换并运行完整的由Storm API开发的Storm拓扑。 嵌入式迁移Storm业务:在Flink的DataStream中嵌入Storm的代码,如使用Storm API编写的Spout/Bolt。 Flink提供了flink-storm包用来完成上述转换。 父主题: 迁移Storm业务至Flink
  • 操作步骤 根据业务情况,准备好客户端,登录安装客户端的节点。 请根据客户端所在位置,参考安装客户端章节,登录安装客户端的节点。 执行以下命令,切换到客户端目录,例如“/opt/hadoopclient”。 cd /opt/hadoopclient 执行以下命令,配置环境变量。 source bigdata_env 启用Kerberos认证的集群,执行以下命令认证用户身份。未启用Kerberos认证的集群无需执行。 kinit Storm用户 执行以下命令,提交Storm拓扑: storm jar 拓扑包路径 拓扑Main方法的类名称 拓扑名称 界面提示以下信息表示提交成功: Finished submitting topology: topo1 执行以下命令,查看Storm中的拓扑。启用Kerberos认证的集群,只有属于“stormadmin”或“storm”的用户可以查看所有拓扑。 storm list 执行以下命令,删除Storm中的拓扑。 storm kill 拓扑名称
  • 针对不同的Topic访问场景,Kafka中API使用说明 场景一:访问设置了ACL的Topic 使用的API 用户属组 客户端参数 服务端参数 访问的端口 API 用户需满足以下条件之一即可: 加入System_administrator角色 属于kafkaadmin组 属于kafkasuperuser组 被授权的kafka组的用户 security.inter.broker.protocol=SASL_PLAINTEXT sasl.kerberos.service.name = kafka - sasl.port(默认21007) security.protocol=SASL_SSL sasl.kerberos.service.name = kafka “ssl.mode.enable”配置为true sasl-ssl.port(默认21009) 场景二:访问未设置ACL的Topic 使用的API 用户属组 客户端参数 服务端参数 访问的端口 API 用户需满足以下条件之一: 加入System_administrator角色 属于kafkaadmin组 属于kafkasuperuser组 security.protocol=SASL_PLAINTEXT sasl.kerberos.service.name = kafka - sasl.port(默认21007) 用户属于kafka组 “allow.everyone.if.no.acl.found”配置为true 说明: 普通集群下不涉及服务端参数“allow.everyone.if.no.acl.found”的修改 sasl.port(默认21007) 用户需满足以下条件之一: 加入System_administrator角色 属于kafkaadmin组 kafkasuperuser组用户 security.protocol=SASL_SSL sasl.kerberos.service.name = kafka “ssl.mode.enable”配置为“true” sasl-ssl.port(默认21009) 用户属于kafka组 “allow.everyone.if.no.acl.found”配置为“true” “ssl.mode.enable”配置为“true” sasl-ssl.port(默认21009) - security.protocol=PLAINTEXT “allow.everyone.if.no.acl.found”配置为“true” port(默认9092) - security.protocol=SSL “allow.everyone.if.no.acl.found”配置为“true” “ssl.mode.enable”配置为“true” ssl.port(默认9063)
  • Kafka API简单说明 Producer API 指org.apache.kafka.clients.producer.KafkaProducer中定义的接口,在使用“kafka-console-producer.sh”时,默认使用此API。 Consumer API 指org.apache.kafka.clients.consumer.KafkaConsumer中定义的接口,在使用“kafka-console-consumer.sh”时,默认会调用此API。 MRS 3.x后,Kafka不支持旧Producer API和旧Consumer API。
  • Kafka访问协议说明 请参考修改集群服务配置参数查看或配置参数。 Kafka当前支持四种协议类型的访问:PLAINTEXT、SSL、SASL_PLAINTEXT、SASL_SSL。 Kafka服务启动时,默认会启动PLAINTEXT和SASL_PLAINTEXT两种协议类型的访问监听。可通过设置Kafka服务配置“ssl.mode.enable”为“true”,来启动SSL和SASL_SSL两种协议类型的访问监听。下表是四种协议类型的简单说明: 协议类型 说明 默认端口 PLAINTEXT 支持无认证的明文访问 获取参数“port”的值,默认为9092 SASL_PLAINTEXT 支持Kerberos认证的明文访问 获取参数“sasl.port”的值,默认为21007 SSL 支持无认证的SSL加密访问 获取参数“ssl.port”的值,默认为9093 SASL_SSL 支持Kerberos认证的SSL加密访问 获取参数“sasl-ssl.port”的值,默认为21009
  • 操作场景 本章节内容适用于MRS 3.x及后续版本。 增加Broker的存储目录时,MRS集群管理员需要在FusionInsight Manager中修改Broker的存储目录,以保证Kafka正常工作,新创建的主题分区将在分区最少的目录中生成。适用于以下场景: 由于Kafka不感知磁盘容量,建议各Broker实例配置的磁盘个数和容量保持一致。 更改Broker角色的存储目录,所有Broker实例的存储目录将同步修改。 更改Broker单个实例的存储目录,只对单个实例生效,其他节点Broker实例存储目录不变。
  • 对系统的影响 配置高可用、高性能的影响: 配置高可用、高性能模式后,数据可靠性会降低。在磁盘故障、节点故障等场景下存在数据丢失风险。 配置高可靠性的影响: 性能降低: 在生产数据时,配置了高可靠参数ack=-1之后,需要多个副本均写入成功之后才认为是写入成功。这样会导致单条消息时延增加,客户端处理能力下降。具体性能以现场实际测试数据为准。 可用性降低: 不允许不在ISR中的副本被选举为Leader。如果Leader下线时,其他副本均不在ISR列表中,那么该分区将保持不可用,直到Leader节点恢复。当分区的一个副本所在节点故障时,无法满足最小写入成功的副本数,那么将会导致业务写入失败。 参数配置项为服务级配置需要重启Kafka,建议在变更窗口做服务级配置修改。
  • 配置建议 请根据以下业务场景对可靠性和性能要求进行评估,采用合理参数配置。 对于价值数据,这两种场景下建议Kafka数据目录磁盘配置raid1或者raid5,从而提高单个磁盘故障情况下数据可靠性。 参数配置项均为Topic级别可修改的参数,默认采用服务级配置。 可针对不同Topic可靠性要求对Topic进行单独配置。以root用户登录Kafka客户端节点,在客户端安装目录下配置Topic名称为test的可靠性参数命令: cd Kafka/kafka/bin kafka-topics.sh --zookeeper 192.168.1.205:2181/kafka --alter --topic test --config unclean.leader.election.enable=false --config min.insync.replicas=2 其中192.168.1.205为ZooKeeper业务IP地址。 参数配置项为服务级配置需要重启Kafka,建议在变更窗口做服务级配置修改。
  • 超时参数 表2 Broker相关超时参数 参数名称 参数说明 默认值 影响分析 controller.socket.timeout.ms Controller连接Broker的超时时间。单位:毫秒。 30000 Controller连接Broker的超时时间,一般不需要调整。 group.max.session.timeout.ms Consumer注册时允许的最大会话超时时间。单位:毫秒。 1800000 允许Consumer配置的session.timeout.ms的最大值(不包含此值)。 group.min.session.timeout.ms Consumer注册时允许的最小会话超时时间。单位:毫秒。 6000 允许Consumer配置的session.timeout.ms的最小值(不包含此值)。 offsets.commit.timeout.ms Offset提交请求的超时时间。单位:毫秒。 5000 Offset提交时被延迟处理的最大超时时间。 replica.socket.timeout.ms 副本数据同步请求的超时时间,配置值不得小于replica.fetch.wait.max.ms。单位:毫秒。 30000 同步线程在发送同步请求之前等待通道建立的最大超时时间,要求配置大于replica.fetch.wait.max.ms。 request.timeout.ms 设置客户端发送连接请求后,等待响应的超时时间。单位:毫秒。 30000 Broker节点上的Controller、Replica线程中传入networkclient连接的超时参数,如果在超时时间内没有接收到响应,那么客户端重新发送,并在达到重试次数后返回请求失败。 transaction.max.timeout.ms 事务允许的最大超时。单位:毫秒。 900000 事务最大超时时间,如果客户端的请求时间超过该值,则Broker将在InitProducerIdRequest中返回一个错误。这样可以防止客户端超时时间过长,而导致消费者无法接收topic。 user.group.cache.timeout.sec 指定缓存中保存用户对应组信息的时间。单位:秒。 300 缓存中用户和组对应关系缓存时间,超过此时间用户信息才会再次通过id -Gn命令查询,在此期间,仅使用缓存中的用户和组对应关系。 zookeeper.connection.timeout.ms 连接ZooKeeper的超时时间。单位:毫秒。 45000 ZooKeeper连接超时时间,这个时间决定了zkclient中初次连接建立过程时允许消耗的时间,超过该时间,zkclient会主动断开。 zookeeper.session.timeout.ms ZooKeeper会话超时时间。如果Broker在此时间内未向ZooKeeper上报心跳,则被认为失效。单位:毫秒。 45000 ZooKeeper会话超时时间。 作用一:这个时间结合传入的ZKURL中ZooKeeper的地址个数,ZooKeeper客户端以(sessionTimeout/传入ZooKeeper地址个数)为连接一个节点的超时时间,超过此时间未连接成功,则尝试连接下一个节点。 作用二:连接建立后,一个会话的超时时间,如ZooKeeper上注册的临时节点BrokerId,当Broker被停止,则该BrokerId,会经过一个sessionTimeout才会被ZooKeeper清理。 表3 Producer相关超时参数 配置名称 说明 默认值 影响分析 request.timeout.ms 指定发送消息请求的请求超时时间。单位:毫秒。 30000 请求超时时间,出现网络问题时,需调大此参数;配置过小,则容易出现Batch Expire异常。 表4 Consumer相关超时参数 配置名称 说明 默认值 影响分析 connections.max.idle.ms 空闲连接的保留时间。单位:毫秒 600000 空闲连接的保留时间,连接空闲时间大于此时间,则会销毁该连接,有需要时重新创建连接。 request.timeout.ms 消费请求的超时时间。单位:毫秒。 30000 请求超时时间,请求超时会失败然后不断重试。
  • 常用参数 表1 参数说明 配置参数 说明 缺省值 log.dirs Kafka数据存储目录列表,以逗号分隔多个目录。 %{@auto.detect.datapart.bk.log.logs} KAFKA_HEAP_OPTS Kafka启动Broker时使用的jvm选项。建议根据业务需要进行设置。 -Xmx6G -Xms6G auto.create.topics.enable 是否自动创建Topic,若参数设置为false,发消息前需要通过命令创建Topic。 true default.replication.factor 自动创建Topic时的默认副本数。 2 monitor.preInitDelay 服务启动后,第一次健康检查的延迟时间。如果启动需要较长时间,可以通过调大参数,来完成启动。单位为毫秒。 600000
  • 操作步骤 写数据服务端调优 参数入口: 进入HBase服务参数“全部配置”界面,具体操作请参考修改集群服务配置参数章节。 表1 影响实时写数据配置项 配置参数 描述 默认值 hbase.wal.hsync 控制HLog文件在写入到HDFS时的同步程度。如果为true,HDFS在把数据写入到硬盘后才返回;如果为false,HDFS在把数据写入OS的缓存后就返回。 把该值设置为false比true在写入性能上会更优。 true hbase.hfile.hsync 控制HFile文件在写入到HDFS时的同步程度。如果为true,HDFS在把数据写入到硬盘后才返回;如果为false,HDFS在把数据写入OS的缓存后就返回。 把该值设置为false比true在写入性能上会更优。 true GC_OPTS HBase利用内存完成读写操作。提高HBase内存可以有效提高HBase性能。GC_OPTS主要需要调整HeapSize的大小和NewSize的大小。调整HeapSize大小的时候,建议将Xms和Xmx设置成相同的值,这样可以避免JVM动态调整HeapSize大小的时候影响性能。调整NewSize大小的时候,建议把其设置为HeapSize大小的1/8。 HMaster:当HBase集群规模越大、Region数量越多时,可以适当调大HMaster的GC_OPTS参数。 RegionServer:RegionServer需要的内存一般比HMaster要大。在内存充足的情况下,HeapSize可以相对设置大一些。 说明: 主HMaster的HeapSize为4G的时候,HBase集群可以支持100000 region数的规模。根据经验值,集群每增加35000个region,HeapSize增加2G,主HMaster的HeapSize不建议超过32GB。 HMaster -server -Xms4G -Xmx4G -XX:NewSize=512M -XX:MaxNewSize=512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M Region Server -server -Xms6G -Xmx6G -XX:NewSize=1024M -XX:MaxNewSize=1024M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M hbase.regionserver.handler.count 表示在RegionServer上启动的RPC侦听器实例数。如果设置过高会导致激烈线程竞争,如果设置过小,请求将会在RegionServer长时间等待,降低处理能力。根据资源情况,适当增加处理线程数。 建议根据CPU的使用情况,可以选择设置为100至300之间的值。 200 hbase.hregion.max.filesize HStoreFile的最大大小(单位:Byte)。若任何一个列族HStoreFile超过此参数值,则托管Hregion将会一分为二。 10737418240 hbase.hregion.memstore.flush.size 在RegionServer中,当写操作内存中存在超过memstore.flush.size大小的memstore,则MemStoreFlusher就启动flush操作将该memstore以hfile的形式写入对应的store中。 如果RegionServer的内存充足,而且活跃Region数量也不是很多的时候,可以适当增大该值,可以减少compaction的次数,有助于提升系统性能。 同时,这种flush产生的时候,并不是紧急的flush,flush操作可能会有一定延迟,在延迟期间,写操作还可以进行,Memstore还会继续增大,最大值为“memstore.flush.size” * “hbase.hregion.memstore.block.multiplier”。当超过最大值时,将会阻塞操作。适当增大“hbase.hregion.memstore.block.multiplier”可以减少阻塞,减少性能波动。单位:字节。 134217728 hbase.regionserver.global.memstore.size 更新被锁定以及强制冲洗发生之前一个RegionServer上支持的所有MemStore的大小。RegionServer中,负责flush操作的是MemStoreFlusher线程。该线程定期检查写操作内存,当写操作占用内存总量达到阈值,MemStoreFlusher将启动flush操作,按照从大到小的顺序,flush若干相对较大的memstore,直到所占用内存小于阈值。 阈值 = “hbase.regionserver.global.memstore.size” * “hbase.regionserver.global.memstore.size.lower.limit” * “HBase_HEAPSIZE” 说明: 该配置与“hfile.block.cache.size”的和不能超过0.8,也就是写和读操作的内存不能超过HeapSize的80%,这样可以保证除读和写外其它操作的正常运行。 0.4 hbase.hstore.blockingStoreFiles 在region flush前首先判断file文件个数,是否大于hbase.hstore.blockingStoreFiles。 如果大于需要先compaction并且让flush延时90s(这个值可以通过hbase.hstore.blockingWaitTime进行配置),在延时过程中,将会继续写从而使得Memstore还会继续增大超过最大值 “memstore.flush.size” * “hbase.hregion.memstore.block.multiplier”,导致写操作阻塞。当完成compaction后,可能就会产生大量写入。这样就导致性能激烈震荡。 增加hbase.hstore.blockingStoreFiles,可以减低BLOCK机率。 15 hbase.regionserver.thread.compaction.throttle 大于此参数值的压缩将被大线程池执行,单位:Byte。控制一次Minor Compaction时,进行compaction的文件总大小的阈值。Compaction时的文件总大小会影响这一次compaction的执行时间,如果太大,可能会阻塞其它的compaction或flush操作。 1610612736 hbase.hstore.compaction.min 每次执行minor compaction的HStoreFile的最小数量。当一个Store文件超过该值时,会进行compact,适当增大该值,可以减少文件被重复执行compaction。但是如果过大,会导致Store文件数过多而影响读取的性能。 6 hbase.hstore.compaction.max 每次执行minor compaction的HStoreFile的最大数量。与“hbase.hstore.compaction.max.size”的作用基本相同,主要是控制一次compaction操作的时间不要太长。 10 hbase.hstore.compaction.max.size 如果一个HFile文件的大小大于该值,那么在Minor Compaction操作中不会选择这个文件进行compaction操作,除非进行Major Compaction操作。 这个值可以防止较大的HFile参与compaction操作。在禁止Major Compaction后,一个Store中可能存在几个HFile,而不会合并成为一个HFile,这样不会对数据读取造成太大的性能影响。单位:字节。 9223372036854775807 hbase.hregion.majorcompaction 单个区域内所有HStoreFile文件主压缩的时间间隔,单位:毫秒。由于执行Major Compaction会占用较多的系统资源,如果正在处于系统繁忙时期,会影响系统的性能。 如果业务没有较多的更新、删除、回收过期数据空间时,可以把该值设置为0,以禁止Major Compaction。 如果必须要执行Major Compaction,以回收更多的空间,可以适当增加该值来调大Major Compaction的执行周期,减少对资源的频繁占用。单位:毫秒。 604800000 hbase.regionserver.maxlogs hbase.regionserver.hlog.blocksize 表示一个RegionServer上未进行Flush的Hlog的文件数量的阈值,如果大于该值,RegionServer会强制进行flush操作。 表示每个HLog文件的最大大小。如果HLog文件大小大于该值,就会滚动出一个新的HLog文件,旧的将被禁用并归档。 这两个参数共同决定了RegionServer中可以存在的未进行Flush的hlog数量。当这个数据量小于MemStore的总大小的时候,会出现由于HLog文件过多而触发的强制flush操作。这个时候可以适当调整这两个参数的大小,以避免出现这种强制flush的情况。单位:字节。 32 134217728 写数据客户端调优 写数据时,在场景允许的情况下,需要使用Put List的方式,可以极大的提升写性能。每一次Put的List的长度,需要结合单条Put的大小,以及实际环境的一些参数进行设定。建议在选定之前先做一些基础的测试。 写数据表设计调优 表2 影响实时写数据相关参数 配置参数 描述 默认值 COMPRESSION 配置数据的压缩算法,这里的压缩是HFile中block级别的压缩。对于可以压缩的数据,配置压缩算法可以有效减少磁盘的IO,从而达到提高性能的目的。 说明: 并非所有数据都可以进行有效压缩。例如一张图片的数据,因为图片一般已经是压缩后的数据,所以压缩效果有限。常用的压缩算法是SNAPPY,因为它有较好的Encoding/Decoding速度和可以接受的压缩率。 NONE BLOCKSIZE 配置HFile中block块的大小,不同的block块大小,可以影响HBase读写数据的效率。越大的block块,配合压缩算法,压缩的效率就越好;但是由于HBase的读取数据是以block块为单位的,所以越大的block块,对于随机读的情况,性能可能会比较差。 如果要提升写入的性能,一般扩大到128KB或者256KB,可以提升写数据的效率,也不会影响太大的随机读性能。单位:字节 65536 IN_MEMORY 配置这个表的数据优先缓存在内存中,这样可以有效提升读取的性能。对于一些小表,而且需要频繁进行读取操作的,可以设置此配置项。 false
  • 操作步骤 读数据服务端调优 参数入口: 进入HBase服务参数“全部配置”界面,具体操作请参考修改集群服务配置参数章节。 表1 影响实时读数据配置项 配置参数 描述 默认值 GC_OPTS HBase利用内存完成读写操作。提高HBase内存可以有效提高HBase性能。 GC_OPTS主要需要调整HeapSize的大小和NewSize的大小。调整HeapSize大小的时候,建议将Xms和Xmx设置成相同的值,这样可以避免JVM动态调整HeapSize大小的时候影响性能。调整NewSize大小的时候,建议把其设置为HeapSize大小的1/8。 HMaster:当HBase集群规模越大、Region数量越多时,可以适当调大HMaster的GC_OPTS参数。 RegionServer:RegionServer需要的内存一般比HMaster要大。在内存充足的情况下,HeapSize可以相对设置大一些。 说明: 主HMaster的HeapSize为4G的时候,HBase集群可以支持100000 region数的规模。根据经验值,集群每增加35000个region,HeapSize增加2G,主HMaster的HeapSize不建议超过32GB。 MRS 3.x之前版本: HMaster: -server -Xms2G -Xmx2G -XX:NewSize=256M -XX:MaxNewSize=256M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -XX:MaxDirectMemorySize=512M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M RegionServer: -server -Xms4G -Xmx4G -XX:NewSize=512M -XX:MaxNewSize=512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -XX:MaxDirectMemorySize=512M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M MRS 3.x及之后版本: HMaster -server -Xms4G -Xmx4G -XX:NewSize=512M -XX:MaxNewSize=512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M Region Server -server -Xms6G -Xmx6G -XX:NewSize=1024M -XX:MaxNewSize=1024M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M hbase.regionserver.handler.count 表示RegionServer在同一时刻能够并发处理多少请求。如果设置过高会导致激烈线程竞争,如果设置过小,请求将会在RegionServer长时间等待,降低处理能力。根据资源情况,适当增加处理线程数。 建议根据CPU的使用情况,可以选择设置为100至300之间的值。 200 hfile.block.cache.size HBase缓存区大小,主要影响查询性能。根据查询模式以及查询记录分布情况来决定缓存区的大小。如果采用随机查询使得缓存区的命中率较低,可以适当降低缓存区大小。 当offheap关闭时,默认值为0.25。当offheap开启时,默认值是0.1。 如果同时存在读和写的操作,这两种操作的性能会互相影响。如果写入导致的flush和Compaction操作频繁发生,会占用大量的磁盘IO操作,从而影响读取的性能。如果写入导致阻塞较多的Compaction操作,就会出现Region中存在多个HFile的情况,从而影响读取的性能。所以如果读取的性能不理想的时候,也要考虑写入的配置是否合理。 读数据客户端调优 Scan数据时需要设置caching(一次从服务端读取的记录条数,默认是1),若使用默认值读性能会降到极低。 当不需要读一条数据所有的列时,需要指定读取的列,以减少网络IO。 只读取RowKey时,可以为Scan添加一个只读取RowKey的filter(FirstKeyOnlyFilter或KeyOnlyFilter)。 读数据表设计调优 表2 影响实时读数据相关参数 配置参数 描述 默认值 COMPRESSION 配置数据的压缩算法,这里的压缩是HFile中block级别的压缩。对于可以压缩的数据,配置压缩算法可以有效减少磁盘的IO,从而达到提高性能的目的。 说明: 并非所有数据都可以进行有效压缩。例如一张图片的数据,因为图片一般已经是压缩后的数据,所以压缩效果有限。常用的压缩算法是SNAPPY,因为它有较好的Encoding/Decoding速度和可以接受的压缩率。 NONE BLOCKSIZE 配置HFile中block块的大小,不同的block块大小,可以影响HBase读写数据的效率。越大的block块,配合压缩算法,压缩的效率就越好;但是由于HBase的读取数据是以block块为单位的,所以越大的block块,对于随机读的情况,性能可能会比较差。 如果要提升写入的性能,一般扩大到128KB或者256KB,可以提升写数据的效率,也不会影响太大的随机读性能。单位:字节。 65536 DATA_BLOCK_ENCODING 配置HFile中block块的编码方法。当一行数据中存在多列时,一般可以配置为“FAST_DIFF”,可以有效的节省数据存储的空间,从而提供性能。 NONE
  • 参数说明 表1 Hue常用参数 配置参数 说明 缺省值 范围 HANDLER_ACCESSLOG_LEVEL 表示Hue的访问日志级别。 DEBUG ERROR WARN INFO DEBUG HANDLER_AUDITSLOG_LEVEL 表示Hue的审计日志级别。 DEBUG ERROR WARN INFO DEBUG HANDLER_ERRORLOG_LEVEL 表示Hue的错误日志级别。 ERROR ERROR WARN INFO DEBUG HANDLER_LOGFILE_LEVEL 表示Hue的运行日志级别。 INFO ERROR WARN INFO DEBUG HANDLER_LOGFILE_MAXBACKUPINDEX 表示Hue日志文件最大个数。 20 1~999 HANDLER_LOGFILE_SIZE 表示Hue日志文件最大大小。 5MB -
  • 操作步骤 JVM GC参数 RegionServer GC_OPTS参数设置建议: -Xms与-Xmx设置相同的值,需要根据实际情况设置,增大内存可以提高读写性能,可以参考参数“hfile.block.cache.size”(见表2)和参数“hbase.regionserver.global.memstore.size”(见表1)的介绍进行设置。 -XX:NewSize与-XX:MaxNewSize设置相同值,建议低负载场景下设置为“512M”,高负载场景下设置为“2048M”。 -XX:CMSInitiatingOccupancyFraction建议设置为“100 * (hfile.block.cache.size + hbase.regionserver.global.memstore.size + 0.05)”,最大值不超过90。 -XX:MaxDirectMemorySize表示JVM使用的堆外内存,建议低负载情况下设置为“512M”,高负载情况下设置为“2048M”。 GC_OPTS参数中-XX:MaxDirectMemorySize默认没有配置,如需配置,用户可在GC_OPTS参数中自定义添加。 Put相关参数 RegionServer处理put请求的数据,会将数据写入memstore和hlog, 当memstore大小达到设置的“hbase.hregion.memstore.flush.size”参数值大小时,memstore就会刷新到HDFS生成HFile。 当当前region的列簇的HFile数量达到“hbase.hstore.compaction.min”参数值时会触发compaction。 当当前region的列簇HFile数达到“hbase.hstore.blockingStoreFiles”参数值时会阻塞memstore刷新生成HFile的操作,导致put请求阻塞。 表1 Put相关参数 参数 描述 默认值 hbase.wal.hsync 每一条wal是否持久化到硬盘。 参考提升连续put场景性能。 true hbase.hfile.hsync hfile写是否立即持久化到硬盘。 参考提升连续put场景性能。 true hbase.hregion.memstore.flush.size 若MemStore的大小(单位:Byte)超过指定值,MemStore将被冲洗至磁盘。该参数值将被运行每个hbase.server.thread.wakefrequency的线程所检验。建议设置为HDFS块大小的整数倍,在内存足够put负载大情况下可以调整增大。 134217728 hbase.regionserver.global.memstore.size 更新被锁定以及强制冲洗发生之前一个RegionServer上支持的所有MemStore的大小。建议设置为“hbase.hregion.memstore.flush.size * 写活跃region数 / RegionServer GC -Xmx”。默认值为“0.4”,表示使用RegionServer GC -Xmx的40%。 0.4 hbase.hstore.flusher.count memstore的flush线程数,在put高负载场景下可以适当调大。 2 hbase.regionserver.thread.compaction.small 小压缩线程数,在put高负载情况下可以适当调大。 10 hbase.hstore.blockingStoreFiles 若一个Store内的HStoreFile文件数量超过指定值,则针对此HRegion的更新将被锁定直到一个压缩完成或者base.hstore.blockingWaitTime被超过。每冲洗一次MemStore一个StoreFile文件被写入。在put高负载场景下可以适当调大。 15 Scan相关参数 表2 Scan相关参数 参数 描述 默认值 hbase.client.scanner.timeout.period 客户端和RegionServer端参数,表示客户端执行scan的租约超时时间。建议设置为60000ms的整数倍,在读高负载情况下可以适当调大。单位:毫秒。 60000 hfile.block.cache.size 数据缓存所占的RegionServer GC -Xmx百分比,在读高负载情况下可以适当调大以增大缓存命中率以提高性能。表示分配给HFile/StoreFile所使用的块缓存的最大heap(-Xmx setting)的百分比。 当offheap关闭时,默认值为0.25,当offheap开启时,默认值是0.1。 Handler相关参数 表3 Handler相关参数 参数 描述 默认值 hbase.regionserver.handler.count RegionServer上的RPC侦听器实例数,建议设置为200 ~ 400之间。 200 hbase.regionserver.metahandler.count RegionServer中处理优先请求的程序实例的数量,建议设置为200 ~ 400之间。 200
  • 操作步骤 参数入口: HBase角色相关的JVM参数需要配置在安装有HBase服务的节点的“${BIGDATA_HOME}/FusionInsight_HD_*/install/FusionInsight-HBase-2.2.3/hbase/conf/”目录下的“hbase-env.sh”文件中。 每个角色都有各自的JVM参数配置变量,如表1。 表1 HBase相关JVM参数配置变量 变量名 变量影响的角色 HBASE_OPTS 该变量中设置的参数,将影响HBase的所有角色。 SERVER_GC_OPTS 该变量中设置的参数,将影响HBase Server端的所有角色,例如:Master、RegionServer等。 CLIENT_GC_OPTS 该变量中设置的参数,将影响HBase的Client进程。 HBASE_MASTER_OPTS 该变量中设置的参数,将影响HBase的Master。 HBASE_REGIONSERVER_OPTS 该变量中设置的参数,将影响HBase的RegionServer。 HBASE_THRIFT_OPTS 该变量中设置的参数,将影响HBase的Thrift。 配置方式举例: export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"
  • 操作场景 在Hive中执行多表Join时,Hive支持开启CBO(Cost Based Optimization),系统会自动根据表的统计信息,例如数据量、文件数等,选出合适计划提高多表Join的效率。Hive需要先收集表的统计信息后才能使CBO正确的优化。 CBO优化器会基于统计信息和查询条件,尽可能地使join顺序达到合适。但是也可能存在特殊情况导致join顺序调整不准确。例如数据存在倾斜,以及查询条件值在表中不存在等场景,可能调整出非优化的join顺序。 开启列统计信息自动收集时,需要在reduce侧做聚合统计。对于没有reduce阶段的insert任务,将会多出reduce阶段,用于收集统计信息。 本章节适用于MRS 3.x及后续版本。
  • 操作步骤 在Manager界面Hive组件的配置中搜索“hive.cbo.enable”参数,选中“true”永久开启功能。 手动收集Hive表已有数据的统计信息。 执行以下命令,可以手动收集统计信息。仅支持统计一张表,如果需要统计不同的表需重复执行。 ANALYZE TABLE [db_name.]tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] COMPUTE STATISTICS [FOR COLUMNS] [NOSCAN]; 指定FOR COLUMNS时,收集列级别的统计信息。 指定NOSCAN时,将只统计文件大小和个数,不扫描具体文件。 例如: analyze table table_name compute statistics; analyze table table_name compute statistics for columns; 配置Hive自动收集统计信息。开启配置后,执行insert overwrite/into命令插入数据时才自动统计新数据的信息。 在Hive客户端执行以下命令临时开启收集: set hive.stats.autogather = true;开启表/分区级别的统计信息自动收集。 set hive.stats.column.autogather = true; 开启列级别的统计信息自动收集。 列级别统计信息的收集不支持复杂的数据类型,例如Map,Struct等。 表级别统计信息的自动收集不支持Hive on HBase表。 在Manager界面Hive的服务配置中,搜索参数“hive.stats.autogather”和“hive.stats.column.autogather”,选中“true”永久开启收集功能。 执行以下命令可以查看统计信息。 DESCRIBE FORMATTED table_name[.column_name] PARTITION partition_spec; 例如: desc formatted table_name; desc formatted table_name id; desc formatted table_name partition(time='2016-05-27'); 分区表仅支持分区级别的统计信息收集,因此分区表需要指定分区来查询统计信息。
  • 日志级别 Hive提供了如表2所示的日志级别。 运行日志的级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG,程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 ERROR ERROR表示系统运行的错误信息。 WARN WARN表示当前事件处理存在异常信息。 INFO INFO表示记录系统及各事件正常运行状态信息。 DEBUG DEBUG表示记录系统及系统的调试信息。 如果您需要修改日志级别,请执行如下操作: 参考修改集群服务配置参数,进入Hive服务“全部配置”页面。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别并保存。 配置Hive日志级别后可立即生效,无需重启服务。
  • 操作步骤 推荐:使用“SNAPPY”压缩,适用于压缩比和读取效率要求均衡场景。 Create table xx (col_name data_type) stored as orc tblproperties ("orc.compress"="SNAPPY"); 可用:使用“ZLIB”压缩,适用于压缩比要求较高场景。 Create table xx (col_name data_type) stored as orc tblproperties ("orc.compress"="ZLIB"); xx为具体使用的Hive表名。
  • 锁机制 事务通过以下两点实现ACID特性: 预写日志(Write-ahead logging)保证原子性和持久性。 锁(locking)保证隔离性。 操作 持有锁类型 Insert overwrite hive.txn.xlock.iow=true时持有排他锁,hive.txn.xlock.iow=false时持有半共享锁。 Insert 共享锁。执行该操作时能够对当前表或分区执行读写操作。 Update/delete 半共享锁。执行该操作时能够执行持有共享锁的操作,不能执行持有排他锁或半共享锁的操作。 Drop 排他锁。执行该操作时无法对当前表或分区执行其他任何操作。 如果写操作中存在锁机制引发的冲突,优先持有锁的操作将成功,其他操作将失败。
共100000条