更新时间:2018/11/9 11:35:53

更新内容:

1. 将

以下正文:

最近做一个项目涉及到读取hdfs数据时要进行kerberos认证,上网找了挺多例子试了挺久才成功,项目完成了这里记录一下。因为时间过去挺久忘了当初是参考哪个博文验证成功的了,虽无法指明但表示感谢!

kerberos认证

这里是用keytab和krb5.conf文件进行kerberos认证,至于这两个文件是干嘛的自行搜索(其实我也不太清除o.o,就是用来验证Kerberos的了)。需要的相关信息配置在hdfs_info.properties文件中,配置如下:

## namenode的地址,hdfs://ip:port

hdfs_address=

## .keytab文件路径

key_tab_path=

## krb5.conf文件路径

krb5_path=

## hdfs-site.xml文件路径

hdfs_site_path=

## kerberos认证用户

login_user=

这里我只是列出了需要配置的内容,相关信息配置成自己集群环境的信息就好,hdfs-site.xml中主要是需要dfs.namenode.kerberos.principal和dfs.datanode.kerberos.principa这两个配置信息,如果不想将整个配置文件导入(里面配置了很多信息)也可以直接conf里面设置即可:

// ""中填写对应配置的值

conf.set("dfs.namenode.kerberos.principal","");

conf.set("dfs.datanode.kerberos.principal","");

然后Kerberos认证的类HdfsUtil.class中进行认证的方法kerberosCertify(),我将返回值由原来的void改为了Configuraiton,是想到kerberos认证是有过期时间的,不知道conf存储了认证信息,过期后是否需要重新认证,如果需要重新认证这样会方便写,且加个定时器定时去定时认证会更好,避免手动调用。如果不会过期那就还是void好点,且Configuration最好做单例处理,此处待确认和优化,具体代码如下:

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FSDataInputStream;

import org.apache.hadoop.fs.FileStatus;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.LocalFileSystem;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.fs.permission.FsAction;

import org.apache.hadoop.hdfs.DistributedFileSystem;

import org.apache.hadoop.io.IOUtils;

import org.apache.hadoop.security.UserGroupInformation;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.cdc.common.util.PropertiesUtil;

import com.cdc.hdfs.enums.FilePermissionEnum;

import com.cdc.hdfs.enums.FileTypeEnum;

/**

*@author lshua

*@time 2018年6月27日

*@description: 集群工具类

*/

public class HDFSUtil {

private static final Logger log = LoggerFactory.getLogger(HDFSUtil.class);

/**

* hdfs信息配置文件路径 resources目录下

*/

private static final String HDFS_INFO_ADDRESS = "hdfs_info.properties";

/**

* hdfs配置信息

*/

private static Map proMap = PropertiesUtil.getProperties(HDFS_INFO_ADDRESS);

/**

* HDFS namenode地址

*/

private static final String HDFS_ADDRESS = proMap.get("hdfs_address");

/**

* 认证需要的.keytab文件的路径

*/

private static final String KEY_TAB_PATH = proMap.get("key_tab_path");

/**

* 配置文件krb5.conf的路径

*/

private static final String KRB5_PATH = proMap.get("krb5_path");

/**

* hdfs-site.xml文件的路径

*/

private static final String HDFS_SITE_PATH = proMap.get("hdfs_site_path");

/**

* kerberos认证用户名

*/

private static final String LOGIN_USER = proMap.get("login_user");

/**

* 配置信息

*/

private static Configuration conf = null;

/**

* 对集群进行认证操作

*

*@return Configuration 返回包含认证信息的,失败返回null

*@date 2018年11月2日

*/

public static Configuration kerberosCertify() {

conf = new Configuration();

// 设置kerberos配置信息

System.setProperty("java.security.krb5.conf", KRB5_PATH);

conf.set("fs.defaultFS", HDFS_ADDRESS);

conf.set("fs.hdfs.impl", DistributedFileSystem.class.getName());

conf.set("fs.file.impl", LocalFileSystem.class.getName());

/**

* 启用kerberos认证

*/

conf.setBoolean("hadoop.security.authentication", true);

conf.set("hadoop.security.authentication", "kerberos");

// 添加hdfs-site.xml的内容

conf.addResource(new Path(HDFS_SITE_PATH));

UserGroupInformation.setConfiguration(conf);

try {

// kerberos认证

UserGroupInformation.loginUserFromKeytab(LOGIN_USER, KEY_TAB_PATH);

UserGroupInformation.getLoginUser();

} catch (Exception e) {

log.error("------------hdfs kerberos 认证异常!--------------");

e.printStackTrace();

return null;

}

return conf;

}

代码中用到了一个自己写的PropertiesUtil.class工具类代码如下 :

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.util.HashMap;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Properties;

import java.util.Set;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

*@author lshua

*@time 2018年4月24日

*@description: 配置文件的工具类

*/

public class PropertiesUtil {

private static Logger log = LoggerFactory.getLogger(PropertiesUtil.class);

/**

*@description 根据文件路径获取配置信息

*@param confPath 配置文件路径

*@return Map

*@author lshua

*@date 2018年5月4日

*/

public static Map getProperties(String confPath) {

log.info("-----loadConfig()... begin-----");

log.info("-----confPath = {}", confPath);

Map proMap = new HashMap(32);

Properties prop = new Properties();

FileInputStream fis = null;

BufferedInputStream bis = null;

try {

fis = new FileInputStream(new File(confPath));

bis = new BufferedInputStream(fis);

prop.load(bis);

Set> propSet = prop.entrySet();

for(Entry entry : propSet) {

proMap.put(entry.getKey().toString(), entry.getValue().toString());

}

} catch (Exception e) {

e.printStackTrace();

log.info("-----loadConf() error-----");

} finally {

try {

if(bis != null) {

bis.close(); bis = null;

}

if(fis != null) {

fis.close(); fis = null;

}

} catch (Exception e) {

log.info("------ close io stream error ! -----");

e.printStackTrace();

}

}

log.info("-----loadConfig()... end-----");

return proMap;

}

}

需要注意的是因为开启的kerberos认证,所以当其他地方需要做hdfs的相关操作的时候不能直接new 一个Configuration出来,需要使用这里进行了kerberos验证包含验证信息的Configuration,所以开发一个接口给其他代码获取就好:

/**

* 获取进行了kerberos认证的configuration

*

*@return Configuration

*@author lshua

*@date 2018年7月27日

*/

public static Configuration getConfiguration() {

return conf;

}

代码在项目中已经验证通过了的,这里就不贴测试的代码了。配置正常应该是能正常使用的,最后附上相关的jar包gradle依赖:

// hadoop相关依赖,编译时需要。

compileOnly('org.apache.hadoop:hadoop-common:2.6.0')

compileOnly('org.apache.hadoop:hadoop-hdfs:2.6.0')

// 日志

compile 'org.slf4j:slf4j-api:1.7.12'

compile 'log4j:log4j:1.2.17'

emmmmmm有时候还要环境数据,大概说一下:

* jdk 1.7

* eclipse 4.7.2

* gradle 4.4.10

* CDH5.8.3-hadoop2.6.0

hadoop kerberos java_hadoop kerberos认证相关推荐

  1. 配置两个Hadoop集群Kerberos认证跨域互信(两个集群互通)

    配置两个Hadoop集群Kerberos认证跨域互信 两个Hadoop集群开启Kerberos验证后,集群间不能够相互访问,需要实现Kerberos之间的互信,使用Hadoop集群A的客户端访问Had ...

  2. hadoop生态的kerberos认证系列2-hadoop

    hadoop生态的kerberos认证系列2-hadoop 一.准备工作 二.配置 1.hdfs配置kerberos认证 1.1所有节点安装autoconf 1.2所有节点安装gcc 1.3安装jsv ...

  3. Hadoop安全之Kerberos

    简介 安全无小事,我们常常要为了预防安全问题而付出大量的代价.虽然小区楼道里面的灭火器.消防栓常年没人用,但是我们还是要准备着.我们之所以愿意为了这些小概率事件而付出巨大的成本,是因为安全问题一旦发生 ...

  4. 集成OpenLDAP与Kerberos实现统一认证(一):整合后台数据库

    文章目录 1. 写作背景 2. 既定目标 3. 环境说明 4. 安装操作 4.1 安装OpenLDAP 4.1.1 安装软件包 4.1.2 启动服务 4.1.3 初始化 4.1.4 禁止匿名访问 4. ...

  5. 集成OpenLDAP与Kerberos实现统一认证(三):基于SASL/GSSAPI深度集成

    文章目录 1. 写作背景 2. 既定目标 3. 重要概念 3.1 SASL 3.2 GSSAPI 3.3 SASL与GSSAPI的关系 3.4 saslauthd 3.5 Kerberos化 4. 核 ...

  6. kerberos java_[Kerberos] Java client访问kerberos-secured cluste

    使用java client访问kerberos-secured cluster,最重要的是先从admin那里拿到可用的keytab文件,用来作认证.接下来就是调整连接的配置问题.以下先用连接hdfs为 ...

  7. 报错:Ticket expired while renewing credentials 原因:Hue 集成Kerberos 导致Kerberos Ticket Renewer 起不来

    报错:Ticket expired while renewing credentials 原因:Hue 集成Kerberos 导致Kerberos Ticket Renewer 起不来 图片: 报错, ...

  8. Kerberos (一) --------- Kerberos 部署

    目录 一.Kerberos 概述 1. 什么是 Kerberos 2. Kerberos 术语 3. Kerberos 认证原理 二.Kerberos 安装 1. 安装 Kerberos 相关服务 2 ...

  9. hadoop KerberosUtil 做Kerberos认证

    网上找了一下,自己写了个KerberosUtil工具类,测试过可以用. 注意这个不是 org.apache.hadoop.security.authentication.util.KerberosUt ...

  10. 【kerberos】kerberos 认证 详情介绍

    文章目录 1.概述 2.简单认证 2.详细认证 1.概述 本文章是视频:Kerberos认证详解 笔记. Kerberos是诞生于上个世纪90年代的计算机认证协议,被广泛应用于各大操作系统和Hadoo ...

最新文章

  1. HarmonyOS之常用组件ToastDialog的功能和使用
  2. java技术文章在哪里看呢_谈论Java技术似乎无处不在,但究竟是什么呢?文章末尾有福利...
  3. Volcano 监控设计解读,一看就懂
  4. 四张图,读懂 BIO、NIO、AIO、多路复用 IO 的区别
  5. 小工厂规章制度_小工厂的规章制度(共8篇).doc
  6. 联想计算机Lenovo ThinkCentre M910t-NO76的重装
  7. w3cschool菜鸟教程php,JS实例学习笔记——w3cschool+菜鸟教程
  8. 浅谈进销存管理-【采购篇】
  9. java命令行打包war_手工命令行打包java工程为war包
  10. android 安装界面关闭程序,Android安装apk文件,不弹出安装完成的界面
  11. OSChina 周四乱弹 ——士可杀不可辱,这句话用英语怎么说?
  12. python+Selenium自动化操作Chrome模拟手机浏览器
  13. List和Map集合遍历的3种方式
  14. v-if 和 v-show的区别 vue面试题
  15. spring boot 配置Filter过滤器
  16. 【迅为iMX6Q】开发板烧写Uboot后串口无任何输出的问题解决
  17. 【总结】最全1.5万字长文解读7大方向人脸数据集v2.0版,搞计算机视觉怎能不懂人脸...
  18. 笔记本计算机提升性能,笔记本电脑越来越卡?教你如何有效的提升性能-笔记本电脑卡怎么办...
  19. Linux C 以read()读取文件并提取字符串
  20. 00后确实卷,公司新来的卷王,我们这帮老油条真干不过...

热门文章

  1. java 资格证_程序员从业资格证
  2. 手把手教你用Python分析微信聊天内容
  3. 腾讯游戏客户端一面准备
  4. 螺旋扩孔的效率高,但侧壁质量不如步进扩孔
  5. 基于主机的入侵检测优缺点_[转]基于网络和主机的入侵检测比较,各自优缺点...
  6. 基于TB67S109AFNAG的步进电机控制板分享
  7. spider pi 智能视觉六足机器人 开机介绍 0602
  8. python与数据挖掘 分类和预测
  9. python 请假审批系统_请假审批系统
  10. C语言main函数参数[转:C语言中文网]