华为 FusionInsight HD Hive数据库

Posted meteors

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为 FusionInsight HD Hive数据库相关的知识,希望对你有一定的参考价值。

1.环境的安装与准备
参考下图:
技术图片
2.数据库服务的安装与添加(HADOOP,HDFS,HIVE)
如下图所示:
技术图片
3.华为官网的文档的指导手册(HADOOP,HDFS,HIVE)
FusionInsight HD 6.5.1 应用开发指南 03
https://support.huawei.com/enterprise/zh/doc/EDOC1100094183/2a06ceda
4.HIVE数据库的连接
你会发现:UserGroupInformation这个类。在访问带有kerberos认证的hadoop生态圈服务时,必须带上keytab文件认证
目的:通过 UserGroupInformation.
loginUserFromKeytabAndReturnUGI(userCode,keytabPath); 这个方法成功后,返回的票据信息,通过这个票据,可以在没过期的情况下,用来访问hadoop系统。
userCode是用户的名称,keytabPath是keytab文件的路径,一般系统是采用kdc生成的验证文件,来进行系统登录。系统不需要知道密码。
默认userCode你在使用:内置的hive 的下hive/hadoop.hadoop.com@HADOOP.COM 在测试来链接,拿到connection是没有问题的。后续才发现问题来了。请看下面。
技术图片
建议:使用这种链接方式,也是华为封装的一些登录和认证的方法工具类。也是为了后面的HDFS认证的需要
5.HDFS文件上传
HDFS初始化是指在使用HDFS提供的API之前,需要做的必要工作。
大致过程为:加载HDFS服务配置文件,并进行Kerberos安全认证,认证通过后再实例化Filesystem,之后使用HDFS的API。此处Kerberos安全认证需要使用到的keytab文件,可在客户端下载即可。每个对应的用户对应的有认证文件。
安全认证:核心就是配置文件(我是直接从安装的路径中先查找再下载下来的。)
hadoop.rpc.protection—这一项非常关键。你会按照正常的HA 的方式,或者网上各种连接HDFS认证方式的代码,都会执行报错。每次报的错误都不一样,完全摸不到头绪。
上图你会根据出现的这个图,你就离成功不远啦,这是说明了你的客户端和服务端的这项参数配置不一致导致了(怎么理解这句话。)
本段代码,我在自己本地windowS中,我去掉这个参数设置,执行,获取连接,HDFS文件上传,load数据,查询表数据都没有问题。
一部署到linux上就各种报错。这个时候你会各种百度查资料,想着去确认是不是服务端的core-site.xml的配置文件中的参数是不是真的不一致。于是,我find / - name core-site.xml 在 主110 ,从109,108找到了接近40个core-site.xml文件。我一个一个去编辑查看该参数。结果居然全是一样,value就是privacy。
那么问题又来了,hadoop.rpc.protection中的参数到底是什么意思?privacy是什么含义呢?
3. 原因分析
1.HDFS的客户端和服务端数据传输走的rpc协议,该协议有多种加密方式,由hadoop.rpc.protection参数控制。
2.如果客户端和服务端的hadoop.rpc.protection参数的配置值不一样,即会报No common protection layer between client and server错误。
含义解释:
hadoop.rpc.protection参数表示数据可通过以下任一方式在节点间进行传输。
? privacy:默认值,指数据在鉴权及加密后再传输。这种方式会降低性能。
? authentication:指数据在鉴权后直接传输,不加密。这种方式能保证性能但存在安全风险。
? integrity:指数据直接传输,即不加密也不鉴权。 为保证数据安全,请谨慎使用这种方式。
看到这里我似乎就明白了,不知道你们明不明白,我在HDFS文件上传时,获取Configuration时,没有指定数据传输的方式导致。
于是就有了了下面这短代码:
config.addResource("hdfs-site.xml");
config.addResource("core-site.xml");
conf.set("hadoop.security.authentication", "Kerberos");
conf.setBoolean("fs.hdfs.impl.disable.cache",true);
conf.set("fs.defaultFS", "hdfs://fusion3:25000");
conf.set("hadoop.rpc.protection", "privacy");
conf.set("dfs.data.transfer.protection", "integrity");
结果还是报错。
你发现查网上,结合HA集群的方式,都不行。那怎么办,到底是哪里的问题。根据报错,我还是断定是数据传输的协议问题。我想我只设置配置conf.set("hadoop.rpc.protection", "privacy");
这一个参数呢,其他的乱七八糟和认证的方式我都不管,先保证它没问题。还是不行出现下面的错误:
技术图片
一看到这个错误,我就断定是认证文件的问题,我放开config.addResource("hdfs-site.xml");
config.addResource("core-site.xml");
文件认证的限制,果然外面是可以跑通的,现在就是测试项目中是否可行。结果项目中真的就是这4行代码就解决了HDFS的问题。


















































以上是关于华为 FusionInsight HD Hive数据库的主要内容,如果未能解决你的问题,请参考以下文章

FusionInsight HD V100R002C80SPC200安装手册

FusionInsight HD 客户端安装与使用

华为云FusionInsight连续三次获得第一,加速释放数据要素价值

Kafka(华为FusionInsight )操作命令

解密华为云FusionInsight MRS新特性:一架构三湖

解密华为云FusionInsight MRS新特性:一架构三湖