华为云用户手册

  • 日志级别 Flink中提供了如表3所示的日志级别。日志级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表3 日志级别 级别 描述 ERROR ERROR表示当前时间处理存在错误信息。 WARN WARN表示当前事件处理存在异常信息。 INFO INFO表示记录系统及各事件正常运行状态信息。 DEBUG DEBUG表示记录系统及系统的调试信息。 如果您需要修改日志级别,请执行如下操作: 请参考修改集群服务配置参数,进入Flink的“全部配置”页面。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 保存配置,在弹出窗口中单击“确定”使配置生效。 配置完成后不需要重启服务,重新下载客户端使配置生效。 也可以直接修改客户端“客户端安装目录/Flink/flink/conf/”中log4j-cli.properties、log4j.properties、log4j-session.properties文件中对应的日志级别配置项。 通过客户端提交作业时会在客户端log文件夹中生成相应日志文件,由于系统默认umask值是0022,所以日志默认权限为644;如果需要修改文件权限,需要修改umask值;例如修改omm用户umask值: 在“/home/omm/.baskrc”文件末尾添加“umask 0026”; 执行命令source /home/omm/.baskrc使文件权限生效。
  • 日志描述 日志存储路径: Flink作业运行日志:“${BIGDATA_DATA_HOME}/hadoop/data${i}/nm/containerlogs/application_${appid}/container_{$contid}”。 运行中的任务日志存储在以上路径中,运行结束后会基于Yarn的配置确定是否汇聚到HDFS目录中。 FlinkResource运行日志:“/var/log/Bigdata/flink/flinkResource”。 日志归档规则: FlinkResource运行日志: 服务日志默认20MB滚动存储一次,最多保留20个文件,不压缩。 针对 MRS 3.x之前版本,Executor日志默认30MB滚动存储一次,最多保留20个文件,不压缩。 日志大小和压缩文件保留个数可以在Manager界面中配置或者修改客户端“客户端安装目录/Flink/flink/conf/”中的log4j-cli.properties、log4j.properties、log4j-session.properties中对应的配置项。 表1 FlinkResource日志列表 日志类型 日志文件名 描述 FlinkResource运行日志 checkService.log 健康检查日志。 kinit.log 初始化日志。 postinstall.log 服务安装日志。 prestart.log prestart脚本日志。 start.log 启动日志。 FlinkServer服务日志、审计日志。 FlinkServer服务日志、审计日志默认100MB滚动存储一次,服务日志最多保留30天,审计日志最多保留90天。 日志大小和压缩文件保留个数可以在Manager界面中配置或者修改客户端“客户端安装目录/Flink/flink/conf/”中的log4j-cli.properties、log4j.properties、log4j-session.properties中对应的配置项。 表2 FlinkServer日志列表 日志类型 日志文件名 描述 FlinkServer运行日志 checkService.log 健康检查日志。 checkFlinkServer.log FlinkServer健康检查日志。 localhost_access_log..yyyy-mm-dd.txt FlinkServer访问URL日志。 start_thrift_server.out thrift server启动日志。 thrift_server_thriftServer_xxx.log.last cleanup.log 安装卸载实例时的清理日志。 flink-omm-client-IP.log 作业启动日志。 flinkserver_yyyymmdd-x.log.gz 业务归档日志。 flinkserver.log 业务日志。 flinkserver---pidxxxx-gc.log.x.current GC日志。 kinit.log 初始化日志。 postinstall.log 服务安装日志。 prestart.log prestart脚本日志。 start.log 启动日志。 stop.log 停止日志。 catalina.yyyy-mm-dd.log tomcat运行日志.。 catalina.out host-manager.yyyy-mm-dd.log localhost.yyyy-mm-dd.log manager.yyyy-mm-dd.log FlinkServer审计日志 flinkserver_audit_yyyymmdd-x.log.gz 审计归档日志。 flinkserver_audit.log 审计日志。
  • 日志级别 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使用率。
  • 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”。
  • 操作场景 本章节内容适用于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,建议在变更窗口做服务级配置修改。
  • 针对不同的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
  • 操作场景 HDFS Colocation(同分布)是HDFS提供的数据分布控制功能,利用HDFS Colocation接口,可以将存在关联关系或者可能进行关联操作的数据存放在相同的存储节点上。Hive支持HDFS的Colocation功能,即在创建Hive表时,设置表文件分布的locator信息,当使用insert语句向该表中插入数据时会将该表的数据文件存放在相同的存储节点上(不支持其他数据导入方式),从而使后续的多表关联的数据计算更加方便和高效。表格式只支持TextFile和RCFile。 本章节适用于MRS 3.x及后续版本。
  • 操作步骤 若您需要对参数配置进行调整,具体操作请参考修改集群服务配置参数。 可用内存 除了分配给操作系统、其他服务的内存外,剩余的资源应尽量分配给YARN。通过如下配置参数进行调整。 例如,如果一个container默认使用512M,则内存使用的计算公式为:512M*container数。 默认情况下,Map或Reduce container会使用1个虚拟CPU内核和1024MB内存,ApplicationMaster使用1536MB内存。 参数 描述 默认值 yarn.nodemanager.resource.memory-mb 设置可分配给容器的物理内存数量。单位:MB,取值范围大于0。 建议配置成节点物理内存总量的75%~90%。若该节点有其他业务的常驻进程,请降低此参数值给该进程预留足够运行资源。如果节点的总物理内存空间较大,且无其他业务的常驻进程时,该参数可配置为:总物理内存 - NodeManager的常驻进程所占内存。 MRS 3.x及之后:16384 MRS 3.x之前:8192 CPU虚拟核数 建议将此配置设定在逻辑核数的1.5~2倍之间。如果上层计算应用对CPU的计算能力要求不高,可以配置为2倍的逻辑CPU。 参数 描述 默认值 yarn.nodemanager.resource.cpu-vcores 表示该节点上YARN可使用的虚拟CPU个数,默认是8。 目前推荐将该值设置为逻辑CPU核数的1.5~2倍之间。 若任务为计算密集型,该参数可设置为与逻辑CPU核数一致。 若任务为非计算密集型资源,该参数可设置为逻辑CPU核数的1.5~2倍之间。 若任务所使用的CPU核数与内存资源差异较大时,CPU资源可参考实际的内存资源进行配置。例如大部分任务使用1核3G,如果“yarn.nodemanager.resource.memory-mb”设置380G,那么该参数设置为128。 8 物理CPU使用百分比 建议预留适量的CPU给操作系统和其他进程(数据库、HBase等)外,剩余的CPU核都分配给YARN。可以通过如下配置参数进行调整。 参数 描述 默认值 yarn.nodemanager.resource.percentage-physical-cpu-limit 表示该节点上YARN可使用的物理CPU百分比。默认是90,即不进行CPU控制,YARN可以使用节点全部CPU。该参数只支持查看,可通过调整YARN的RES_CPUSET_PERCENTAGE参数来修改本参数值。注意,目前推荐将该值设为可供YARN集群使用的CPU百分数。 例如:当前节点除了YARN服务外的其他服务(如HBase、HDFS、Hive等)及系统进程使用CPU为20%左右,则可以供YARN调度的CPU为1-20%=80%,即配置此参数为80。 90 本地磁盘 由于本地磁盘会提供给MapReduce写job执行的中间结果,数据量大。因此配置的原则是磁盘尽量多,且磁盘空间尽量大,单个达到百GB以上规模更好。简单的做法是配置和data node相同的磁盘,只在最下一级目录上不同即可。 多个磁盘之间使用逗号隔开。 参数 描述 默认值 yarn.nodemanager.log-dirs 日志存放地址(可配置多个目录)。 容器日志的存储位置。默认值为%{@auto.detect.datapart.nm.logs}。如果有数据分区,基于该数据分区生成一个类似/srv/BigData/hadoop/data1/nm/containerlogs,/srv/BigData/hadoop/data2/nm/containerlogs的路径清单。如果没有数据分区,生成默认路径/srv/BigData/yarn/data1/nm/containerlogs。除了使用表达式以外,还可以输入完整的路径清单,比如/srv/BigData/yarn/data1/nm/containerlogs或/srv/BigData/yarn/data1/nm/containerlogs,/srv/BigData/yarn/data2/nm/containerlogs。这样数据就会存储在所有设置的目录中,一般会是在不同的设备中。为保证磁盘IO负载均衡,需要提供几个路径且每个路径都对应一个单独的磁盘。应用程序的本地化后的日志目录存在于相对路径/application_%{appid}中。单独容器的日志目录,即container_{$contid},是该路径下的子目录。每个容器目录都含容器生成的stderr、stdin及syslog文件。要新增目录,比如新增/srv/BigData/yarn/data2/nm/containerlogs目录,应首先删除/srv/BigData/yarn/data2/nm/containerlogs下的文件。之后,为/srv/BigData/yarn/data2/nm/containerlogs赋予跟/srv/BigData/yarn/data1/nm/containerlogs一样的读写权限,再将/srv/BigData/yarn/data1/nm/containerlogs修改为/srv/BigData/yarn/data1/nm/containerlogs,/srv/BigData/yarn/data2/nm/containerlogs。可以新增目录,但不要修改或删除现有目录。否则,NodeManager的数据将丢失,且服务将不可用。 【默认值】%{@auto.detect.datapart.nm.logs} 【注意】请谨慎修改该项。如果配置不当,将造成服务不可用。当角色级别的该配置项修改后,所有实例级别的该配置项都将被修改。如果实例级别的配置项修改后,其他实例的该配置项的值保持不变。 %{@auto.detect.datapart.nm.logs} yarn.nodemanager.local-dirs 本地化后的文件的存储位置。默认值为%{@auto.detect.datapart.nm.localdir}。如果有数据分区,基于该数据分区生成一个类似/srv/BigData/hadoop/data1/nm/localdir,/srv/BigData/hadoop/data2/nm/localdir的路径清单。如果没有数据分区,生成默认路径/srv/BigData/yarn/data1/nm/localdir。除了使用表达式以外,还可以输入完整的路径清单,比如/srv/BigData/yarn/data1/nm/localdir或/srv/BigData/yarn/data1/nm/localdir,/srv/BigData/yarn/data2/nm/localdir。这样数据就会存储在所有设置的目录中,一般会是在不同的设备中。为保证磁盘IO负载均衡,需要提供几个路径且每个路径都对应一个单独的磁盘。应用程序的本地化后的文件目录存在于相对路径/usercache/%{user}/appcache/application_%{appid}中。单独容器的工作目录,即container_%{contid},是该路径下的子目录。要新增目录,比如新增/srv/BigData/yarn/data2/nm/localdir目录,应首先删除/srv/BigData/yarn/data2/nm/localdir下的文件。之后,为/srv/BigData/hadoop/data2/nm/localdir赋予跟/srv/BigData/hadoop/data1/nm/localdir一样的读写权限,再将/srv/BigData/yarn/data1/nm/localdir修改为/srv/BigData/yarn/data1/nm/localdir,/srv/BigData/yarn/data2/nm/localdir。可以新增目录,但不要修改或删除现有目录。否则,NodeManager的数据将丢失,且服务将不可用。 【默认值】%{@auto.detect.datapart.nm.localdir} 【注意】请谨慎修改该项。如果配置不当,将造成服务不可用。当角色级别的该配置项修改后,所有实例级别的该配置项都将被修改。如果实例级别的配置项修改后,其他实例的该配置项的值保持不变。 %{@auto.detect.datapart.nm.localdir}
  • 日志级别 Yarn中提供了如表2所示的日志级别。其中日志级别优先级从高到低分别是OFF、FATAL、ERROR、WARN、INFO、DEBUG。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 FATAL FATAL表示当前事件处理存在严重错误信息。 ERROR ERROR表示当前事件处理存在错误信息。 WARN WARN表示当前事件处理存在异常告警信息。 INFO INFO表示记录系统及各事件正常运行状态信息 DEBUG DEBUG表示记录系统及系统的调试信息 如果您需要修改日志级别,请执行如下操作: 参考修改集群服务配置参数,进入Yarn服务“全部配置”页面。 在左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 单击“保存配置”,在弹出窗口中单击“确定”使配置生效。 配置完成后立即生效,不需要重启服务。
  • 配置描述 有关如何配置CPU隔离与安全的CGroups功能的详细信息,请参见Hadoop官网: MRS 3.2.0之前版本:http://hadoop.apache.org/docs/r3.1.1/hadoop-yarn/hadoop-yarn-site/NodeManagerCgroups.html MRS 3.2.0及之后版本:https://hadoop.apache.org/docs/r3.3.1/hadoop-yarn/hadoop-yarn-site/NodeManagerCgroups.html 由于CGroups为Linux内核特性,是通过LinuxContainerExecutor进行开放。请参考官网资料对LinuxContainerExecutor进行安全配置。您可通过官网资料了解系统用户和用户组配置对应的文件系统权限。详情请参见: MRS 3.2.0之前版本:http://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-common/SecureMode.html#LinuxContainerExecutor MRS 3.2.0及之后版本:https://hadoop.apache.org/docs/r3.3.1/hadoop-project-dist/hadoop-common/SecureMode.html#LinuxContainerExecutor 请勿修改对应文件系统中各路径所属的用户、用户组及对应的权限,否则可能导致本功能异常。 当参数“yarn.nodemanager.resource.percentage-physical-cpu-limit”配置过小,导致可使用的核不足1个时,例如4核节点,将此参数设置为20%,不足1个核,那么将会使用系统全部的核。Linux的一些版本不支持Quota模式,例如Cent OS。在这种情况下,可以使用CPUset模式。 配置cpuset模式,即Yarn只能使用配置的CPU,需要在Manager界面添加以下配置。 表1 cpuset配置 参数 描述 默认值 yarn.nodemanager.linux-container-executor.cgroups.cpu-set-usage 设置为“true”时,应用以cpuset模式运行。 false 配置strictcpuset模式,即Container只能使用配置的CPU,需要在Manager界面添加以下配置。 表2 CPU硬隔离参数配置 参数 描述 默认值 yarn.nodemanager.linux-container-executor.cgroups.cpu-set-usage 设置为“true”时,应用以cpuset模式运行。 false yarn.nodemanager.linux-container-executor.cgroups.cpuset.strict.enabled 设置为true时,Container只能使用配置的CPU。 false 要从cpuset模式切换到Quota模式,必须遵循以下条件: 配置“yarn.nodemanager.linux-container-executor.cgroups.cpu-set-usage”=“false”。 删除“/sys/fs/cgroup/cpuset/hadoop-yarn/”路径下container文件夹(如果存在)。 删除“/sys/fs/cgroup/cpuset/hadoop-yarn/”路径下cpuset.cpus文件中设置的所有CPU。
  • 前提条件 待安装客户端节点为集群外节点时,该节点必须能够与集群内节点网络互通,否则安装会失败。 待安装客户端节点必须启用NTP服务,并保持与服务端的时间一致,否则安装会失败。 在节点上安装客户端可以使用root或任意操作系统用户进行操作,要求该用户对客户端文件存放目录和安装目录具有操作权限,两个目录的权限为“755”。 本章节以使用操作系统用户“user_client”安装客户端进行举例,安装目录为“/opt/hadoopclient”。 使用omm和root以外的用户安装客户端时,若“/var/tmp/patch”目录已存在,需将此目录权限修改为“777”,将此目录内的日志权限修改为“666”。
  • 回答 创建大量节点后,follower与leader同步时数据量大,在集群数据同步限定时间内不能完成同步过程,导致超时,各个ZooKeeper Server启动失败。 参考修改集群服务配置参数章节,进入ZooKeeper服务“全部配置”页面。不断尝试调大ZooKeeper配置文件“zoo.cfg”中的“syncLimit”和“initLimit”两参数值,直到ZooKeeperServer正常。 表1 参数说明 参数 描述 默认值 syncLimit follower与leader进行同步的时间间隔(时长为ticket时长的倍数)。如果在该时间范围内leader没响应,连接将不能被建立。 15 initLimit follower连接到leader并与leader同步的时间(时长为ticket时长的倍数)。 15 如果将参数“initLimit”和“syncLimit”的参数值均配置为“300”之后,ZooKeeper Server仍然无法恢复,则需确认没有其他应用程序正在kill ZooKeeper。例如,参数值为“300”,ticket时长为2000毫秒,即同步限定时间为300*2000ms=600s。 可能存在以下场景,在ZooKeeper中创建的数据过大,需要大量时间与leader同步,并保存到硬盘。在这个过程中,如果ZooKeeper需要运行很长时间,则需确保没有其他监控应用程序kill ZooKeeper而判断其服务停止。
  • 问题 运行一个Spark Streaming任务,确认有数据输入后,发现没有任何处理的结果。打开Web界面查看Spark Job执行情况,发现如下图所示:有两个Job一直在等待运行,但一直无法成功运行。 图1 Active Jobs 继续查看已经完成的Job,发现也只有两个,说明Spark Streaming都没有触发数据计算的任务(Spark Streaming默认有两个尝试运行的Job,就是图中两个) 图2 Completed Jobs
  • 回答 当前在默认配置下,在内存中保留的Job和Stage的UI数据个数为1000个。 当前大集群优化已增加将UI数据溢出到磁盘的优化,其溢出条件是每个Stage中的UI数据大小达到最小阈值5MB。如果每个Stage的task数较小,那么其UI数据大小可能达不到该阈值,从而导致该Stage的UI数据一直缓存在内存中,直到UI数据个数到达保留的上限值(当前默认值为1000个),旧的UI数据才会在内存中被清除。 因此,在将旧的UI数据从内存中清除之前,UI数据会占用大量内存,从而导致执行10T的TPCDS测试套时出现Driver内存不足的现象。 规避措施: 根据业务需要,配置合适的需要保留的Job和Stage的UI数据个数,即配置“spark.ui.retainedJobs”和“spark.ui.retainedStages”参数。详细信息请参考常用参数中的表13。 如果需要保留的Job和Stage的UI数据个数较多,可通过配置“spark.driver.memory”参数,适当增大Driver的内存。详细信息请参考常用参数中的表10。
  • 回答 通过集群将非ViewFS文件系统配置为ViewFS时,ViewFS中的文件夹的用户权限与默认NameService中的非ViewFS不同。因为目录权限不匹配,所以已提交的MR作业运行失败。 在集群中配置ViewFS的用户,需要检查并校验目录权限。在提交作业之前,应按照默认的NameService文件夹权限更改ViewFS文件夹权限。 下表列出了ViewFS中配置的目录的默认权限结构。如果配置的目录权限与下表不匹配,则必须相应地更改目录权限。 表1 ViewFS中配置的目录的默认权限结构 参数 描述 默认值 默认值及其父目录的默认权限 yarn.nodemanager.remote-app-log-dir 在默认文件系统上(通常是HDFS),指定NM应将日志聚合到哪个目录。 logs 777 yarn.nodemanager.remote-app-log-archive-dir 将日志归档的目录。 - 777 yarn.app.mapreduce.am.staging-dir 提交作业时使用的staging目录。 /tmp/hadoop-yarn/staging 777 mapreduce.jobhistory.intermediate-done-dir MapReduce作业记录历史文件的目录。 ${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate 777 mapreduce.jobhistory.done-dir 由MR JobHistory Server管理的历史文件的目录。 ${yarn.app.mapreduce.am.staging-dir}/history/done 777
  • 回答 经过定位发现,导致这个问题的原因是:Spark Streaming的计算核数少于Receiver的个数,导致部分Receiver启动以后,系统已经没有资源去运行计算任务,导致第一个任务一直在等待,后续任务一直在排队。从现象上看,就是如问题中的图1中所示,会有两个任务一直在等待。 因此,当Web出现两个任务一直在等待的情况,首先检查Spark的核数是否大于Receiver的个数。 Receiver在Spark Streaming中是一个常驻的Spark Job,Receiver对于Spark是一个普通的任务,但它的生命周期和Spark Streaming任务相同,并且占用一个核的计算资源。 在调试和测试等经常使用默认配置的场景下,要时刻注意核数与Receiver个数的关系。
  • 回答 正常情况下 ,当一个application的单个task的attempt连续在一个节点上失败3次,那么该application的AppMaster就会将该节点加入黑名单,之后AppMaster就会通知调度器不要继续调度task到该节点,从而避免任务失败。 但是默认情况下,当集群中有33%的节点都被加入黑名单时,调度器会忽略黑名单节点。因此,该黑名单特性在小集群场景下容易失效。比如,集群只有3个节点,当1个节点出现故障,黑名单机制失效,不管task的attempt在同一个节点失败多少次,调度器仍然会将task继续调度到该节点,从而导致application因为task失败达到最大attempt次数(MapReduce默认4次)而失败。 规避手段: 在“客户端安装路径/Yarn/config/yarn-site.xml”文件中修改“yarn.resourcemanager.am-scheduling.node-blacklisting-disable-threshold”参数以百分比的形式配置忽略黑名单节点的阈值。建议根据集群规模,适当增大该参数的值,如3个节点的集群, 建议增大到50%。 Superior调度器的框架设计是基于时间的异步调度,当NodeManager故障后,ResourceManager无法快速的感知到NodeManager已经出了问题(默认10mins),因此在此期间,Superior调度器仍然会向该节点调度task,从而导致任务失败。
  • 回答 这是正常现象。 数据分到哪个partition是通过对key的hashcode取模得到的,不同的hashcode取模后的结果有可能是一样的,那样数据就会被分到相同的partition里面,因此出现有些partition没有数据而有些partition里面有多个key对应的数据。 通过调整“spark.sql.shuffle.partitions”参数值可以调整取模时的基数,改善数据分块不均匀的情况,多次验证发现配置为质数或者奇数效果比较好。 在Driver端的“spark-defaults.conf”配置文件中调整如下参数。 表1 参数说明 参数 描述 默认值 spark.sql.shuffle.partitions shuffle操作时,shuffle数据的分块数。 200
  • 配置描述 在Spark Driver端的“spark-defaults.conf”配置文件中添加如下表格中的参数。 表1 参数说明 参数 描述 默认值 spark.sql.adaptive.enabled 自适应执行特性的总开关。 注意:AQE特性与DPP(动态分区裁剪)特性同时开启时,SparkSQL任务执行中会优先执行DPP特性,从而使得AQE特性不生效。集群中DPP特性是默认开启的,因此开启AQE特性的同时,需要将DPP特性关闭。 false spark.sql.optimizer.dynamicPartitionPruning.enabled 动态分区裁剪功能的开关。 true spark.sql.adaptive.skewJoin.enabled 当此配置为true且spark.sql.adaptive.enabled设置为true时,启用运行时自动处理join运算中的数据倾斜功能。 true spark.sql.adaptive.skewJoin.skewedPartitionFactor 此配置为一个倍数因子,用于判定分区是否为数据倾斜分区。单个分区被判定为数据倾斜分区的条件为:当一个分区的数据大小超过除此分区外其他所有分区大小的中值与该配置的乘积,并且大小超过spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes配置值时,此分区被判定为数据倾斜分区 5 spark.sql.adaptive.skewjoin.skewedPartitionThresholdInBytes 分区大小(单位:字节)大于该阈值且大于spark.sql.adaptive.skewJoin.skewedPartitionFactor与分区中值的乘积,则认为该分区存在倾斜。理想情况下,此配置应大于spark.sql.adaptive.advisoryPartitionSizeInBytes. 256MB spark.sql.adaptive.shuffle.targetPostShuffleInputSize 每个task处理的shuffle数据的最小数据量。单位:Byte。 67108864
  • 回答 使用root用户登录安装客户端的节点。 执行以下命令,切换到客户端安装目录,例如“/opt/client”。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 根据集群认证模式,完成Hive客户端登录。 安全模式,则执行以下命令,完成用户认证并登录Hive客户端。 kinit 组件业务用户 beeline 普通模式,则执行以下命令,登录Hive客户端。 使用指定组件业务用户登录Hive客户端。 beeline -n 组件业务用户 不指定组件业务用户登录Hive客户端,则会以当前操作系统用户登录。 beeline 执行以下命令关闭客户端日志: set hive.server2.logging.operation.enabled=false; 执行以下命令查看客户端日志是否已关闭,如下图所示即为关闭成功。 set hive.server2.logging.operation.enabled;
  • 配置场景 在Spark SQL多表Join的场景下,会存在关联键严重倾斜的情况,导致Hash分桶后,部分桶中的数据远高于其它分桶。最终导致部分Task过重,跑得很慢;其它Task过轻,跑得很快。一方面,数据量大Task运行慢,使得计算性能低;另一方面,数据量少的Task在运行完成后,导致很多CPU空闲,造成CPU资源浪费。 通过如下配置项可开启自动进行数据倾斜处理功能,通过将Hash分桶后数据量很大的、且超过数据倾斜阈值的分桶拆散,变成多个task处理一个桶的数据机制,提高CPU资源利用率,提高系统性能。 未产生倾斜的数据,将采用原有方式进行分桶并运行。 使用约束: 只支持两表Join的场景。 不支持FULL OUTER JOIN的数据倾斜处理。 示例:执行下面SQL语句,a表倾斜或b表倾斜都无法触发该优化。 select aid FROM a FULL OUTER JOIN b ON aid=bid; 不支持LEFT OUTER JOIN的右表倾斜处理。 示例:执行下面SQL语句,b表倾斜无法触发该优化。 select aid FROM a LEFT OUTER JOIN b ON aid=bid; 不支持RIGHT OUTER JOIN的左表倾斜处理。 示例:执行下面SQL语句,a表倾斜无法触发该优化。 select aid FROM a RIGHT OUTER JOIN b ON aid=bid;
  • compaction&cleaning配置 参数 描述 默认值 hoodie.clean.automatic 是否执行自动clean。 true hoodie.cleaner.policy 要使用的清理策略。Hudi将删除旧版本的parquet文件以回收空间。 任何引用此版本文件的查询和计算都将失败。需要确保数据保留的时间超过最大查询执行时间。 KEEP_LATEST_COMMITS hoodie.cleaner.commits.retained 保留的提交数。因此,数据将保留为num_of_commits * time_between_commits(计划的),这也直接转化为逐步提取此数据集的数量。 10 hoodie.keep.max.commits 触发归档操作的commit数阈值 30 hoodie.keep.min.commits 归档操作保留的commit数。 20 hoodie.commits.archival.batch 这控制着批量读取并一起归档的提交即时的数量。 10 hoodie.parquet.small.file.limit 该值应小于maxFileSize,如果将其设置为0,会关闭此功能。由于批处理中分区中插入记录的数量众多,总会出现小文件。Hudi提供了一个选项,可以通过将对该分区中的插入作为对现有小文件的更新来解决小文件的问题。此处的大小是被视为“小文件大小”的最小文件大小。 104857600 byte hoodie.copyonwrite.insert.split.size 插入写入并行度。为单个分区的总共插入次数。写出100MB的文件,至少1KB大小的记录,意味着每个文件有100K记录。默认值是超额配置为500K。 为了改善插入延迟,请对其进行调整以匹配单个文件中的记录数。将此值设置为较小的值将导致文件变小(尤其是当compactionSmallFileSize为0时)。 500000 hoodie.copyonwrite.insert.auto.split Hudi是否应该基于最后24个提交的元数据动态计算insertSplitSize,默认关闭。 true hoodie.copyonwrite.record.size.estimate 平均记录大小。如果指定,Hudi将使用它,并且不会基于最后24个提交的元数据动态地计算。 没有默认值设置。这对于计算插入并行度以及将插入打包到小文件中至关重要。 1024 hoodie.compact.inline 当设置为true时,紧接在插入或插入更新或批量插入的提交或增量提交操作之后由摄取本身触发压缩。 true hoodie.compact.inline.max.delta.commits 触发内联压缩之前要保留的最大增量提交数。 5 hoodie.compaction.lazy.block.read 当CompactedLogScanner合并所有日志文件时,此配置有助于选择是否应延迟读取日志块。选择true以使用I/O密集型延迟块读取(低内存使用),或者为false来使用内存密集型立即块读取(高内存使用)。 true hoodie.compaction.reverse.log.read HoodieLogFormatReader会从pos=0到pos=file_length向前读取日志文件。如果此配置设置为true,则Reader会从pos=file_length到pos=0反向读取日志文件。 false hoodie.cleaner.parallelism 如果清理变慢,请增加此值。 200 hoodie.compaction.strategy 用来决定在每次压缩运行期间选择要压缩的文件组的压缩策略。默认情况下,Hudi选择具有累积最多未合并数据的日志文件。 org.apache.hudi.table.action.compact.strategy. LogFileSizeBasedCompactionStrategy hoodie.compaction.target.io LogFileSizeBasedCompactionStrategy的压缩运行期间要花费的MB量。当压缩以内联模式运行时,此值有助于限制摄取延迟。 500 * 1024 MB hoodie.compaction.daybased.target.partitions 由org.apache.hudi.io.compact.strategy.DayBasedCompactionStrategy使用,表示在压缩运行期间要压缩的最新分区数。 10 hoodie.compaction.payload.class 这需要与插入/插入更新过程中使用的类相同。就像写入一样,压缩也使用记录有效负载类将日志中的记录彼此合并,再次与基本文件合并,并生成压缩后要写入的最终记录。 org.apache.hudi.common.model.Defaulthoodierecordpayload hoodie.schedule.compact.only.inline 在写入操作时,是否只生成压缩计划。在hoodie.compact.inline=true时有效。 false hoodie.run.compact.only.inline 通过Sql执行run compaction命令时,是否只执行压缩操作,压缩计划不存在时直接退出。 false 父主题: Hudi常见配置参数
  • 存储配置 参数 描述 默认值 hoodie.parquet.max.file.size Hudi写阶段生成的parquet文件的目标大小。对于DFS,这需要与基础文件系统块大小保持一致,以实现最佳性能。 120 * 1024 * 1024 byte hoodie.parquet.block.size parquet页面大小,页面是parquet文件中的读取单位,在一个块内,页面被分别压缩。 120 * 1024 * 1024 byte hoodie.parquet.compression.ratio 当Hudi尝试调整新parquet文件的大小时,预期对parquet数据进行压缩的比例。 如果bulk_insert生成的文件小于预期大小,请增加此值。 0.1 hoodie.parquet.compression.codec parquet压缩编解码方式名称,默认值为gzip。可能的选项是[gzip | snappy | uncompressed | lzo] snappy hoodie.logfile.max.size LogFile的最大值。这是在将日志文件移到下一个版本之前允许的最大值。 1GB hoodie.logfile.data.block.max.size LogFile数据块的最大值。这是允许将单个数据块附加到日志文件的最大值。 这有助于确保附加到日志文件的数据被分解为可调整大小的块,以防止发生OOM错误。此大小应大于JVM内存。 256MB hoodie.logfile.to.parquet.compression.ratio 随着记录从日志文件移动到parquet,预期会进行额外压缩的比例。 用于merge_on_read存储,以将插入内容发送到日志文件中并控制压缩parquet文件的大小。 0.35 父主题: Hudi常见配置参数
  • 回答 不可以。 使用包含空记录的可空字段作为主键时会返回HoodieKeyException异常: Caused by: org.apache.hudi.exception.HoodieKeyException: recordKey value: "null" for field: "name" cannot be null or empty.at org.apache.hudi.keygen.SimpleKeyGenerator.getKey(SimpleKeyGenerator.java:58)at org.apache.hudi.HoodieSparkSqlWriter$$anonfun$1.apply(HoodieSparkSqlWriter.scala:104)at org.apache.hudi.HoodieSparkSqlWriter$$anonfun$1.apply(HoodieSparkSqlWriter.scala:100)
  • 将Hudi表数据同步到Hive 通过执行run_hive_sync_tool.sh可以将Hudi表数据同步到Hive中。 例如:需要将HDFS上目录为hdfs://hacluster/tmp/huditest/hudimor1_deltastreamer_partition的Hudi表同步为Hive表,表名为table hive_sync_test3,使用unite、country和state为分区键,命令示例如下: run_hive_sync_tool.sh --partitioned-by unite,country,state --base-path hdfs://hacluster/tmp/huditest/hudimor1_deltastreamer_partition --table hive_sync_test3 --partition-value-extractor org.apache.hudi.hive.MultiPartKeysValueExtractor --support-timestamp 表1 参数说明 命令 描述 必填 默认值 --database Hive database名称 N default --table Hive表名 Y - --base-file-format 文件格式 (PARQUET或HFILE) N PARQUET --user Hive用户名 N - --pass Hive密码 N - --jdbc-url Hive jdbc connect url N - --base-path 待同步的Hudi表存储路径 Y - --partitioned-by 分区键- N - --partition-value-extractor 分区类,需实现PartitionValueExtractor ,可以从HDFS路径中提取分区值 N SlashEncodedDayPartitionValueExtractor --assume-date-partitioning 以 yyyy/mm/dd进行分区从而支持向后兼容。 N false --use-pre-apache-input-format 使用com.uber.hoodie包下的InputFormat替换 org.apache.hudi包下的。除了从com.uber.hoodie迁移项目至org.apache.hudi外请勿使用。 N false --use-jdbc 使用Hive jdbc连接 N true --auto-create-database 自动创建Hive database N true --skip-ro-suffix 注册时跳过读取_ro后缀的读优化视图 N false --use-file-listing-from-metadata 从Hudi的元数据中获取文件列表 N false --verify-metadata-file-listing 根据文件系统验证Hudi元数据中的文件列表 N false --help、-h 查看帮助 N false --support-timestamp 将原始类型中'INT64'的TIMESTAMP_MICROS转换为Hive的timestamp N false --decode-partition 如果分区在写入过程中已编码,则解码分区值 N false --batch-sync-num 指定每批次同步hive的分区数 N 1000 Hive Sync时会判断表不存在时建外表并添加分区,表存在时对比表的schema是否存在差异,存在则替换,对比分区是否有新增,有则添加分区。 因此使用hive sync时有以下约束: 写入数据Schema只允许增加字段,不允许修改、删除字段。 分区目录只能新增,不会删除。 Overwrite覆写Hudi表不支持同步覆盖Hive表。 Hudi同步Hive表时,不支持使用timestamp类型作为分区列。 父主题: Hudi写操作
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全