华为云用户手册

  • 原因分析 问题1:可能原因是 MapReduce服务 异常。 问题2:可能原因如下: Spark的JobHistory服务异常。 日志太大,NodeManager在做日志汇聚的时候出现超时。 HDFS存放日志目录权限异常(默认/tmp/logs/用户名/logs)。 日志已被清理(spark的JobHistory默认存放7天的eventLog,配置项为spark.history.fs.cleaner.maxAge;MapReduce默认存放15天的任务日志,配置项为mapreduce.jobhistory.max-age-ms)。 如果Yarn页面上也找不到,可能是被Yarn清理了(默认存放10000个历史任务,配置项为yarn.resourcemanager.max-completed-applications)。
  • 处理步骤 问题1:确认MapReduce服务是否正常,如果异常,尝试重启服务。如果还是不能恢复,需要查看后台JobhistoryServer日志。 问题2:依次排查可能的情况: 查看Spark的JobHistory是否运行正常; 通过查看yarn的app详情页面,确认日志文件是否过大,如果日志汇聚失败,页面的“Log Aggregation Status:”应该显示为失败或者超时; 查看对应目录权限是否异常; 查看目录下是否有对应的appid文件(Spark的eventlog存放目录: MRS 3.x及以后版本的目录是hdfs://hacluster/spark2xJobHistory2x,MRS 3.x以前版本的目录是hdfs://hacluster/sparkJobHistory,任务运行日志存放目录是hdfs://hacluster/tmp/logs/用户名/logs); 查看appid和当前作业的id是否超过历史记录最大值。
  • 原因分析 Hive启用Ranger鉴权后,默认的Hive策略中有2个关于database的public组策略, 所有用户都属于public组,默认给public组配有default数据库的创表和所有其他数据库的create权限,因此默认所有的用户都有show databases和show tables的权限,如果不想让某些用户有show databases和show tables权限,可在Ranger WEBUI中删除该默认public组策略,并赋予需要查看的用户权限。
  • 原因分析 问题1:Spark提交任务默认不会加载kafka的相关包,所以需要在启动命令中增加--jars来指定对应kafka版本的jar包 问题2:连接Kafka无法使用Spark的认证信息,需要将相关的认证使用JVM的参数设置进去。 问题3:Spark默认使用当前客户端的认证信息提交任务,也可以使用代码login的方式。但是这两种认证方式都无法更新任务使用的Token,当提交的时候生成的Token信息过期以后就无法再使用,因此报错。解决办法是使用--keytab和--principal将keytab文件和对应用户带入任务中。
  • 处理步骤 问题1:启动命令中增加--jars来指定对应kafka版本的jar包,一般是在Spark客户端目录/jars/streamingClient(0.8版本Kafka)和Spark客户端目录/jars/streamingClient010(0.10版本Kafka)。 问题2:参考指导文档编辑并运行程序。 问题3:使用--keytab和--principal将keytab文件和对应用户带入任务中。如果此处的keytab文件和之前Kafka的jaas.conf中配置的是同一个,则Spark会报一个文件多次上传的问题。解决办法是复制一份keytab文件,使得--files和--keytab上传不同的文件。
  • 处理步骤 问题1: 重新kinit一个用户并修改相应的配置参数。 问题2: 查看hadoop相关的配置项是否正确,查看spark的conf目录下的core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml等配置文件是否存在问题。 问题3: 重新复制一个user.keytab,例如: cp user.keytab user2.keytab spark-submit --master yarn --files user.keytab --keytab user2.keytab ......
  • 处理步骤 登录报错的RegionServer节点,执行以下命令查看节点剩余内存: free -g 执行top命令查看节点内存使用情况。 根据top提示结束内存占用多的进程(内存占用多并且非MRS自身组件的进程),并重新启动HBase服务。 集群的Core节点除了MRS组件运行占用外,Yarn上的作业还会被分配到节点运行,占用节点内存。若是由于Yarn作业占用内存多导致组件无法正常启动时,建议扩容Core节点。
  • 处理步骤 登录Zookeeper客户端所在节点。 cd 客户端安装目录 source bigdata_env kinit 组件业务用户(未开启Kerberos认证集群跳过此步骤) 执行以下命令修改文件。 vim 客户端安装目录/zookeeper/conf/zoo.cfg 调大文件中参数“tickTime”,“syncLimit”的值。 例如调整“tickTime”为“3000”, “syncLimit”为“7”。 保存文件。
  • 原因分析 MapReduce任务提交时会将相关配置文件、jar包和-files参数后添加的文件都上传至HDFS的临时目录,方便Container启动后获取相应的文件。系统通过配置项“yarn.app.mapreduce.am.staging-dir”决定具体存放位置,默认值是“/tmp/hadoop-yarn/staging”。 正常运行的MapReduce任务会在Job结束以后就清理这些临时文件,但是当Job对应的Yarn任务异常退出时,这些临时文件不会被清理,长时间积攒导致该临时目录下的文件数量越来越多,占用存储空间越来越多。
  • 原因分析 RegionServer启动时节点剩余内存不足,导致无法启动实例。排查步骤如下: 登录Master节点,到“/var/log/Bigdata”查找HBase相关日志,HMaster的日志中报错“connect regionserver timeout ”。 登录到1中HMaster连接不上的RegionServer节点,到“/var/log/Bigdata”查找HBase相关日志,RegionServer报错“error=’Cannot allocate memory’(errno=12)”。 根据2报错判断由于RegionServer内存不足导致RegionServer启动失败。
  • 问题现象 新建了集群,在创建表时,报错如下: [Cloudera]ImpalaJDBCDriver ERROR processing query/statement. Error Code: 0, SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:HY000, errorMessage:AnalysisException: Table property 'kudu.master_addresses' is required when the impalad startup flag -kudu_master_hosts is not used.”
  • 原因分析 查询Core节点有大量文件的目录,发现大部分都是类似“blockmgr-033707b6-fbbb-45b4-8e3a-128c9bcfa4bf”的目录,里面存放了计算过程中产生的shuffle临时文件。 因为JD BCS erver启动了Spark的动态资源分配功能,已经将shuffle托管给NodeManager,NodeManager只会按照APP的运行周期来管理这些文件,并不会关注单个executor所在的container是否存在。因此,只有在APP结束的时候才会清理这些临时文件。任务运行时间较长时导致临时文件过多占用了大量磁盘空间。
  • 原因分析 当使用load导入数据到Hive表的时候,属于需要跨文件系统的情况(例如原数据在HDFS上,而Hive表数据存放在OBS上),并且文件长度大于阈值(默认32 MB),则会触发使用distcp的MapReduce任务来执行数据迁移操作。这个MapReduce任务配置直接从Spark任务配置里面提取,但是Spark任务的net.topology.node.switch.mapping.impl配置项不是hadoop的默认值,需要使用Spark的jar包,因此MapReduce会报类找不到。
  • 处理步骤 获取ZooKeeper的IP地址及端口信息,具体请参考如何获取ZooKeeper地址?。 以root用户登录Master节点。 初始化环境变量。 source /opt/client/bigdata_env 执行以下命令连接ZooKeeper。 zkCli.sh -server ZooKeeper所在节点的IP:端口 ZooKeeper所在节点的IP即为1中查到的结果,多个IP之间以逗号间隔。 使用ls /等常用的命令查看ZooKeeper上的信息。
  • 原因分析 查看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);
  • 原因分析 该问题的根因是NFS盘上的根目录权限不足,导致Flink程序启动后无法访问该目录。 MRS的Flink任务是在YARN运行,当集群未启用Kerberos认证时,在YARN上运行任务的用户为yarn_user。用户自定义的配置文件如果在任务启动之后使用,则文件以及文件的父目录(NFS上的文件所在的父目录,非集群节点上的软连接),必须允许yarn_user可以访问,否则程序中无法获取文件内容。当集群为启用Kerberos认证的集群时,则文件的权限必须允许提交程序的用户访问。
  • 针对不同的Topic访问场景 ,Kafka新旧API使用说明 场景一:访问设置了ACL的Topic 使用的API 用户属组 客户端参数 服务端参数 访问的端口 新API 用户需满足以下条件之一即可: 属于系统管理员组 属于kafkaadmin组 属于kafkasuperuser组 被授权的kafka组的用户 security.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) 旧API 不涉及 不涉及 不涉及 不涉及 场景二:访问未设置ACL的Topic 使用的API 用户属组 客户端参数 服务端参数 访问的端口 新API 用户需满足以下条件之一: 属于系统管理员组 属于kafkaadmin组 属于kafkasuperuser组 security.protocol=SASL_PLAINTEXT sasl.kerberos.service.name = kafka - sasl.port(默认21007) 用户属于kafka组 allow.everyone.if.no.acl.found配置为true sasl.port(默认21007) 用户需满足以下条件之一: 属于系统管理员组 属于kafkaadmin组 kafkasuperuser组用户 security.protocol=SASL_SSLsasl.kerberos.service.name = kafka ssl-enable配置为“true” sasl-ssl.port(默认21009) 用户属于kafka组 allow.everyone.if.no.acl.found配置为“true” ssl-enable配置为“true” sasl-ssl.port(默认21009) - security.protocol=PLAINTEXT allow.everyone.if.no.acl.found配置为“true” port(默认21005) - security.protocol=SSL allow.everyone.if.no.acl.found配置为“true” ssl-enable配置为“true” ssl.port(默认21008) 旧Producer - - allow.everyone.if.no.acl.found配置为“true” port(默认21005) 旧Consumer - - allow.everyone.if.no.acl.found配置为“true” ZooKeeper服务端口:clientPort(默认24002)
  • Kafka访问协议说明 Kafka当前支持四种协议类型的访问:PLAINTEXT、SSL、SASL_PLAINTEXT、SASL_SSL。 Kafka服务启动时,默认会启动PLAINTEXT和SASL_PLAINTEXT两种协议类型的访问监测。可通过设置Kafka服务配置参数“ssl.mode.enable”为“true”,来启动SSL和SASL_SSL两种协议类型。 下表是四种协议类型的简单说明: 协议类型 说明 支持的API 默认端口 PLAINTEXT 支持无认证的明文访问 新API和旧API 9092 SASL_PLAINTEXT 支持Kerberos认证的明文访问 新API 21007 SSL 支持无认证的SSL加密访问 新API 9093 SASL_SSL 支持Kerberos认证的SSL加密访问 新API 21009
  • Kafka API简单说明 新Producer API 指org.apache.kafka.clients.producer.KafkaProducer中定义的接口,在使用“kafka-console-producer.sh”时,默认使用此API。 旧Producer API 指kafka.producer.Producer中定义的接口,在使用“kafka-console-producer.sh”时,加“--old-producer”参数会调用此API。 新Consumer API 指org.apache.kafka.clients.consumer.KafkaConsumer中定义的接口,在使用“kafka-console-consumer.sh”时,加“--new-consumer”参数会调用此API。 旧Consumer API 指kafka.consumer.ConsumerConnector中定义的接口,在使用“kafka-console-consumer.sh”时,默认使用此API。 新Producer API和新Consumer API,在下文中统称为新API。
  • 解决办法 排查启动的MapReduce任务是否对应的HDFS文件个数很多,如果很多,减少文件数量,提前先合并小文件或者尝试使用combineInputFormat来减少任务读取的文件数量。 增大hadoop命令执行时的内存,该内存在客户端中设置,修改“客户端安装目录/HDFS/component_env”文件中“CLIENT_GC_OPTS”的“-Xmx”参数,将该参数的默认值改大,比如改为512m。然后执行source component_env命令,使修改的参数生效。
  • 问题背景与现象 使用Kafka过程中常常需要对特定Topic进行配置或者修改。 Topic级别可以修改参数列表: cleanup.policycompression.typedelete.retention.msfile.delete.delay.msflush.messagesflush.msindex.interval.bytesmax.message.bytesmin.cleanable.dirty.ratiomin.insync.replicaspreallocateretention.bytesretention.mssegment.bytessegment.index.bytessegment.jitter.mssegment.msunclean.leader.election.enable
  • 可能原因 客户端连接HiveServer时,HiveServer的地址是从ZooKeeper中自动获取,当ZooKeeper连接认证异常时,无法从ZooKeeper中获取正确的HiveServer地址。 在连接zookeeper认证时,需要客户端传入krb5.conf,principal,keytab等相关信息。认证失败有如下几种: user.keytab路径写错。 user.principal写错。 集群做过切换 域名 操作但客户端拼接url时使用旧的principal。 有防火墙相关设置,导致客户端本身无法通过kerberos认证,Kerberos需要开放的端口有21730(TCP)、21731(TCP/UDP)、21732(TCP/UDP)。
  • 解决方案 确保用户可以正常读取客户端节点相关路径下的user.keytab文件。 确保用户的user.principal与指定的keytab文件对应。 可通过klist -kt keytabpath/user.keytab查看。 如果集群有做过切换域名操作,需要保证url中使用的principal字段是新域名。 如默认为hive/hadoop.hadoop.com@HADOOP.COM,当集群有切换域名的操作时,该字段需要进行相关修改。如域名为abc.com时,则此处应填写hive/hadoop.abc.com@ABC.COM。 确保可以正常的认证连接HiveServer。 在客户端执行以下命令 source 客户端安装目录/bigdata_env kinit username 然后再使用客户端执行beeline,确保可以正常运行。
  • 解决方案 在select结果乱码时,在beeline中进行如下设置。 set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.encryption.arc4.ARC4BlockCodec; set hive.exec.compress.output=true; 使用块解压的方式先将表导入一个新表中。 insert overwrite table tbl_result select * from tbl_source; 再进行查询。 select * from tbl_result;
  • 原因分析 进入Yarn原生页面查看MapReduce任务的日志看到报错是无法识别到压缩方式导致错误,看文件后缀是gzip压缩,堆栈却报出是zlib方式。 因此怀疑此语句查询的表对应的HDFS上的文件有问题,Map日志中打印出了解析的对应的文件名,将其从HDFS上下载到本地,看到是gz结尾的文件,使用tar命令解压报错,格式不正确无法解压。使用file命令查看文件属性发现此文件来自于FAT系统的压缩而非UNIX。
  • 问题现象 安全集群中,HiveServer服务正常的情况下,通过jdbc接口连接HiveServer执行sql时报出ZooKeeper认证异常"The ZooKeeper client is AuthFailed",如下: 14/05/19 10:52:00 WARN utils.HAClientUtilDummyWatcher: The ZooKeeper client is AuthFailed 14/05/19 10:52:00 INFO utils.HiveHAClientUtil: Exception thrown while reading data from znode.The possible reason may be connectionless. This is recoverable. Retrying.. 14/05/19 10:52:16 WARN utils.HAClientUtilDummyWatcher: The ZooKeeper client is AuthFailed 14/05/19 10:52:32 WARN utils.HAClientUtilDummyWatcher: The ZooKeeper client is AuthFailed 14/05/19 10:52:32 ERROR st.BasicTestCase: Exception: Could not establish connection to active hiveserver java.sql.SQLException: Could not establish connection to active hiveserver 或者报出无法读取"Hiveserver2 configs from ZooKeeper",如下:
  • 解决办法 属于应用侧问题,解决办法有多种。只要保证表所指定存储格式和被导入数据格式是一致的,可以根据实际情况采用合适方法。 方法1: 可以使用具有Hive表操作权限的用户在建表时指定存储格式,例如: CREATE TABLE IF NOT EXISTS employees_info(name STRING,age INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; 指定被导入数据格式为TEXTFILE。 方法2: 被导入数据存储格式不能为TEXTFILE,而应为RCFile。
  • 问题背景与现象 Hive任务报错,提示执行用户没有HDFS目录权限: 2019-04-09 17:49:19,845 | ERROR | HiveServer2-Background-Pool: Thread-3160445 | Job Submission failed with exception 'org.apache.hadoop.security.AccessControlException(Permission denied: user=hive_quanxian, access=READ_EXECUTE, inode="/user/hive/warehouse/bigdata.db/gd_ga_wa_swryswjl":zhongao:hive:drwx------at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkAccessAcl(FSPermissionChecker.java:426)at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:329)at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkSubAccess(FSPermissionChecker.java:300)at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:241)at com.xxx.hadoop.adapter.hdfs.plugin.HWAccessControlEnforce.checkPermission(HWAccessControlEnforce.java:69)at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190)at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1910)at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1894)at org.apache.hadoop.hdfs.server.namenode.FSDirStatAndListingOp.getContentSummary(FSDirStatAndListingOp.java:135)at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getContentSummary(FSNamesystem.java:3983)at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getContentSummary(NameNodeRpcServer.java:1342)at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getContentSummary(ClientNamenodeProtocolServerSideTranslatorPB.java:925)at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:973)at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2260)at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2256)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:422)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1781)at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2254))'
  • 解决方案 通常不建议使用本地文件加载数据到hive表。 建议先将本地文件放入HDFS,然后从集群中加载数据。 Hive对load data local inpath命令有如下权限要求,请对照下述要求是否满足: 由于所有的命令都是发送到主HiveServer上去执行的,所以要求此文件在HiveServer节点上。 HiveServer进程是以操作系统上的omm用户启动的,所以要求omm用户对此文件有读权限,对此文件的目录有读、执行权限。 文件的owner需要为执行命令的用户。 当前用户需要对该文件有读、写权限。 要求文件的格式与表指定的存储格式相同。如创建表时指定stored as rcfile,但是文件格式为txt,则不符合要求。 文件名不能以下横线(_)或点(.)开头,以这些开头的文件会被忽略。
共100000条
提示

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