Skip to content

Commit f9cd1d8

Browse files
committed
fix bug 30358
1 parent 25316fe commit f9cd1d8

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

hbase/hbase-side/hbase-async-side/src/main/java/com/dtstack/flink/sql/side/hbase/HbaseAsyncReqRow.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,23 @@
3131
import com.dtstack.flink.sql.factory.DTThreadFactory;
3232
import com.dtstack.flink.sql.side.hbase.utils.HbaseConfigUtils;
3333
import com.stumbleupon.async.Deferred;
34+
import org.apache.commons.collections.MapUtils;
3435
import org.apache.commons.lang3.StringUtils;
3536
import org.apache.flink.api.java.typeutils.RowTypeInfo;
3637
import org.apache.flink.configuration.Configuration;
3738
import org.apache.flink.types.Row;
3839
import org.apache.flink.table.dataformat.BaseRow;
3940
import org.apache.flink.streaming.api.functions.async.ResultFuture;
41+
import org.apache.hadoop.security.UserGroupInformation;
4042
import org.apache.hadoop.security.authentication.util.KerberosName;
4143
import org.hbase.async.Config;
4244
import org.hbase.async.HBaseClient;
4345
import org.slf4j.Logger;
4446
import org.slf4j.LoggerFactory;
4547
import sun.security.krb5.KrbException;
4648

49+
import java.io.File;
50+
import java.security.PrivilegedExceptionAction;
4751
import java.util.List;
4852
import java.util.Map;
4953
import java.util.concurrent.ExecutorService;
@@ -105,15 +109,29 @@ public void open(Configuration parameters) throws Exception {
105109
config.overrideConfig(entity.getKey(), (String) entity.getValue());
106110
});
107111

112+
String principal = null;
113+
String keyTab = null;
108114
if (HbaseConfigUtils.asyncOpenKerberos(hbaseConfig)) {
109-
String jaasStr = HbaseConfigUtils.buildJaasStr(hbaseConfig);
115+
principal = MapUtils.getString(hbaseConfig, HbaseConfigUtils.KEY_PRINCIPAL);
116+
keyTab = System.getProperty("user.dir") + File.separator + MapUtils.getString(hbaseConfig, HbaseConfigUtils.KEY_KEY_TAB);
117+
String jaasStr = HbaseConfigUtils.buildJaasStr(hbaseConfig, principal, keyTab);
110118
String jaasFilePath = HbaseConfigUtils.creatJassFile(jaasStr);
111119
System.setProperty(HbaseConfigUtils.KEY_JAVA_SECURITY_AUTH_LOGIN_CONF, jaasFilePath);
112120
config.overrideConfig(HbaseConfigUtils.KEY_JAVA_SECURITY_AUTH_LOGIN_CONF, jaasFilePath);
113121
refreshConfig();
114122
}
115123

116-
hBaseClient = new HBaseClient(config, executorService);
124+
hBaseClient = null;
125+
if (HbaseConfigUtils.asyncOpenKerberos(hbaseConfig)) {
126+
hBaseClient = UserGroupInformation.loginUserFromKeytabAndReturnUGI(principal, keyTab).doAs(new PrivilegedExceptionAction<HBaseClient>() {
127+
@Override
128+
public HBaseClient run() throws Exception {
129+
return new HBaseClient(config, executorService);
130+
}
131+
});
132+
} else {
133+
hBaseClient = new HBaseClient(config, executorService);
134+
}
117135

118136
try {
119137
Deferred deferred = hBaseClient.ensureTableExists(tableName)
@@ -144,7 +162,7 @@ private void refreshConfig() throws KrbException {
144162
sun.security.krb5.Config.refresh();
145163
KerberosName.resetDefaultRealm();
146164
//reload java.security.auth.login.config
147-
javax.security.auth.login.Configuration.setConfiguration(null);
165+
// javax.security.auth.login.Configuration.setConfiguration(null);
148166
}
149167

150168
@Override

hbase/hbase-side/hbase-side-core/src/main/java/com/dtstack/flink/sql/side/hbase/utils/HbaseConfigUtils.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class HbaseConfigUtils {
5959
private final static String KEY_HBASE_SASL_CLIENTCONFIG = "hbase.sasl.clientconfig";
6060
private final static String KEY_HBASE_KERBEROS_REGIONSERVER_PRINCIPAL = "hbase.kerberos.regionserver.principal";
6161
public static final String KEY_KEY_TAB = "hbase.keytab";
62-
private static final String KEY_PRINCIPAL = "hbase.principal";
62+
public static final String KEY_PRINCIPAL = "hbase.principal";
6363

6464
public final static String KEY_HBASE_ZOOKEEPER_QUORUM = "hbase.zookeeper.quorum";
6565
public final static String KEY_HBASE_ZOOKEEPER_ZNODE_QUORUM = "hbase.zookeeper.znode.parent";
@@ -175,16 +175,13 @@ public static String creatJassFile(String configStr) throws IOException {
175175
return temp.getAbsolutePath();
176176
}
177177

178-
public static String buildJaasStr(Map<String, Object> kerberosConfig) {
178+
public static String buildJaasStr(Map<String, Object> kerberosConfig,String principal,String keyTab) {
179179
for (String key : ASYNC_KEYS_KERBEROS_REQUIRED) {
180180
if (StringUtils.isEmpty(MapUtils.getString(kerberosConfig, key))) {
181181
throw new IllegalArgumentException(String.format("Must provide [%s] when authentication is Kerberos", key));
182182
}
183183
}
184184

185-
String keyTab = System.getProperty("user.dir") + File.separator + MapUtils.getString(kerberosConfig, KEY_KEY_TAB);
186-
String principal = MapUtils.getString(kerberosConfig, KEY_PRINCIPAL);
187-
188185
StringBuilder jaasSB = new StringBuilder("Client {\n" +
189186
" com.sun.security.auth.module.Krb5LoginModule required\n" +
190187
" useKeyTab=true\n" +

0 commit comments

Comments
 (0)