Kylin启动异常:java.lang.outofMemoryError:Requested array size exceeds VM limit

问题背景:
1、在Kylin里跑一个较大的cube,其中这个cube是一个大表事实表,关联两张维度表,在第三步: Extract Fact Table Distinct 报错,查看Mapreduce的执行过程,发现其中有4个Reduce执行失败,失败的报错是内存溢出,多次调大reduce的内存以后 ,Kylin闪退。
2、多次启动kylin以后,查看kylin.out 报 Dumping heap to java_pidxxx.hprof….
“java.lang.outofMemoryError:Requested array size exceeds VM limit”
查看 kylin.log ,报仍然启动引起内存溢出的cube

原因分析:
cube在关联字典表时,本身事实表数据量比较大,关联的字典表也比较大,造成内存溢出,Kylin闪退后重启仍然去跑这个cube。

解决方法:
1、删除这个cube,或者把cube的状态改为disable,由于Kylin无法启动,通过api调用不成功,可能通过Kylin管理手册的方式,清除cube数据,清除垃圾数据
2、由于确认事实表hive 表是测试表,我采用了最粗暴的方式,删除了这张hive表,问题解决。

<think> 我们正在处理一个关于Kylin的AclTableMigrationCLI运行的错误。错误信息包括两个主要部分: 1. `Failed to find metadata store by url: kylin_metadata@hbase` 2. `java.lang.ClassNotFoundException: org.apache.hadoop.hbase.filter.Filter` 根据引用[4]中的信息,类似的问题(启动Kylin出现Could not find or load main class org.apache.hadoop.hbase.util.GetJavaProperty)的解决方法是修改HBase的配置,将HBase的依赖包添加到classpath中。 具体到我们的错误,第二个错误`ClassNotFoundException`表明类路径中缺少HBase的相关类,特别是`org.apache.hadoop.hbase.filter.Filter`。这通常是因为HBase的jar包没有在类路径中被正确加载。 第一个错误`Failed to find metadata store by url: kylin_metadata@hbase`则表明Kylin无法连接到HBase中的元数据存储。这可能是由于HBase服务未正常运行,或者Kylin配置的HBase连接信息不正确,或者因为缺少HBase的依赖导致连接失败。 结合引用[4]的解决方法,我们可以尝试以下步骤: ### 步骤1: 检查HBase服务状态 确保HBase服务已经启动并运行正常。可以通过以下命令检查: ```bash hbase shell ``` 在hbase shell中执行`status`命令,查看HBase状态。 ### 步骤2: 检查Kylin配置 确认Kylin的配置文件中关于HBase的连接配置正确。主要配置文件是`$KYLIN_HOME/conf/kylin.properties`。检查以下配置项: ```properties kylin.metadata.url=kylin_metadata@hbase ``` 这表示使用HBase作为元数据存储,默认表名为`kylin_metadata`。确保HBase中确实存在这张表(通常Kylin会在初始化创建)。 ### 步骤3: 添加HBase依赖到类路径 根据引用[4]的解决方案,我们需要将HBase的依赖包添加到Kylin的类路径中。具体操作如下: 1. 打开Kylin启动脚本`$KYLIN_HOME/bin/kylin.sh`(或`find-env.sh`,具体位置可能因版本而异)。 2. 在脚本中找到设置`CLASSPATH`的地方,将HBase的依赖包路径添加进去。例如,在`kylin.sh`中可能有一行类似于: ```bash CLASSPATH=${KYLIN_HOME}/conf:${KYLIN_HOME}/lib/*:... ``` 我们需要将HBase的lib目录下的所有jar包加入类路径。假设HBase的安装目录是`$HBASE_HOME`,则添加: ```bash CLASSPATH=${CLASSPATH}:$HBASE_HOME/lib/* ``` 注意:如果已经存在HBase的类路径,请检查是否正确;如果没有,则添加。 引用[4]中提到修改`kylin.sh`,在设置`CLASSPATH`的地方追加HBase的lib路径。具体操作可能如下: ```bash # 在kylin.sh中找到设置CLASSPATH的行,然后追加 CLASSPATH=${CLASSPATH}:${HBASE_HOME}/lib/* ``` 另外,确保`HBASE_HOME`环境变量已经设置。如果没有,你需要在脚本中设置,或者直接在命令中使用绝对路径。 ### 步骤4: 检查Hadoop和HBase版本兼容性 Kylin对Hadoop和HBase的版本有特定要求。请确保你使用的Kylin版本与HBase版本兼容。根据引用[2]中的信息,HBase版本为`2.1.0-cdh6.3.1`,Flume版本为`1.9.0-cdh6.3.1`,因此Kylin也应当使用相同CDH版本的发行版。 ### 步骤5: 检查是否有多个HBase版本冲突 如果环境中存在多个HBase版本,可能会导致类加载冲突。确保Kylin使用的HBase依赖与运行的HBase版本一致。 ### 步骤6: 重新启动Kylin服务 修改配置后,重新启动Kylin服务,然后再次运行AclTableMigrationCLI。 ### 步骤7: 手动上传HBase的jar包(备选) 如果以上步骤无效,可以尝试将HBase的jar包手动复制到Kylin的lib目录下(注意版本一致),然后重启Kylin。但这种方法可能会导致依赖冲突,需谨慎。 ### 总结 主要问题在于类路径中缺少HBase的相关类,因此重点是将HBase的jar包加入到Kylin的类路径中。同确保HBase服务正常运行且配置正确。 如果问题仍然存在,请提供以下信息以便进一步排查: - Kylin、HBase、Hadoop的具体版本 - `kylin.properties`配置文件中关于存储和HBase的配置部分 - 完整的错误堆栈信息 §§相关问题§§ 1. 如何检查HBase中是否存在Kylin的元数据表? 2. 如何设置Kylin的环境变量? 3. Kylin与HBase的版本兼容性如何确定? </think> ### 解决Kylin AclTableMigrationCLI运行错误的步骤 #### 🔍 错误原因分析 1. **`Failed to find metadata store by url: kylin_metadata@hbase`** 表示Kylin无法访问HBase中的元数据表`kylin_metadata`,通常由以下原因导致: - HBase服务未启动或不可达 - HBase客户端配置缺失 - 元数据表损坏或未初始化 2. **`ClassNotFoundException: org.apache.hadoop.hbase.filter.Filter`** 表明Kylin运行缺少HBase的核心依赖库(如`hbase-client.jar`),常见于: - HBase类库未加入CLASSPATH - 组件版本不兼容(HBase/Kylin/Hadoop版本冲突) - 环境变量配置错误 --- #### 🛠️ 解决方案 ##### 步骤1:验证HBase服务状态 ```bash # 检查HBase是否正常运行 hbase shell > status # 查看集群状态 > list # 确认存在kylin_metadata表 ``` - 若表不存在,需初始化Kylin元数据:`$KYLIN_HOME/bin/kylin.sh start` ##### 步骤2:修复CLASSPATH配置(关键步骤) 修改Kylin启动脚本,**强制添加HBase依赖库**: 1. 打开`$KYLIN_HOME/bin/kylin.sh` 2. 在`CLASSPATH`配置段追加以下内容(参考引用[4]): ```bash # 添加HBase依赖库(根据实际路径调整) export HBASE_HOME=/usr/lib/hbase # 替换为你的HBase安装路径 export CLASSPATH=$CLASSPATH:$HBASE_HOME/lib/* ``` ⚠️ **重点**:必须确保路径包含以下JAR文件: - `hbase-client-*.jar` - `hbase-common-*.jar` - `hbase-protocol-*.jar` ##### 步骤3:检查版本兼容性 确认组件版本匹配(参考引用[2]): ```bash hbase version # 记录HBase版本 kylin version # 记录Kylin版本 hadoop version # 记录Hadoop版本 ``` - 📌 **兼容要求**:Kylin版本需与CDH/HDP发行版一致(如CDH6.3.x需使用Kylin 3.x) ##### 步骤4:手动添加缺失JAR(备选方案) 若仍报`ClassNotFoundException`,直接将HBase JAR复制到Kylin的lib目录: ```bash cp $HBASE_HOME/lib/hbase-client-*.jar $KYLIN_HOME/lib/ cp $HBASE_HOME/lib/hbase-common-*.jar $KYLIN_HOME/lib/ ``` ##### 步骤5:重启服务并验证 ```bash # 停止Kylin $KYLIN_HOME/bin/kylin.sh stop # 启动Kylin $KYLIN_HOME/bin/kylin.sh start # 重新执行迁移命令 $KYLIN_HOME/bin/kylin.sh org.apache.kylin.tool.AclTableMigrationCLI ``` --- #### 💡 预防措施 1. **环境变量标准化**:在`/etc/profile`中明确定义: ```bash export HBASE_HOME=/path/to/hbase export KYLIN_HOME=/path/to/kylin export CLASSPATH=$CLASSPATH:$HBASE_HOME/lib/* ``` 2. **版本控制**:使用同版本CDH/HDP套件安装HBase/Kylin/Hadoop[^2][^4] 3. **权限检查**:确保Kylin用户有权限访问HBase: ```bash kinit kylin_user@EXAMPLE.COM # Kerberos环境 hbase shell -user kylin_user ``` > 📌 **关键提示**:90%的`ClassNotFoundException`错误源于CLASSPATH配置缺失,务必检查`kylin.sh`中的路径配置[^4]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值