【问题标题】:Automatically run a script when HBase master Docker container finishes initializing当 HBase 主 Docker 容器完成初始化时自动运行脚本
【发布时间】:2016-08-19 01:03:40
【问题描述】:

我正在尝试使用 Docker 容器自动为使用 HBase 的 Web 服务设置开发环境。我想做的是在容器启动并启动 HBase 后将我们的模式应用于 HBase。

尝试调用将架构复制到 HBase 并立即通过 ./hbase shell 应用它的脚本会给我一个错误,即主节点未完成初始化(我知道在容器上运行它会将我留在 hbase -cli 提示符,但是一旦我首先运行它,我将处理自动返回)。

我查看了wait-for-it 之类的工具,但我找不到在主节点初始化时显示为“启动”的主机/端口组合。

我的问题是,如何轮询我的 HBase 容器以查看主节点何时初始化,这样我就可以应用我的架构而无需查看日志并在容器本身中手动运行命令?

【问题讨论】:

  • 在出现 master.HMaster: Master has completed initialization 日志之前检查最后 100 行 hbase 日志的脚本怎么样?
  • 对此有任何答案吗?我遇到了同样的问题
  • 不,抱歉。我想我找到了一些其他的办法,但我不记得了,后来我换了工作。在我终于得到一个可靠的环境构建工作时,我也离开了那个项目。

标签: docker hbase docker-compose


【解决方案1】:

首先,这是一个棘手的问题。这是我们在 Splice Machine(开源)的设计,希望对您有所帮助...

(1) 创建 MasterObserver(协处理器):这是模式创建的单入口点。

(2) 如果 zookeeper 没有找到架构初始化标志,则在区域服务器上来调用主服务器时创建调用(例如创建特定 InitTable)。

(3) 让 MasterObserver 覆盖 preCreateTable 并在那里以线程阻塞方式执行模式创建(即阻塞来自区域服务器的其他请求)。在我们的字典被初始化(模式)之前,我们不希望我们的 JDBC/ODBC 端口启动,并且我们还想确保我们有一个区域服务器可用于创建的表。

(4) 在创建结束时,让 MasterObserver 向 zookeeper 写入一个初始化标志。这很关键,因为它可以处理快速弹跳服务器时可能发生的部分创建情况等。

代码示例:

MasterObserver 代码片段

@Override
    public void preCreateTable(ObserverContext<MasterCoprocessorEnvironment> ctx, HTableDescriptor desc, HRegionInfo[] regions) throws IOException {
        SpliceLogUtils.info(LOG, "preCreateTable %s", Bytes.toString(desc.getTableName().getName()));
        if (Bytes.equals(desc.getTableName().getName(), INIT_TABLE)) {
            switch(manager.getState()){
                case NOT_STARTED:
                    boot();
                case BOOTING_ENGINE:
                case BOOTING_GENERAL_SERVICES:
                case BOOTING_SERVER:
                    throw new PleaseHoldException("Please Hold - Starting");
                case RUNNING:
                    throw new DoNotRetryIOException("Success");
                case STARTUP_FAILED:
                case SHUTTING_DOWN:
                case SHUTDOWN:
                    throw new IllegalStateException("Startup failed");
            }
        }
    }

欢迎查看

我们的 github 帐户上的 RegionLifecycleObserver 和 SpliceMasterObserver。

https://github.com/splicemachine/spliceengine

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多