如果在使用Apache Kylin的时候出现 以下情况,可以继续往下看此博客:
1.在浏览器页面无法显示示例立方体kylin_sales_cube。
2.在浏览器页面无法同步Hive表。显示failed to take action.
3.创建立方体失败。
环境:CDH 5.8.0 ,Apache Kylin 2.0.0
在使用Apache Kylin时遇到一个棘手的问题。
安装之后运行示例文件,并初始化元数据信息,但是启动kylin之后找不到示例的立方体,并且不能导入hive中的表和创建立方体模型,在浏览器页面也只是显示了failed错误,没有什么有价值的信息显示,只能去查看kylin日志,发现导致错误的原因是在反序列化元数据模型时出现了不识别的符号。Kylin自带的示例元数据模型存在于安装文件中,以json文件形式存在,初始化一个元数据模型,存储在Hbase中,但是模型中两个属性(大概在template/cube_desc/kylin_sales_cube_desc.json第197行左右)storage_type和engine_type默认值都为% default_engine_type %
,这个值应该是取环境参数,但是这里没有取到值,所以导致了模型不能被反序列化。json串如下:
"engine_type" : %default_engine_type%,
"storage_type" : %default_engine_type%,
不明白这两个属性的名称,只能去下载kylin的源码,导入eclipse中,找到元数据模型对应的java类(CubeDesc类),对应的源码如下:
@JsonProperty("engine_type")
private int engineType = IEngineAware.ID_MR_V1;
@JsonProperty("storage_type")
private int storageType = IStorageAware.ID_HBASE;
在IEngineAware
和IStorageAware
两个接口中声明了不同的值,
storage_type
对应的3个值,表示立方体存储类型
public static final int ID_HBASE = 0;
public static final int ID_HYBRID = 1;
public static final int ID_SHARDED_HBASE = 2;
engine_type
对应的四个值,表示
public static final int ID_MR_V1 = 0;
public static final int ID_MR_V2 = 2;
public static final int ID_MR_II = 3;
public static final int ID_SPARK = 4;
在CubeDesc
中对两个属性的默认赋值为ID_HBASE
和ID_MR_V1
,也就是都为0,所以在默认的立方体模型json串中将两个属性的默认值更改为0,取代% default_engine_type%
,最终的json:
"engine_type" : 0,
"storage_type" : 0,
重新运行Kylin创建示例元数据和立方体,即可正常使用Kylin,并能正常导入Hive中的表,构建立方体。
遇到问题的朋友可作为参考。