排查yarn详细日志
yarn logs -applicationId application_1590551653017_0033
准备数据
准备hive表
Load hive table 操作
创建Model和Cube
Cube Build构建
Build操作
问题列表
基于MR Build Cube六大步骤,第一个大步骤“Create Intermediate Flat Hive Table”时就报错了。
第一个问题
bash: hive: command not found
解决方案:
修改java类
kylin-core-common/src/main/java/org/apache/kylin/common/util/HiveCmdBuilder.java
添加一行
buf.append("source /etc/profile \n");
第二个问题
报如下错误:
Permission denied
解决方案:
su hdfs
hadoop fs -chown -R root:supergroup /tmp/hadoop-yarn
要切换到hdfs用户下,才能给root用户赋权。
权限问题二
预先在hdfs上创建kylin的工作目录。
工作目录在哪里配?
在hadoop环境上,用hdfs用户创建,并将权限修改为root。
若不创建kylin在hdfs上的 目录,会报如下权限问题。因为当前环境root不是hdfs环境的超级管理员,没有创建hdfs目录的权限。
Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
因为kylin要在hdfs上创建目录,存放数据。若有权限比较复杂的情况,最好预先创建好。否则就会在根目录“/”下,创建KYLIN配置文件上配置的目录。
手工建好文件夹后,还要赋权给root用户。
如上,权限问题二可以解决。
第三个问题
java.io.FileNotFoundException:hdfs://bimaster:8020/hdp/apps/2.7.1/mapreduce/mapreduce.tar.gz
mapreduce.tar.gz没有地方可以下载,要另外想办法。
2.7.1是哪里来的?来源配置,设置当前hadoop version为2.7.1
解决方案:
You should find mapreduce.tar.gz in your hdp env and put it to the hdfs path。可是当前没有mapreduce.tar.gz的文件包。
把mapreduce.tar.gz包 put 到hdfs上。
hadoop fs -put mapreduce.tar.gz /hdp/apps/2.7.1/mapreduce
第四个问题
在 Kylin_Fact_Distinct_Columns 这一步出错了
java.lang.ClassNotFoundException: Class org.apache.kylin.engine.mr.steps.FactDistinctColumnsMapper not found
解决方案:
在本地开发环境下,在kylin.properties 中设置了相关lib的路径,jar要跟版本对应。Jar包在KYLIN_HOME/lib下载。
如下我的配置地址:
kylin.engine.mr.lib-dir=D:/yss_bi/tools/libs
第五个问题
Error: java.lang.RuntimeException: native snappy library not available: this version of libhadoop was built without snappy support.
解决方案:
检查xml配置,把所有用到压缩的地方先改为false。
可以用snappy 、compress关键字查找。
kylin_job_conf.xml 改了两个false
kylin_job_conf_inmem.xml 改了两个false
kylin_hive_conf.xml 一个false
第六个问题
java.io.IOException: java.lang.IllegalArgumentException: java.net.UnknownHostException: master
解决方案:
修改本地hdfs-site.xml配置文件
因为大数据平台,不仅对HDFS做了HA机制,也设置了nameservices的配置,所以将大数据平台hdfs-site.xml的配置文件中关于nameservices的配置拷贝到本地hdfs-site.xml文件里即可解决。看下图进行对比。
第七个问题
common.HadoopJobStatusChecker:58 : error check status
java.io.IOException: Job status not available
解决方案:
修改Hadoop集群的mapred-site.xml配置
注意:是Hadoop集群的,不是本地的。
修改内容如下:
提示一下:在问题二时,已经将 /tmp/hadoop-yarn/staging chown给root用户了。
修改内容参考
<property>
<name>mapreduce.jobhistory.address</name>
<value>master.hadoop:10020</value>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/tmp/hadoop-yarn/staging</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
</property>
第七个问题补充
之后又遇到如上Job status not available
也按如上进行了修改。任然为解决。后来发现是本地mapred-site.xml jobhistory.address未配置正确。
注意:是本地mapred-site.xml 配置文件
当前集群 jobhistory 服务是配置在“master232”主机上。
这个配置应该不影响,最好也修改一下。
第八个问题
也可能该问题不会出现。
UnknownProtocolException: No registered coprocessor service found for SecureBulkLoadService in region KYLIN_WIN310_HHW0O61JFH
说是要开启Regionserver SecureBulkLoad的权限。
咱们来试一下。
解决方案如下:
第一步:
增加配置到hbase-site.xml
<property>
<name>hbase.bulkload.staging.dir</name>
<value>/hbase/hbase-staging</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hadoop.hbase.security.token.TokenProvider,
org.apache.hadoop.hbase.security.access.AccessController,org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint</value>
</property>
第二步:
设置staging dir权限
我当前都是root权限,所以不用操作。
第三步:
同步到hbase的各个节点上
第四步:
重启Regionserver
每个Regionserver都要重启。
./hbase-daemon.sh start/stop/restart regionserver
第九个问题
Caused by: java.lang.IllegalArgumentException: Wrong FS: hdfs://master:8020/kylin_win310/kylin_metadata_hdfs/kylin-faa7bb9a-dfd9-c65d-ffa6-8d7229aae3fa/w310_cube/hfile/F1/40274748a6b644d9b79a750f5eb81f3f, expected: hdfs://master
解决方案:
修改本地core-site.xml
第十个问题
Failure task Diagnostics:
Error: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.io.hfile.HFileWriterImpl
解决方案:
hbase-server-2.2.2.jar 拷贝到本地
下图见:配置文件/ jar存放地址 / jar包
第十一个问题
Failure task Diagnostics:
Error: org.apache.hadoop.hbase.regionserver.StoreFile.getUniqueFile(Lorg/apache/hadoop/fs/FileSystem;Lorg/apache/hadoop/fs/Path;)Lorg/apache/hadoop/fs/Path;
java.lang.NoSuchMethodError: org.apache.hadoop.hbase.regionserver.StoreFile.getUniqueFile(Lorg/apache/hadoop/fs/FileSystem;Lorg/apache/hadoop/fs/Path;)Lorg/apache/hadoop/fs/Path;
hbase-server-1.1.1.jar
第十二个问题
超多classNoFound问题
Error: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.PrivateCellUtil
hbase-common-2.2.2.jar
Error: java.lang.ClassNotFoundException: org.apache.hbase.thirdparty.com.google.common.base.Function
hbase-shaded-miscellaneous-2.2.1.jar
解决如上问题后,Cube Build 100%。
Build 状态
Cube状态
Insight 查询
Sql:
select "DAY",regionname, cityname, sum(pv), count(distinct cookieid)
from WEB_ACCESS_FACT_TBL a
inner join CITY_TBL b
on a.cityid = b.cityid
inner join REGION_TBL c
on c.regionid = a.regionid
group by "DAY", regionname, cityname
提交查询,报错:
org.apache.kylin.rest.exception.InternalErrorException: org.apache.hadoop.hbase.exceptions.UnknownProtocolException: org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered coprocessor service found for CubeVisitService in region KYLIN_WIN310_6NNIMY2H02,,1596165101848.cb0c14501500411dfed5471d18e0de1c.
与如上的No registered coprocessor不相同,现在是CubeVisitService。
经分析,与HBase的协处理器有关。请按如下方式进行解决
第一步:
put kylin-coprocessor-3.1.0-SNAPSHOT.jar包到hadoop上
第二步:
在hbase shell下执行hbase相关操作。
disable 'KYLIN_WIN310_6NNIMY2H02'
alter 'KYLIN_WIN310_6NNIMY2H02','coprocessor'=>'/kylin_win310/kylin_metadata_root/coprocessor/kylin-coprocessor-3.1.0-SNAPSHOT.jar|org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.CubeVisitService|'
enable 'KYLIN_WIN310_6NNIMY2H02'
如上重新enable hbase的表。
补充HBase上的表
第三步:
Insight查询测试。
经处理,查询成功!
Deadline补充
若经过如上修改,查询失败。报错如下:
org.apache.hadoop.hbase.DoNotRetryIOException: Coprocessor passed deadline! Maybe server is overloaded
原因是hbase查询超时,解决方案:
修改本地hbase-site.xml,加大hbase.rpc.timeout的值
默认值才9000,重启kylin服务,查询即可成功!
Kylin3.1.1新问题
问题描述:Load HFile to HBase Table失败
经排查是hbase的权限问题。
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied. user=hbase is not the owner of inode=/hbase1/staging/root__KYLIN_YFH_6Y5S92Y77D__tqgfdc0ai1adplf0ep8svm2ecsmafi1it42ekq29jnqaetoti5g5fteehgnc0voe/F1/543a5a45b4854feb909c1c6f4132d90a
Yarn上卡在这里
解决方案:
在eclipse客户端,修改hbase-site.xml,添加always.copy.files配置
内容:
<property>
<name>always.copy.files</name>
<value>true</value>
</property>
原因:
当前参数是客户端参数,运行kylin程序是要把hbase配置加载到类路径的。