通过WebChat访问Hive元数据
WebHcat样例代码
Hive提供了WebHcat接口。该文档利用java把该接口进行了封装,可以使用java代码访问Hive。
代码中只封装了一些常用接口,对于没有其他的接口,可以参考封装好的代码自行进行封装。
1.1 主要难点:
因hive的webHcat接口未提供认证接口,我们这边只能借助spnego的方式来进行kerberos认证。
首先,先进行kerberos认证。认证完成后,获得认证的信息。(Subject对象用于存放认证信息。这是kerberos底层实现,有兴趣可以自行研究下。)
然后,对HTTP进行封装,设置spnego方式需要的配置参数。参考该方法:WebHcatHttpClient。
最后,采用Subject.doas()方法建立认证通道。在该方法内进行所有的业务操作。
1.2 代码介绍:
Body文件夹:webHcat需要用到的一些对象。
Information文件夹:HTTP请求需要的一些类。
比如:
HttpAuthInfo:用于构建HTTP请求。
Kerberos:用于封装kerberos认证需要的信息。
RestApi:WebHcat的接口类。
RestHelper:响应头的解析和json字符串转换。
WebHcatHttpClient:构建spnego的请求。
WebHcat:主类,里面提供了webhcat接口的使用方法。
1.3 样例代码
String user = "lyysxg@HADOOP.COM";
String keytab = "D:\\fwc\\SparkStudy\\src\\main\\resources\\user.keytab";
String krb5Location = "D:\\fwc\\SparkStudy\\src\\main\\resources\\krb5.conf";
InputStream inputStream = null;
HttpAuthInfo httpAuthInfo = null;
try {
inputStream = new FileInputStream(WebHcat.class.getClassLoader().getResource(DEFAULT_CONFIG_FILE).getPath());
Properties p = new Properties();
p.load(inputStream);
httpAuthInfo = HttpAuthInfo.newBuilder().setIp(p.getProperty("ip"))
.setPort(Integer.valueOf(p.getProperty("port")))
.build();
WebHcatHttpClient client = WebHcatHttpClient.getClient(httpAuthInfo);
RestApi api = new RestApi(client);
api.login(user, keytab, krb5Location);
User:是用户名。
Keytab:keytab文件的路径。
krb5Location:krb5文件的路径。
api.login(user, keytab, krb5Location):调用认证代码进行认证。
1. 列出所有的数据库---api.searchPath();
2. 获取指定数据库的详细信息。api.searchPath(reqDatabaseBody1);
参数:ReqDatabaseBody对象。
3. 创建数据库api.CreateDataBase(createDataBaBody, "Test1");
参数:CreateDataBaBody对象,为数据库的名字。
4. 创建表,api.CreateTable(reqCreateTableBody, "Test1", "lyysxg1");
参数:ReqCreateTableBody对象,数据库名,表名
5. 查询数据库中的所有,api.searchTable(searchTable);
参数:searchTable对象
6. 重命名表,api.RenameTable("Test1", "lyysxg1", "zwllyysxg");
参数:数据库,表名,新表名
7. 删除表,api.DeleteTable(reqDelTableBody);
参数:ReqDelTableBody对象
8. 删除数据库,api.DeleteDatabase(delete);
参数:DeleteDataBaseBody对象。
运行效果:
1.4 附件
- 点赞
- 收藏
- 关注作者
评论(0)