使用java在远程HBase中创建表时出错
它显示以下错误:使用java在远程HBase中创建表时出错,java,api,hadoop,hbase,Java,Api,Hadoop,Hbase,它显示以下错误: public class HBase { static HBaseAdmin admin = null; static Configuration conf = null; public static final String HBASE_CONFIGURATION_ZOOKEEPER_QUORUM = "hbase.zookeeper.quorum"; public static final String HBASE_CONFIGURATI
public class HBase {
static HBaseAdmin admin = null;
static Configuration conf = null;
public static final String HBASE_CONFIGURATION_ZOOKEEPER_QUORUM = "hbase.zookeeper.quorum";
public static final String HBASE_CONFIGURATION_ZOOKEEPER_CLIENTPORT = "hbase.zookeeper.property.clientPort";
public static final String HBASE_HOST = "hdn01.***.com ";
public static final String HBASE_PORT = "2181";
public static void main(String[] args) throws MasterNotRunningException,
ZooKeeperConnectionException {
conf = HBaseConfiguration.create();
conf.clear();
conf.set("hbase.zookeeper.quorum", HBASE_HOST);
conf.set("hbase.zookeeper.property.clientPort", HBASE_PORT);
HTableDescriptor tableDescriptor = new HTableDescriptor("website");
// Adding column families to table descriptor
tableDescriptor.addFamily(new HColumnDescriptor("personal"));
tableDescriptor.addFamily(new HColumnDescriptor("professional"));
System.out.println(" Table creation started ");
try {
HBaseAdmin.checkHBaseAvailable(conf);
admin = new HBaseAdmin(conf);
admin.createTable(tableDescriptor);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(" Table created ");
}
}
表创建已开始
线程“main”java.lang.reflect.UndeclaredThrowableException中的异常:HadoopUser意外异常
位于org.apache.hadoop.hbase.security.User$HadoopUser.(User.java:275)
位于org.apache.hadoop.hbase.security.User$HadoopUser。(User.java:256)
位于org.apache.hadoop.hbase.security.User.getCurrent(User.java:159)
位于org.apache.hadoop.hbase.client.HConnectionManager$HConnectionKey.(HConnectionManager.java:473)
位于org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:199)
位于org.apache.hadoop.hbase.client.HBaseAdmin.(HBaseAdmin.java:118)
位于org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:1780)
位于HBase.main(HBase.java:45)
原因:javax.security.auth.login.login异常:登录失败:无法运行程序“bash”:CreateProcess error=2,系统找不到指定的文件
位于org.apache.hadoop.security.UnixUserGroupInformation.login(UnixUserGroupInformation.java:250)
位于org.apache.hadoop.security.UnixUserGroupInformation.login(UnixUserGroupInformation.java:275)
位于org.apache.hadoop.security.UnixUserGroupInformation.login(UnixUserGroupInformation.java:257)
位于org.apache.hadoop.security.UserGroupInformation.login(UserGroupInformation.java:67)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于org.apache.hadoop.hbase.util.Methods.call(Methods.java:37)
位于org.apache.hadoop.hbase.security.User.call(User.java:607)
位于org.apache.hadoop.hbase.security.User.callStatic(User.java:602)
位于org.apache.hadoop.hbase.security.User.access$500(User.java:51)
位于org.apache.hadoop.hbase.security.User$HadoopUser.(User.java:265)
您使用的是哪种版本的hbase?和“原因:javax.security.auth.login.login异常:登录失败:无法运行程序“bash”:CreateProcess error=2,系统找不到指定的文件”似乎用户没有正确的权限或bash未安装设置“-DHADOOP_user_NAME=”,将帮助您设置任何其他用户,从Java API运行时,除了底层网络pwd之外。上述用户应具有执行正在处理的操作的权限。您还可以使用“user_permission”来获取您对该hbase表的权限。实际上,我已经给了一个任务,在公司云端的hbase中创建一个表。所以他们告诉我使用java api在hbase上创建一个表,该表只具有给定的凭据主机名和端口。
Table creation started
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException: Unexpected exception HadoopUser<init>
at org.apache.hadoop.hbase.security.User$HadoopUser.<init>(User.java:275)
at org.apache.hadoop.hbase.security.User$HadoopUser.<init>(User.java:256)
at org.apache.hadoop.hbase.security.User.getCurrent(User.java:159)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionKey.<init>(HConnectionManager.java:473)
at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:199)
at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:118)
at org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:1780)
at HBase.main(HBase.java:45)
Caused by: javax.security.auth.login.LoginException: Login failed: Cannot run program "bash": CreateProcess error=2, The system cannot find the file specified
at org.apache.hadoop.security.UnixUserGroupInformation.login(UnixUserGroupInformation.java:250)
at org.apache.hadoop.security.UnixUserGroupInformation.login(UnixUserGroupInformation.java:275)
at org.apache.hadoop.security.UnixUserGroupInformation.login(UnixUserGroupInformation.java:257)
at org.apache.hadoop.security.UserGroupInformation.login(UserGroupInformation.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.hadoop.hbase.util.Methods.call(Methods.java:37)
at org.apache.hadoop.hbase.security.User.call(User.java:607)
at org.apache.hadoop.hbase.security.User.callStatic(User.java:602)
at org.apache.hadoop.hbase.security.User.access$500(User.java:51)
at org.apache.hadoop.hbase.security.User$HadoopUser.<init>(User.java:265)