华为云用户手册

  • 原因分析 Spark运行的时候会将临时产生的shuffle文件放在executor的临时目录中,方便后面获取。 而当某个executor异常退出时,NodeManager会把这个executor所在的container临时目录删除,随后其他executor再来申请这个executor的shuffle结果就会报文件找不到。 因此,遇到这样的问题需要确认是否executor异常退出,可以根据spark任务页面的executors便签页查看是否有dead状态的executor,查看各个dead状态的executor日志,确认异常退出的原因(其中可能有部分executor退出原因就是因为shuffle文件找不到,需要找到最早异常退出的executor)。 常见的异常退出: executor发生OOM executor运行时出现多个task任务失败 executor所在节点被清理
  • 处理步骤 重启集群sssd进程。 以root用户执行service sssd restart命令重启sssd服务,执行ps -ef | grep sssd命令,查看sssd进程是否正常。 正常状态为存在/usr/sbin/sssd进程和三个子进程/usr/libexec/sssd/sssd_be、/usr/libexec/sssd/sssd_nss、/usr/libexec/sssd/sssd_pam。
  • 问题现象 创建表过程: CREATE TABLE wlg_test001 (start_time STRING,value INT); 报错: Error: org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Failed to grant permission on HDFSjava.lang.reflect.UndeclaredThrowableException); (state=,code=0)
  • 原因分析 查看MetaStore日志。 查看HDFS日志。 权限对比(test001为异常用户创建表,test002为正常用户创建表)。 drop表时报类似下面的错。 dataplan_modela_csbch2; Error: Error while compiling statement: FAILED: SemanticException Unable to fetch table dataplan_modela_csbch2. java.security.AccessControlException: Permission denied: user= CS B_csb_3f8_x48ssrbt, access=READ, inode="/user/hive/warehouse/hive_csb_csb_3f8_x48ssrbt_5lbi2edu.db/dataplan_modela_csbch2":spark:hive:drwx------ 根因分析。 创建集群时创建的默认用户使用了相同的uid,造成用户错乱。在大量创建用户的场景下,触发了该问题,导致在创建表时偶现Hive用户没有权限。
  • 处理步骤 以root用户分别登录Master节点。 打开文件“/opt/knox/bin/gateway.sh”,查找APP_MEM_OPTS,并设置该参数的值为:“-Xms3072m -Xmx4096m”。 登录Manager页面,在主机列表页面找到主Master节点的IP地址(即主机名称前带有实心五角星的节点),并登录该节点后台。 执行如下命令重启进程。 su - omm sh /opt/knox/bin/restart-knox.sh
  • 处理步骤 以root用户登录集群主Master节点。 修改“${BIGDATA_HOME}/om-server/om/inst/conf/oms-config.ini”和“${BIGDATA_HOME}/om-server/ OMS /workspace0/conf/oms-config.ini”配置文件,在“ntp_server_ip”参数值前添加“ntp.myhuaweicloud.com,” ... ntp_server_ip=ntp.myhuaweicloud.com,10.127.1.0 ... 以root用户登录集群备Master节点,执行2。 等待约2分钟,在主Master节点执行以下命令观察IP同步成功。 ntpq -np 例如执行后结果如下:
  • 处理步骤 重建索引。 su - omm gsql -p 20051 -U omm -W password -d hivemeta DROP INDEX PCS_STATS_IDX; CREATE INDEX PCS_STATS_IDX ON PART_COL_STATS(DB_NAME, TABLE_NAME, COLUMN_NAME, PARTITION_NAME); CREATE INDEX SDS_N50 ON SDS(CD_ID); 重新查看执行计划,发现语句已经可以索引查询,且5ms执行完成(原来是700ms)。重新执行hive表字段增加,已经可以添加成功。
  • 原因分析 MetaStore客户端连接超时, MRS 默认MetaStore客户端和服务端连接的超时时间是600s,在Manager页面调大“hive.metastore.client.socket.timeout”为“3600s”。 出现另一个报错: Error: org.apache.hive.service.cli.HiveSQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. java.net.SocketTimeoutException: Read timed out Metastore元数据JDBC连接超时,默认60ms。 调大javax.jdo.option.ConnectionURL中socketTimeout=60000,仍然产生最初的报错: Timeout when executing method: alter_table_with_environment_context;3600556ms exceeds 3600000ms 尝试调大hive.metastore.batch.retrieve.max、hive.metastore.batch.retrieve.table.partition.max、dbservice.database.max.connections等参数均未能解决。 怀疑是 GaussDB 的问题,因为增加字段会遍历每个分区执行getPartitionColumnStatistics和alterPartition。 使用omm用户执行gsql -p 20051 -U omm -W password -d hivemeta登录Hive元数据库。命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 执行select * from pg_locks;没有发现锁等待。 执行select * from pg_stat_activity;发现进程执行时间较长。 SELECT 'org.apache.hadoop.hive.metastore.model.MPartitionColumnStatistics'AS NUCLEUS_TYPE,A0.AVG_COL_LEN,A0."COLUMN_NAME",A0.COLUMN_TYPE,A0.DB_NAME,A0.BIG_DECIMAL_HIGH_VALUE,A0.BIG_DECIMAL_LOW_VALUE,A0.DOUBLE_HIGH_VALUE,A0.DOUBLE_LOW_VALUE,A0.LAST_ANALYZED,A0.LONG_HIGH_VALUE,A0.LONG_LOW_VALUE,A0.MAX_COL_LEN,A0.NUM_DISTIN CTS ,A0.NUM_FALSES,A0.NUM_NULLS,A0.NUM_TRUES,A0.PARTITION_NAME,A0."TABLE_NAME",A0.CS_ID,A0.PARTITION_NAMEAS NUCORDER0 FROM PART_COL_STATS A0 WHERE A0."TABLE_NAME" = '$1' ANDA0.DB_NAME = '$2' AND A0.PARTITION_NAME = '$3' AND((((((A0."COLUMN_NAME" = '$4') OR (A0."COLUMN_NAME" ='$5')) OR (A0."COLUMN_NAME" = '$6')) OR (A0."COLUMN_NAME" ='$7')) OR (A0."COLUMN_NAME" = '$8')) OR (A0."COLUMN_NAME" ='$9')) ORDER BY NUCORDER0; 执行gs_guc reload -c log_min_duration_statement=100 -D /srv/BigData/dbdata_service/data/开启SQL录制,发现8中语句执行时长700ms,而且因为有10000+分区,会触发执行10000+次命令。 在SQL前加explain (analyze,verbose,timing,costs,buffers)分析执行计划,发现执行时需要全表扫描。 查看索引,发现不满足最左匹配原则。
  • 问题现象 在MRS Hive的beeline中执行insert into插入语句时系统报以下错误: Mapping run in Tez on Hive transactional table fails when data volume is high with error: "org.apache.hadoop.hive.ql.lockmgr.LockException Reason: Transaction... already aborted, Hive SQL state [42000]."
  • 处理步骤 可以在beeline上设置配置参数进行解决。 设置以下属性以优化性能(建议在集群级别进行更改) 设置hive.auto.convert.sortmerge.join = true 设置hive.optimize.bucketmapjoin = true 设置hive.optimize.bucketmapjoin.sortedmerge = true 更改以下内容以调整Tez的资源。 设置hive.tez.container.size = {与YARN容器相同的大小} 将hive.tez.container.size设置为与YARN容器大小“yarn.scheduler.minimum-allocation-mb”相同或更小的值(例如设置为二分之一或四分之一的值),但不要超过“yarn.scheduler.maximum-allocation-mb”参数值。
  • 原因分析 MRS集群开启了Kerberos认证但是无法提交作业,所以首先检查权限配置问题,检查发现未正确配置“/opt/client/Flink/flink/conf/flink-conf.yaml”中的参数。 图1 flink-conf.yaml配置 修改并刷新配置后,重新提交作业出现作业可以提交但报“log4j:ERROR setFile(null,true) call failed”的错误。 图2 log4j报错 查看log4j发现用户将“log4j.properties”文件改成了“log4g-cli.properties”(“log4j.properties”的名字是固定的不可随意修改)导致报错。 图3 查看log4j 修改后可以正常提交作业。 图4 提交作业正常
  • 处理步骤 判断用户是在集群外还是集群内使用客户端提交作业。 若在集群内使用客户端,切换到omm用户提交作业。 若在集群外使用客户端,则要使用root用户提交作业。 检查“flink-conf.yaml”文件各参数是否配置正确。 对于开启Kerberos认证的集群配置项包括Kerberos的keytab、principal等。 从KDC服务器上下载用户keytab,并将keytab放到Flink客户端所在主机的某个文件夹下(例如/home/flinkuser/keytab)。 在“${FLINK_HOME}/conf/flink-conf.yaml”上配置: keytab路径(注意配置参数前面有空格): security.kerberos.login.keytab: /home/flinkuser/keytab/uer.keytab principal名(即开发用户名): security.kerberos.login.principal:flinkuser 重新正确提交作业./flink run /opt/client/Flink/flink/examples/streaming/WordCount.jar,验证是否可以提交作业。 若可以提交作业则说明权限认证没有问题,就可以去检查其他错误,本例中是修改了log4j.properties的名称,还原后可以正常提交作业。 若提交作业失败,请提交工单进行处理。
  • 处理步骤 分别登录主、备Master节点。 执行cd /srv/BigData/命令进入到备份文件所在目录。 执行unlink LocalBackup命令删除LocalBackup软连接。 执行mkdir -p LocalBackup命令创建LocalBackup目录。 执行chown -R omm:wheel LocalBackup命令修改文件所属用户、群组。 执行chmod 700 LocalBackup命令修改文件读写权限。 登录MRS Manager页面重新执行周期备份。
  • 原因分析 查看HiveServer日志,在对应时间点,有如下的报错信息。 图2 HiveServer日志 在如上报错信息中未发现重要信息,但从堆栈中发现metadata字样,怀疑报错是和MetaStore有关。 图3 堆栈中metadata字样 查看MetaStore日志,发现如下报错。 图4 MetaStore日志 查看如上错误的上下文,确定是本次执行SQL的报错,在报错信息里面发现如下内容: Caused by: org.postgresql.util.PSQLException: ERROR: value too long for type character varying(4000) 确认是该条SQL对表的操作,所有列的字节长度超过4000的限制,导致SQL执行失败,需要修改该限制。
  • 处理步骤 以root用户登录集群任意一个Master节点,并执行su - omm命令切换到omm用户。 执行如下命令登录数据库。命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 gsql -p 20051 -d hivemeta -U username -W password 执行如下命令修改限制。 alter table PARTITION_PA RAM S alter column PARAM_VALUE type varchar(6000);
  • 处理步骤 在使用AK/SK认证方式调用接口前,请参见表1收集对应信息,详细的签名方法和SDK使用方法请参见API签名指南。 在构造API请求前,需要获取以下信息,包括组成请求URL的Endpoint和URI,用于签名和认证的AK/SK,用于区分租户的项目ID。 表1 信息收集项 Endpoint 地区与终端节点,即云服务在不同Region有不同的访问 域名 。 获取方式请参考终端节点及区域。 Project_Id 项目ID,在大多数API接口调用时需要配置在uri中,用以识别不同的项目。 AK/SK 访问密钥对,包含密钥ID与密钥。AK/SK用于对请求内容进行签名。 URI API接口的调用路径及参数。 请参考各云服务的详细接口章节获取,MRS的接口请参考API概览。 X-Domain-Id 账号ID,用途: Token认证方式下 获取Token 。 AK/SK认证方式下,全局服务的接口调用,需在请求消息头中配置X-Domain-Id。 X-Project-Id 子项目ID,在多项目场景中使用。如果云服务资源创建在子项目中,AK/SK认证方式下,操作该资源的接口调用需要在请求消息头中携带X-Project-Id。 表1中参数的获取方式请参见API签名指南。
  • 原因分析 修改“$Flink_HOME/conf”目录下的“log4j.properties”文件,控制的是JobManager和TaskManager的算子内的日志输出,输出的日志会打印到对应的yarn contain中,可以在Yarn WebUI查看对应日志。 MRS 3.1.0及之后版本的Flink 1.12.0版本开始默认的日志框架是log4j2,配置的方式跟之前log4j的方式有区别,使用如log4j日志规则不会生效。
  • 处理步骤 检查ZooKeeper下面是否有目标目录和注册的信息 以root用户登录任意一个Master节点并初始化环境变量。 source /opt/client/bigdata_env 执行zkCli.sh -server 'ZooKeeper实例IP地址:ZooKeeper连接端口'命令登录ZooKeeper。 ZooKeeper连接端口通常为2181,可通过查看ZooKeeper服务配置参数“clientPort”获取。 执行ls /thriftserver查看是否有“active_thriftserver”目录。 如果有active_thriftserver目录,执行get /thriftserver/active_thriftserver查看该目录下是否有注册的配置信息。 如果有注册的配置信息,联系华为云支持人员处理。 如果没有注册的配置信息,执行4 如果没有active_thriftserver目录,执行4。 登录Manager界面,查看Spark的JD BCS erver实例的主备状态是否未知。 是,执行5。 否,联系运维人员处理。 重启两个JDBCServer实例,查看主备实例状态恢复正常且zk下面有了目标目录和数据,作业即可恢复正常。若实例状态没有恢复请联系华为云支持人员处理。
  • 原因分析 当一个block size大于2G时,hdfs在seek的时候会出现读取异常,持续频繁写入regionserver时出现了full gc,且时间比较久,导致hmaster与regionserver之间的心跳异常,然后hmaster把regionserver标记为dead状态,强制重启了Regionserver,重启后触发servercrash机制开始回滚wal日志。现在这个splitwal的文件已经达到将近2.1G,且其仅有一个block块,导致hdfs seek异常,引起splitwal失败,regionserver检测到当前这个wal日志还需要split,又会触发splitwal日志的机制进行回滚,就这样在split与split失败之间不停循环,导致无法上线该regionserver节点上的region,最后出现查询该RS上某一个region时会报region not online的异常。
  • 问题现象 使用MRS 1.8集群的Hive 1.2.1通过Hive的JDBC接口连接MRS集群成功,但是使用MRS 1.9.0集群的Hive 2.3.2,通过Hive的JDBC接口连接MRS集群进行计算任务报错。 报错信息如下: Caused by: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hiveserver2
  • 处理步骤 以root用户登录Master2节点。 执行find / -name 'mapred-site.xml'命令获取mapred-site.xml文件所在位置。 HiveServer对应路径为“/opt/Bigdata/集群版本/1_13_HiveServer/etc/mapred-site.xml”。 WebHCat对应路径为“/opt/Bigdata/集群版本/1_13_WebHCat/etc/mapred-site.xml”。 确认mapred-site.xml文件是否有异常,该案例中该配置文件内容为空导致解析失败。 修复mapred-site.xml文件,将Master1节点上对应目录下的配置文件用scp命令拷贝到Master2节点对应目录替换原文件。 执行chown omm:wheel mapred-site.xml命令更改所属组和用户。 在Manager界面重启故障的HiveServer和WebHCat进程,恢复正常。
  • 处理步骤 获取ZooKeeper的IP地址及端口信息,具体请参考如何获取ZooKeeper地址?。 以root用户登录Master节点。 初始化环境变量。 source /opt/client/bigdata_env 执行以下命令连接ZooKeeper。 zkCli.sh -server ZooKeeper所在节点的IP:端口 ZooKeeper所在节点的IP即为1中查到的结果,多个IP之间以逗号间隔。 使用ls /等常用的命令查看ZooKeeper上的信息。
  • 问题现象 普通集群在Core节点新建用户安装使用客户端报错如下: 2020-03-14 19:16:17,166 WARN shortcircuit.DomainSocketFactory: error creating DomainSocket java.net.ConnectException: connect(2) error: Permission denied when trying to connect to '/var/run/MRS-HDFS/dn_socket' at org.apache.hadoop.net.unix.DomainSocket.connect0(Native Method) at org.apache.hadoop.net.unix.DomainSocket.connect(DomainSocket.java:256) at org.apache.hadoop.hdfs.shortcircuit.DomainSocketFactory.createSocket(DomainSocketFactory.java:168) at org.apache.hadoop.hdfs.client.impl.BlockReaderFactory.nextDomainPeer(BlockReaderFactory.java:799) ...
  • 原因分析 使用命令lsof |grep deleted可以查询到此目录下有大量log文件处于deleted状态。 出现此问题的一种情况是长时间运行某些Spark任务,任务中的一些Container一直运行,并且持续产生日志;Spark的executor在打印日志的时候使用了log4j的日志滚动功能,将日志输出到stdout文件下;而Container同时也会监控这个文件,导致此文件被两个进程同时监控。当其中一个进程按照配置滚动的时候,删除了最早的日志文件,但是另一个进程依旧占用此文件句柄,从而产生了deleted状态的文件。
  • 解决办法 在初始化建立Kafka消费者实例时,设置此配置项“max.partition.fetch.bytes”的值。 例如,参考本例,可以将此配置项设置为“5252880”: ...... // 安全协议类型 props.put(securityProtocol, kafkaProc.getValues(securityProtocol, "SASL_PLAINTEXT")); // 服务名 props.put(saslKerberosServiceName, "kafka"); props.put("max.partition.fetch.bytes","5252880"); ......
  • 问题背景与现象 用户在开发一个Kafka应用,作为一个生产者调用新接口(org.apache.kafka.clients.producer.*)往Kafka写数据,单条记录大小为1100055,超过了kafka配置文件server.properties中message.max.bytes=1000012。用户修改了Kafka服务配置中message.max.bytes大小为5242880,同时也将replica.fetch.max.bytes大小修改为5242880后,仍然无法成功。 报异常如下:
  • 解决办法 在初始化Kafka生产者实例时,设置此配置项“max.request.size ”的值。 例如,参考本例,可以将此配置项设置为“5252880”: // 协议类型:当前支持配置为SASL_PLAINTEXT或者PLAINTEXT props.put(securityProtocol, kafkaProc.getValues(securityProtocol, "SASL_PLAINTEXT")); // 服务名 props.put(saslKerberosServiceName, "kafka"); props.put("max.request.size", "5252880"); .......
  • 原因分析 用户反馈已经排查了执行此命令的账号权限,此账号具有操作Kafka组件的最高权限,不应该仍然会有权限不足的问题。 经确认执行命令有问题,访问ZooKeeper上所存放的Kafka信息,其路径(Znode)应该加上/kafka,完整的查询命令应该是: root@Slave2bin]#./kafka-topics.sh --describe --topic example-metric1 --zookeeper 192.168.147.231:2181,192.168.147.228:2181,192.168.147.227:2181/kafka
  • 配置影响 请根据业务场景对可靠性和性能要求进行评估,采用合理参数配置。 对于价值数据,两种场景下建议Kafka数据目录磁盘配置raid1或者raid5,从而提高单个磁盘故障情况下数据可靠性。 不同Producer API对应的acks参数名称不同 新Producer API 指org.apache.kafka.clients.producer.KafkaProducer中定义的接口,acks配置为acks。 旧Producer API 指kafka.producer.Producer中定义的接口,acks配置名称为request.required.acks。 参数配置项均为Topic级别可修改的参数,默认采用服务级配置。可针对不同Topic可靠性要求对Topic进行单独配置。 例如,配置Topic名称为test的可靠性参数: 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,建议在变更窗口做服务级配置修改。
  • 处理步骤 以客户端安装用户,登录安装Kafka客户端的节点。 切换到Kafka客户端安装目录,例如“/opt/client”。 cd /opt/client 切换到Kafka客户端配置目录。 cd Kafka/kafka/config 编辑tools-log4j.properties文件,将WARN修改为INFO,并保存。 切换到Kafka客户端安装目录,例如“/opt/client”。 cd /opt/client 执行以下命令,配置环境变量。 source bigdata_env 执行以下命令,进行用户认证。(普通集群跳过此步骤) kinit 组件业务用户 执行以下命令,切换到Kafka客户端安装目录。 cd Kafka/kafka/bin 执行以下命令,获取topic信息,在控制台可见日志打印。 kafka-topics.sh --list --zookeeper 10.5.144.2:2181/kafka [2017-02-17 14:34:27,005] INFO JAAS File name: /opt/client/Kafka/./kafka/config/jaas.conf (org.I0Itec.zkclient.ZkClient) [2017-02-17 14:34:27,007] INFO Starting ZkClient event thread. (org.I0Itec.zkclient.ZkEventThread) ... Test __consumer_offsets counter test test2 test3 test4
共100000条