华为云用户手册

  • 问题现象 在Manager页面上查看到WebHCat实例的健康状态为“故障”,并上报“ALM-12007 进程故障”告警,该告警的服务名称为“Hive”,实例名称为“WebHCat”。且重启Hive服务报错。 查看WebCat实例的日志“/var/log/Bigdata/hive/webhcat/webhcat.log”报错“Service not found in Kerberos database”和“Address already in use”。
  • 原因分析 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启动失败。
  • 处理步骤 登录报错的RegionServer节点,执行以下命令查看节点剩余内存: free -g 执行top命令查看节点内存使用情况。 根据top提示结束内存占用多的进程(内存占用多并且非 MRS 自身组件的进程),并重新启动HBase服务。 集群的Core节点除了MRS组件运行占用外,Yarn上的作业还会被分配到节点运行,占用节点内存。若是由于Yarn作业占用内存多导致组件无法正常启动时,建议扩容Core节点。
  • 用户问题 在Hive客户端查询JSON数据,JSON表中有破损数据导致查询异常: 在Hive客户端上使用默认开源的JSON序列化建表语句创建表: create external table if not exists test ( name string ) row format serde 'org.apache.hive.hcatalog.data.JsonSerDe' stored as textfile location 'hdfs://hacluster/user/hive/warehouse/database/table/jsondata'; 查询表出现异常。 该章节内容适用于MRS 1.9.2之后版本。
  • 处理步骤 下载json-serde-1.3.8-jar-with-dependencies.jar到本地,并将该Jar上传到所有的HiveServer所在节点。 以客户端安装用户,登录1上传了Jar包并且安装了Hive和HDFS客户端的节点。 执行以下命令认证用户。 cd 客户端安装目录 source bigdata_env kinit 具有Hive管理员权限的用户(未开启Kerberos认证的集群跳过此操作) 执行以下命令在HDFS上创建Jar包存放目录。 hdfs dfs -mkdir Jar包存放在hdfs中的路径 执行以下命令将2的Jar上传至HDFS中。 hdfs dfs -put Jar包存放路径 Jar包存放在hdfs中的路径 执行以下命令让Hive在执行命令行任务时加载指定Jar包。 beeline set role admin;(未开启Kerberos认证的集群跳过此操作) add jar Jar包存放在hdfs中的路径; 执行以下命令重新创建表: create external table if not exists test ( name string ) row format serde 'org.openx.data.jsonserde.JsonSerDe' stored as textfile location 'hdfs://hacluster/user/hive/warehouse/database/table/jsondata'; 执行以下命令修改表属性忽略破损的JSON数据: ALTER TABLE test SET SERDEPROPERTIES( "ignore.malformed.json" = "true"); 设置该属性后,查询表时若表中有破损的JSON数据默认显示为“NULL”。 执行以下命令查询表数据: select * from test; 数据查询成功则表示已忽略破损的JSON数据,其中,破损的JSON数据显示为“NULL”:
  • 处理步骤 使用root用户登录安装HBase客户端的节点。 在“HBase客户端安装目录/HBase/component_env”文件中添加如下信息: export HBASE_ROOT_ LOG GER=INFO,RFA 把日志输出到日志文件中,后期如果使用hbase org.apache.hadoop.hbase.mapreduce.RowCounter等命令,执行结果请在日志文件“HBase客户端安装目录/HBase/hbase/logs/hbase.log”中查看。 切换到HBase客户端安装目录,执行以下命令使配置生效。 cd HBase客户端安装目录 source HBase/component_env
  • 原因分析 HBase客户端中默认日志打印设置为“INFO,console”,所以在使用期间会有INFO日志输出到控制台,影响HBase shell窗口的显示。 HBase客户端命令繁多,例如:hbase shell、hbase hbck、hbase org.apache.hadoop.hbase.mapreduce.RowCounter等,且后续还会增加。部分命令的输出为INFO打印,如果直接把INFO关闭会导致部分命令输出结果丢失。例如:RowCounter输出结果为INFO类型:
  • 问题背景与现象 在Yarn使用Capacity调度器时,单击Yarn WebUI页面的队列名称时,系统上报“ERROR 500”的错误。 HTTP ERROR 500 javax.servlet.ServletException: javax.servlet.ServletException: java.lang.IllegalArgu mentException: Illegal character in queryat index 81: https://XXX:20026/Yarn/ResourceManager/21/cluster/scheduler? openQueues= ^default$
  • 用户问题 用户在Beeline命令行执行insert into命令报错: INFO : Concurrency mode is disabled, not creating a lock manager Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. org.apache.hadoop.yarn.exceptions.YarnException: Failed to submit application_xxx to YARN : User xxx cannot submit application application_xxx to queue root.default. ACL check failed. (state=08S01,code=1)
  • 处理步骤 使用root用户登录安装客户端的节点,切换到客户端安装目录,查看是否安装了HBase客户端。 是,执行2。 否,下载并安装HBase客户端,详细操作请参考安装客户端章节。 执行以下命令配置环境变量。 source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建HBase表的权限。如果当前集群未启用Kerberos认证,则无需执行此命令。 kinit MRS集群用户 执行HBase组件的客户端命令。 hbase shell
  • 问题背景与现象 使用Phoenix创建HBase表后,使用命令向索引表中加载数据报错: MRS 2.x及之前版本:Mutable secondary indexes must have the hbase.regionserver.wal.codec property set to org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec in the hbase-sites.xml of every region server. tableName=MY_INDEX (state=42Y88,code=1029) MRS 3.x及之后版本:Exception in thread "main" java.io.IOException: Retry attempted 10 times without completing, bailing out
  • 处理步骤 采用Hcatalog的方式,参数指定对应的Hive库和表,需要修改SQL语句指定到具体字段(需要修改脚本)。命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 原来的脚本: sqoop import --connect 'jdbc:mysql://10.160.5.65/huawei_pos_online_00?zeroDateTimeBehavior=convertToNull' --username root --password xxx --split-by id --num-mappers 2 --query 'select * from pos_remark where 1=1 and $CONDITIONS' --target-dir obs://za-test/dev/huawei_pos_online_00/pos_remark --delete-target-dir --null-string '\\N‘ --null-non-string '\\N‘ --as-parquetfile 修改后的脚本(可以执行成功): sqoop import --connect 'jdbc:mysql://10.160.5.65/huawei_pos_online_00?zeroDateTimeBehavior=convertToNull' --username root --password xxx --split-by id --num-mappers 2 --query 'select id,pos_case_id,pos_transaction_id,remark,update_time,update_user,is_deleted,creator,modifier,gmt_created,gmt_modified,update_user_id,tenant_code from pos_remark where 1=1 and $CONDITIONS‘ --hcatalog-database huawei_dev --hcatalog-table ods_pos_remark
  • 处理步骤 用户在“pg_hba.conf”文件配置白名单。 驱动重复,集群自带,将其余驱动清除,所有Core节点上的gsjdbc4 jar包去掉,在sqoop/lib目录下添加PgSQL Jar包即可。 mv /opt/Bigdata/ FusionInsight _HD_*/1_*_NodeManager/install/hadoop/share/hadoop/common/lib/gsjdbc4-*.jar /tmp
  • 原因分析 连接PgSQL MD5认证不通过,需要在“pg_hba.conf”中配置白名单。 在执行sqoop import命令时,会启动MapReduce任务,由于MRS Hadoop安装目下(例如“/opt/Bigdata/FusionInsight_HD_*/1_*_NodeManager/install/hadoop/share/hadoop/common/lib”)自带了PgSQL驱动包“gsjdbc4-*.jar”,与开源PgSQL服务不兼容导致报错。
  • 处理步骤 确认分隔符、表字段的格式无问题,在sqoop语句中添加--columns绑定对应字段。 sqoop export --connect jdbc:mysql://数据库IP地址:端口号/数据库名 --username 数据库用户名 --password 密码 --table 表名 --columns 列字段(多个列用英文逗号分开) -export-dir 导出地址 --fields-terminated-by 分隔符 --input-null-string '\\N' --input-null-non-string '\\N' -m 1 命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 样例: sqoop export --connect jdbc:mysql://192.168.0.6:3306/lidengpeng --username root --password 用户密码 --table hkatg_agr_prod_city_summ --columns year,city_name,city_code,prod_code,prod_name,prod_type,sown_area,area_unit,yield_wegt,yield_unit,total_wegt,total_wegt_unit,data_sorc_code,etl_time -export-dir hdfs://hacluster/user/hive/warehouse/dm_agr_prod_city_summ02 --fields-terminated-by ',' --input-null-string '\\N' --input-null-non-string '\\N' -m 1
  • 处理总结 将sqoop的lib下htrace-core-3.1.0-incubating.jar和hbase的lib下的metrics-core-2.2.0.jar,复制到“/opt/Bigdata/MRS_1.9.2/install/FusionInsight-Hadoop-2.8.3/hadoop/share/hadoop/common/lib/”下。 修改jar包的文件权限为777和omm:ficommon。 所有节点均采取以上操作,重新运行sqoop任务即可。
  • 处理步骤 进入Sqoop的安装目录下查找文件。 进入Sqoop节点的“/opt/Bigdata/MRS_1.9.2/install/FusionInsight-Sqoop-1.99.7/FusionInsight-Sqoop-1.99.7/server/lib”目录下,进行grep查找。 进入Yarn WebUI界面,查看运行的任务的报错具体信息。 将java.class.path复制出来,搜索htrace-core。 复制jar包到如下位置。 cp /opt/Bigdata/MRS_1.9.2/install/FusionInsight-Sqoop-1.99.7/FusionInsight-Sqoop-1.99.7/server/lib/htrace-core-3.1.0-incubating.jar /opt/Bigdata/MRS_1.9.2/install/FusionInsight-Hadoop-2.8.3/hadoop/share/hadoop/common/lib/ 修改权限。 chmod 777 htrace-core-3.1.0-incubating.jar (真实复制的jar包) chown omm:ficommon htrace-core-3.1.0-incubating.jar (真实复制的jar包) 查看hosts文件,对其他所有节点进行同样的复制jar包操作。 重新运行sqoop任务,产生报错如下: 去HBase的安装目录下查找文件。 进入HBase的lib目录下,进行grep查找。 继续复制jar包。 cp /opt/Bigdata/MRS_1.9.2/install/FusionInsight-HBase-1.3.1/hbase/lib/metrics-core-2.2.0.jar /opt/Bigdata/MRS_1.9.2/install/FusionInsight-Hadoop-2.8.3/hadoop/share/hadoop/common/lib/ 修改文件权限。 chmod 777 metrics-core-2.2.0.jar (真实复制的jar包) chown omm:ficommon metrics-core-2.2.0.jar(真实复制的jar包) 查看hosts文件,对其他所有节点进行同样的复制jar包操作。 继续运行sqoop任务,成功。
  • 处理步骤 Sqoop客户端安装完成之后,没有直接引入HBase相关的依赖jar包,需要通过手动导入指定低版本的HBase相关依赖jar包。解决方法步骤如下: 确认Sqoop客户端和HBase客户端是否在同一个路径下。 是,执行2。 否,删除原有的Sqoop和HBase客户端文件,从FusionInsight Manager上下载完整的客户端安装在同一路径下。执行2。 以root用户登录Sqoop客户端安装节点。 下载以下HBase 1.6.0版本的jar包上传到Sqoop客户端的“lib”目录下。 hbase-client-1.6.0.jar hbase-common-1.6.0.jar hbase-protocol-1.6.0.jar hbase-server-1.6.0.jar 上传包之后,修改包的权限,可以设置为755,具体执行命令为: chmod 755 包名称 在客户端目录下执行以下命令刷新Sqoop客户端: source bigdata_env 重新执行sqoop命令
  • 处理步骤 在集群上安装客户端,查看客户端“sqoop/lib”目录下是否有MySQL驱动包。 在客户端目录下加载环境变量。 source bigdata_env 执行Kerberos用户认证。 如果集群已启用Kerberos认证,执行以下命令认证具有操作权限的用户,否则跳过此步骤。 kinit MRS集群用户 连接数据库。命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 sqoop list-databases --connect jdbc:mysql://数据库IP地址:3306/ --username 数据库登录用户名 --password 密码 上图所示则代表sqoop连接MySQL成功。
  • 处理步骤 使用root用户登录Impala所在节点,执行如下命令,确认当前系统上安装的Python版本: python --version 执行命令yum install make,查看yum是否可用。 如果yum install报如下错误,说明yum设置有问题,执行3。 如果没有报错,执行4。 执行命令cat /etc/yum.repos.d/EulerOS-base.repo,查看yum源和系统版本信息不匹配是否匹配,如果不匹配则修改,如下所示: 修改前: 修改后: 执行如下命令,查看yum源上python2开头的软件。 yum list python2* 执行如下命令,安装Python2。 yum install python2 因为当前系统上已安装Python3,所有直接安装Python2会有上面的冲突提示。 可以选择--allowerasing或--skip-broken安装,例如: yum install python2 --skip-broken 安装完成后,会自动将Python版本修改为Python2,如下所示: 如果Python2安装成功,但是显示的Python版本不对,需要执行以下命令手动给“/usr/bin/python2”创建软链接“/usr/bin/python”。 ln -s /usr/bin/python2 /usr/bin/python 验证Impala客户端是否可用。
  • 问题现象 新建了集群,在创建表时,报错如下: [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.”
  • 原因分析 Hive启用Ranger鉴权后,默认的Hive策略中有2个关于database的public组策略, 所有用户都属于public组,默认给public组配有default数据库的创表和所有其他数据库的create权限,因此默认所有的用户都有show databases和show tables的权限,如果不想让某些用户有show databases和show tables权限,可在Ranger WEBUI中删除该默认public组策略,并赋予需要查看的用户权限。
  • 处理步骤 登录Ranger WebUI界面。 在“Service Manager”区域内,单击Hive组件名称,进入Hive组件安全访问策略列表页面。 分别单击“all - database”和“default database tables columns”策略所在行的按钮。 删除“public”组策略。 图1 all - database策略 图2 default database tables columns策略 在Hive组件安全访问策略列表页面,单击“Add New Policy”为相关用户或者用户组添加资源访问策略,具体请参考配置组件权限策略。
  • 原因分析 MapReduce任务提交时会将相关配置文件、jar包和-files参数后添加的文件都上传至HDFS的临时目录,方便Container启动后获取相应的文件。系统通过配置项“yarn.app.mapreduce.am.staging-dir”决定具体存放位置,默认值是“/tmp/hadoop-yarn/staging”。 正常运行的MapReduce任务会在Job结束以后就清理这些临时文件,但是当Job对应的Yarn任务异常退出时,这些临时文件不会被清理,长时间积攒导致该临时目录下的文件数量越来越多,占用存储空间越来越多。
  • 处理步骤 使用MRS集群自带的Hive for Spark包: hive-beeline-1.2.1.spark_2.2.1-mrs-x.x.x.jar hive-cli-1.2.1.spark_2.2.1-mrs-x.x.x.jar hive-common-1.2.1.spark_2.2.1-mrs-x.x.x.jar hive-exec-1.2.1.spark_2.2.1-mrs-x.x.x.jar hive-jdbc-1.2.1.spark_2.2.1-mrs-x.x.x.jar hive-metastore-1.2.1.spark_2.2.1-mrs-x.x.x.jar 华为云Maven库请参考指导通过开源镜像站获取样例工程。
  • 解决办法 登录HDFS的WebUI页面,进入DataNode的JMX页面。 在HDFS原生界面,选择Datanodes页面。 找到对应的DataNode节点,单击Http Address地址进入DataNode详情。 将url的“datanode.html”改为“jmx”就能获取到DataNode的JMX信息。 搜索“XceiverCount”指标,当该指标的值*Block块的大小超过DataNode磁盘的容量,就说明预约写Block的磁盘空间不足。 发生该问题,通常有以下两种方法来解决: 方法一:降低业务的并发度。 方法二:减少业务写文件的数目,将多个文件合并成一个文件来写。
  • 原因分析 HDFS写文件的预约机制:无论文件是10 MB还是1 GB,开始写的每个块都会被预约128 MB。如果需要写入一个10 MB的文件,HDFS会预约一个块来写,当文件写完后,这个块只占实际大小10 MB,释放多余预约的118 MB空间。如果需要写入一个1 GB的文件,HDFS还是会预约一个块来写,这个块写完后再开启下一个块,文件写完后,实际占用1 GB磁盘,释放多余预约的空间。 该异常通常是因为业务写文件的并发量太高,预约写Block的磁盘空间不足,导致写文件失败。
  • 问题背景与现象 用户运行作业时写文件到HDFS,偶现写文件失败的情况。 操作日志如下: 105 | INFO | IPC Server handler 23 on 25000 | IPC Server handler 23 on 25000, call org.apache.hadoop.hdfs.protocol.ClientProtocol.addBlock from 192.168.1.96:47728 Call#1461167 Retry#0 | Server.java:2278 java.io.IOException: File /hive/warehouse/000000_0.835bf64f-4103 could only be replicated to 0 nodes instead of minReplication (=1). There are 3 datanode(s) running and 3 node(s) are excluded in this operation.
  • 原因分析 问题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是否超过历史记录最大值。
共100000条