协处理器部署:不重启hbase替换jar会生效?
coprocessor deployment : replacing jar without restarting hbase will take effect?
让我们假设这种情况。
我在 hbase 中声明了一个协处理器-site.xml
<property>
<name>hbase.coprocessor.region.classes</name>
<value>my.co.processor</value>
<property>
在 hbase-env.sh 中,我这样声明协处理器类路径
export HBASE_CLASSPATH="${HBASE_HOME}/lib/coprocessor.jar"
如果我以后发现那个协处理器有错误,我可以只替换所有区域服务器中的那个 jar 文件而不重新启动整个 hbase 吗?
如果我想添加另一个协处理器,那么我想我必须重新启动整个 Hbase,对吗?
我知道我可以在 hbase shell 中为每个 table 声明,但我认为如果我有很多 table 来应用新的协处理器,这不是一个考虑的选项。
您可以将协处理器加载到特定的 HTable:
hTableDescriptor.addCoprocessor(类名, 路径, Coprocessor.PRIORITY_USER, 空);
这样,您只需要禁用table,添加协处理器并启用table。
您可以替换同名的jar 文件并使用滚动重启来避免停机。通过这种方式,您所有的罐子都将被重新加载。但是,当你的协处理器 类 被加载时要小心不要有异常;否则,您应该停止 hbase 集群并复制更正后的 jar 并启动集群。
让我们假设这种情况。
我在 hbase 中声明了一个协处理器-site.xml
<property>
<name>hbase.coprocessor.region.classes</name>
<value>my.co.processor</value>
<property>
在 hbase-env.sh 中,我这样声明协处理器类路径
export HBASE_CLASSPATH="${HBASE_HOME}/lib/coprocessor.jar"
如果我以后发现那个协处理器有错误,我可以只替换所有区域服务器中的那个 jar 文件而不重新启动整个 hbase 吗?
如果我想添加另一个协处理器,那么我想我必须重新启动整个 Hbase,对吗? 我知道我可以在 hbase shell 中为每个 table 声明,但我认为如果我有很多 table 来应用新的协处理器,这不是一个考虑的选项。
您可以将协处理器加载到特定的 HTable: hTableDescriptor.addCoprocessor(类名, 路径, Coprocessor.PRIORITY_USER, 空); 这样,您只需要禁用table,添加协处理器并启用table。
您可以替换同名的jar 文件并使用滚动重启来避免停机。通过这种方式,您所有的罐子都将被重新加载。但是,当你的协处理器 类 被加载时要小心不要有异常;否则,您应该停止 hbase 集群并复制更正后的 jar 并启动集群。