请问Apache Kylin该如何部署在Standalone HBase Cluster

根据官网上的博客,依然没有一个清晰的方法。大致的思路是:`在部署Kylin的节点上, hadoop 配置指向运算的集群, Hbase 的配置指向 HBase 集群`。 有几点不明: - Kylin该如何配置才能使得hadoop配置指向运算集群,hbase配置指向hbase集群(在那个官网的博客中也只提到了一个参数`kylin.hbase.cluster.fs`,可是只有这一个参数是不够的)? - Kylin是应该装在运算集群上,还是应该装在hbase集群上,还是Kylin可以单独放在这两个集群之外的节点上? [Deploy Apache Kylin with Standalone HBase Cluster](http://kylin.apache.org/blog/2016/06/10/standalone-hbase-cluster/)

李扬 - Apache Kylin committer & PMC member, Sr. Architect of eBay CCOE

赞同来自: fish 大饼辉

Kylin是Hadoop和HBase的客户端,可以部署在能够网络能访问的任意节点。 Kylin要求节点上有hadoop/hive/hbase的命令行环境,启动时根据以上命令行探测对接的集群。 举例来说,如果你不确定Kylin连接那个HBase, 只需在命令行运行hbase shell加以确定即可。

QuentinYo

赞同来自:

同样不明白如何配置,kylin启动的时候会加载哪里的配置文件。通过HadoopUtil.getCurrentConfiguration()得到的配置看起来像是hbase的配置文件,难道不应该是加载hadoop的配置文件吗?

李扬 - Apache Kylin committer & PMC member, Sr. Architect of eBay CCOE

赞同来自:

Kylin启动时通过调用命令行 'hbase classpath' 和 `hive -e set | grep 'env:CLASSPATH'` 读取Hadoop配置文件。这也是为什么要求Kylin部署机有 hive, hbase, hadoop 命令行环境。

生命旗舰

赞同来自:

您好,我也遇到了同样的问题,目前我们的hbase有独立的hdfs环境,但是build cube的时候kylin却总是从hbase的hdfs上去读取第二步的row_count值,目前我的版本使用的是最新的1.6.0,仍然存在这个问题。

inter12 - 不想给自己定义标签

赞同来自:

我也遇见这个问题,看了代码是从
HadoopUtil的

public static Configuration getCurrentConfiguration() {
    if (hadoopConfig.get() == null) {
        Configuration conf = healSickConfig(new Configuration());
        // do not cache this conf, or will affect following mr jobs
        return conf;
    }
    Configuration conf = hadoopConfig.get();
    return conf;
}

  这里获取配置,而这个配置的set 是通过    KylinMapper 来设置的

public class KylinMapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> extends Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
    private static final Logger logger = LoggerFactory.getLogger(KylinMapper.class);

    protected void bindCurrentConfiguration(Configuration conf) {
        logger.info("The conf for current mapper will be " + System.identityHashCode(conf));
        HadoopUtil.setCurrentConfiguration(conf);
    }
}

      根据日志中没有找到 The conf for current mapper will be 这段日志。 后来懒的去找问题了。   直接自己改了代码:

private static final Cache<String, Configuration> LOCAL_HADOOP_CONFIG = CacheBuilder.newBuilder().build();

// 本地的hadoop环境
private static final String                       LOCAL_CONFIG        = "localConfig";

 
public static Configuration getLocalHadoopConfiguration() {

    try {
        return LOCAL_HADOOP_CONFIG.get(LOCAL_CONFIG, new Callable<Configuration>() {

            @Override
            public Configuration call() throws Exception {
                Configuration configuration = new Configuration(false);

                String hadoopConfDir = System.getenv("HADOOP_CONF_DIR");
                logger.info("------ hadoopConfDir {} -------- ", hadoopConfDir);

                configuration.addResource(new Path(hadoopConfDir + "/core-site.xml"));
                configuration.addResource(new Path(hadoopConfDir + "/hdfs-site.xml"));
                configuration.addResource(new Path(hadoopConfDir + "/mapred-site.xml"));
                configuration.addResource(new Path(hadoopConfDir + "/yarn-site.xml"));

                return configuration;
            }
        });
    } catch (ExecutionException e) {
        logger.error("load local hadoop config eror ");
    }

    throw new IllegalStateException("local hadoop config error ");

}

 
HiveMRInput的

protected ExecuteResult doWork(ExecutableContext context) throws ExecuteException {
    KylinConfig config = getCubeSpecificConfig();

    try {
        computeRowCount(config.getCliCommandExecutor());
        Path rowCountFile = null;
        Path rowCountFolder = new Path(getRowCountOutputDir());
        // FileSystem fs = FileSystem.get(rowCountFolder.toUri(), HadoopUtil.getCurrentConfiguration()); 原来代码
        FileSystem fs = FileSystem.get(rowCountFolder.toUri(), HadoopUtil.getLocalHadoopConfiguration());//新代码

 
    然后就可以。      

要回复问题请先登录注册