通过WebChat访问Hive元数据

举报
南派三叔 发表于 2021/08/26 18:56:42 2021/08/26
【摘要】 WebHcat样例代码Hive提供了WebHcat接口。该文档利用java把该接口进行了封装,可以使用java代码访问Hive。代码中只封装了一些常用接口,对于没有其他的接口,可以参考封装好的代码自行进行封装。1.1      主要难点:因hive的webHcat接口未提供认证接口,我们这边只能借助spnego的方式来进行kerberos认证。首先,先进行kerberos认证。认证完成后,获...

WebHcat样例代码

Hive提供了WebHcat接口。该文档利用java把该接口进行了封装,可以使用java代码访问Hive

代码中只封装了一些常用接口,对于没有其他的接口,可以参考封装好的代码自行进行封装。

1.1      主要难点:

hivewebHcat接口未提供认证接口,我们这边只能借助spnego的方式来进行kerberos认证。

首先,先进行kerberos认证。认证完成后,获得认证的信息。(Subject对象用于存放认证信息。这是kerberos底层实现,有兴趣可以自行研究下。)

然后,对HTTP进行封装,设置spnego方式需要的配置参数。参考该方法:WebHcatHttpClient

最后,采用Subject.doas()方法建立认证通道。在该方法内进行所有的业务操作。

1.2      代码介绍:

Body文件夹:webHcat需要用到的一些对象。

Information文件夹:HTTP请求需要的一些类。

比如:

HttpAuthInfo:用于构建HTTP请求。

Kerberos:用于封装kerberos认证需要的信息。

RestApiWebHcat的接口类。

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:是用户名。

Keytabkeytab文件的路径。

krb5Locationkrb5文件的路径。

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      附件

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。