Hadoop集群的kerberos认证

文章转载自http://www.cnblogs.com/easycloud/p/3724437.html
转载主要用于个人学习备查。

环境:

OS 版本: Centos6.4

Kerberos版本: krb5-1.10.3

环境配置

机器名

Ip地址

功能

安装模块

ganglia.localdomain

192.168.124.140

Kerberos server

krb5-libs

krb5-server

krb5-workstation

krb5-devel

hadoop1.localdomain

192.168.124.135

Namenode

Datanode

Jobtracker

tasktracker

krb5-libs

krb5-workstation

krb5-appl-clients

hadoop2.localdomain

192.168.124.136

Datanode

tasktracker

Krb5-libs

Krb5-workstation

krb5-appl-servers

hadoop3.localdomain

192.168.124.137

Datanode

tasktracker

Krb5-libs

Krb5-workstation

krb5-appl-servers

kerberos的安装,这里就不介绍了,我们创建了一个LOCALDOMAIN域的数据库

我们还是要给出配置文件的信息给大家参考

vi /etc/krb5.conf 主要修改realm

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = LOCALDOMAIN
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true

[realms]
LOCALDOMAIN = {
kdc = ganglia.localdomain
admin_server = ganglia.localdomain
}

[domain_realm]
.example.com = LOCALDOMAIN
example.com = LOCALDOMAIN

vi /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88

[realms]
LOCALDOMAIN = {

master_key_type = aes256-cts

acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
max_renewable_life=10d
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}

vi /var/kerberos/krb5kdc/kadm5.acl

/admin@LOCALDOMAIN

在hadoop中,kerberos需要创建principle和生成keytab文件。

  1. 创建principle

hadoop的kerberos认证,需要三种principle: hadoop, host, HTTP

addprinc -randkey hadoop/hadoop1.localdomain@LOCALDOMAIN

addprinc -randkey hadoop/hadoop2.localdomain@LOCALDOMAIN

addprinc -randkey hadoop/hadoop3.localdomain@LOCALDOMAIN

addprinc -randkey host/hadoop1.localdomain@LOCALDOMAIN

addprinc -randkey host/hadoop2.localdomain@LOCALDOMAIN

addprinc -randkey host/hadoop3.localdomain@LOCALDOMAIN

addprinc -randkey HTTP/hadoop1.localdomain@LOCALDOMAIN

addprinc -randkey HTTP/hadoop2.localdomain@LOCALDOMAIN

addprinc -randkey HTTP/hadoop3.localdomain@LOCALDOMAIN

使用listprincs查看一下结果

  1. 创建keytab文件:hadoop.keytab

ktadd -norandkey -k /root/hadoop.keytab hadoop/hadoop1.localdomain@LOCALDOMAIN

ktadd -norandkey -k /root/hadoop.keytab hadoop/hadoop2.localdomain@LOCALDOMAIN

ktadd -norandkey -k /root/hadoop.keytab hadoop/hadoop3.localdomain@LOCALDOMAIN

ktadd -norandkey -k /root/hadoop.keytab host/hadoop1.localdomain@LOCALDOMAIN

ktadd -norandkey -k /root/hadoop.keytab host/hadoop2.localdomain@LOCALDOMAIN

ktadd -norandkey -k /root/hadoop.keytab host/hadoop3.localdomain@LOCALDOMAIN

ktadd -norandkey -k /root/hadoop.keytab HTTP/hadoop1.localdomain@LOCALDOMAIN

ktadd -norandkey -k /root/hadoop.keytab HTTP/hadoop2.localdomain@LOCALDOMAIN

ktadd -norandkey -k /root/hadoop.keytab HTTP/hadoop3.localdomain@LOCALDOMAIN

查看一下结果

klist -kt /root/hadoop.keytab

将/root/hadoop.keytab 上传到hadoop1,hadoop2和hadoop3上

修改三个bug

Jdk,需要下载jce(Java Cryptography Extension)1.6.32不需要安装,低一点的版本需要。http://www.oracle.com/technetwork/java/javase/downloads/index.html
时间同步问题,kdc和运行hadoop的服务器,时间必须是同步的,如果在虚拟机中运行,如果时间不一致,也会造成credential失效。
Kdc默认不支持renew功能的,运行kinit 后”valid starting” and “renew until”的值是相同的时间,或者运行kinit –R后出现 kinit: Ticket expired while renewing credentials
有两种方法可以解决此问题,第一种方式就是在创建domain之前,在kdc.conf中增加 max_renewable_life = 7d,然后创建domain。第二种方式使用modprinc修改所有的principle,modprinc -maxrenewlife 7days krbtgt/ganglia.localdoamin/LOCALDOMAIN

modprinc -maxrenewlife 7days K/M/LOCALDOMAIN

modprinc -maxrenewlife 7days hadoop/hadoop1.localdomain/LOCALDOMAIN

modprinc -maxrenewlife 7days hadoop/hadoop2.localdomain/LOCALDOMAIN

modprinc -maxrenewlife 7days hadoop/hadoop3.localdomain/LOCALDOMAIN

modprinc -maxrenewlife 7days host/hadoop1.localdomain/LOCALDOMAIN

modprinc -maxrenewlife 7days host/hadoop2.localdomain/LOCALDOMAIN

modprinc -maxrenewlife 7days host/hadoop3.localdomain/LOCALDOMAIN

modprinc -maxrenewlife 7days HTTP/hadoop1.localdomain/LOCALDOMAIN

modprinc -maxrenewlife 7days HTTP/hadoop2.localdomain/LOCALDOMAIN

modprinc -maxrenewlife 7days HTTP/hadoop3.localdomain/LOCALDOMAIN

配置hadoop

vi conf/core-site.xml

<property><name>hadoop.tmp.dir</name><value>/home/hadoop/repo4/tmp</value><description>A base for other temporary directories.</description></property><property><name>fs.default.name</name><value>hdfs://hadoop1.localdomain:9000</value></property><property><name>hadoop.security.authorization</name><value>true</value></property><property><name>hadoop.security.authentication</name><value>kerberos</value></property>

修改conf/hadoop-env.sh,增加下面一句

export HADOOP_SECURE_DN_USER=hadoop

启动hdfs

在hadoop1上运行: bin/hadoop namenode

在hadoop1,hadoop2和hadoop3上运行: sudo bin/hadoop datanode

如果按照上面的步骤做,应该是可以能够启动hdfs的。

下面我们再配置一下mapred

vi conf/hdfs-site.xml

<property><name>dfs.replication</name><value>2</value></property><property><name>dfs.name.dir</name><value>/home/hadoop/repo4/name</value></property><property><name>dfs.data.dir</name><value>/home/hadoop/repo4/data</value></property><property><name>dfs.webhdfs.enabled</name><value>true</value></property><property><name>dfs.web.authentication.kerberos.principal</name><value>HTTP/_HOST@LOCALDOMAIN</value></property><property><name>dfs.namenode.kerberos.https.principal</name><value>host/_HOST@KERBEROS_HADOOP</value></property><property><name>dfs.web.authentication.kerberos.keytab</name><value>/home/hadoop/hadoop-1.2.1/conf/hadoop.keytab</value></property><property><name>dfs.namenode.keytab.file</name><value>/home/hadoop/hadoop-1.2.1/conf/hadoop.keytab</value></property><property><name>dfs.namenode.kerberos.principal</name><value>hadoop/_HOST@LOCALDOMAIN</value></property><property><name>dfs.namenode.kerberos.https.principal</name><value>host/_HOST@LOCALDOMAIN</value></property><property><name>dfs.secondary.namenode.keytab.file</name><value>/home/hadoop/hadoop-1.2.1/conf/hadoop.keytab</value></property><property><name>dfs.secondary.namenode.kerberos.principal</name><value>hadoop/_HOST@LOCALDOMAIN</value></property><property><name>dfs.secondary.namenode.kerberos.https.principal</name><value>host/_HOST@LOCALDOMAIN</value></property><property><name>dfs.datanode.keytab.file</name><value>/home/hadoop/hadoop-1.2.1/conf/hadoop.keytab</value></property><property><name>dfs.datanode.kerberos.principal</name><value>hadoop/_HOST@LOCALDOMAIN</value></property><property><name>dfs.datanode.kerberos.https.principal</name><value>host/_HOST@LOCALDOMAIN</value></property><property><name>dfs.datanode.address</name><value>0.0.0.0:1004</value></property><property><name>dfs.datanode.http.address</name><value>0.0.0.0:1006</value></property>

修改conf/mapred-site.xml

<property><name>mapred.job.tracker</name><value>http://hadoop1.localdomain:9001</value></property><property><name>mapreduce.jobtracker.kerberos.principal</name><value>mapred/_HOST@LOCALDOMAIN</value></property><property><name>mapreduce.jobtracker.kerberos.https.principal</name><value>host/_HOST@LOCALDOMAIN</value></property><property><name>mapreduce.jobtracker.keytab.file</name><value>/home/hadoop/hadoop-1.2.1/conf/mapred.keytab</value></property><property><name>mapreduce.tasktracker.kerberos.principal</name><value>mapred/_HOST@LOCALDOMAIN</value></property><property><name>mapreduce.tasktracker.kerberos.https.principal</name><value>host/_HOST@LOCALDOMAIN</value></property><property><name>mapreduce.tasktracker.keytab.file</name><value>/home/hadoop/hadoop-1.2.1/conf/mapred.keytab</value></property><property><name>mapred.task.tracker.task-controller</name><value>org.apache.hadoop.mapred.LinuxTaskController</value></property><property><name>mapreduce.tasktracker.group</name><value>hadoop</value></property>

修改后xml配置文件后,还需要做如下几步

  1. 修改tasktracker的配置文件

先修改conf/taskcontroller.cfg

mapred.local.dir=/home/hadoop/repo4/mapred/local

hadoop.log.dir=/home/hadoop/hadoop-1.2.1/logs

mapreduce.tasktracker.group=hadoop

banned.users=hdfs

在创建mapred.local.dir和hadoop.log.dir指定的目录

  1. 启动一下tasktracker来看一下 bin/hadoop tasktracker

出现了第一个异常: /etc/hadoop/taskcontroller.cfg not found,原因是bin/tasktracker默认使用etc/hadoop位置的taskcontroller.cfg

我们将taskcontroller.cfg复制到/etc/hadoop

sudo mkdir /etc/hadoop

sudo scp conf/taskcontroller.cfg /etc/hadoop/

  1. 启动tasktracer: bin/hadoop tasktracker

可执行文件task-controller的所属者必须是root

我们改变一下文件的所属者

sudo chown root:root bin/task-controller

  1. 继续启动tasktracker: bin/hadoop tasktracker

异常继续出现:配置的组必须等于task-controller所属组

我们继续改变一下文件的所属着和所属组

sudo chown root:hadoop bin/task-controller

  1. 继续启动tasktracker: bin/hadoop tasktracker

检查其他用户还有异常:task-controller其他用户不能有写和执行权限

运行命令去改变用户权限

sudo chmod o-rx bin/task-controller

  1. 继续启动tasktracker: bin/hadoop tasktracker

task-controller还需要被设置setuid标志位

运行命令去设置setuid标志位

sudo chmod u+s bin/task-controller

  1. 继续启动tasktracker: bin/hadoop tasktracker

用户的id比1000小

Cat /etc/passwd,查看一下用户id,然后设置参数min.user.id,通常普通用户创建,都是从500开始,因为我们可以修改sudo vi /etc/hadoop/taskcontroller.cfg

min.user.id=500

测试一下mapred程序,我们还是用wordcount作为例子

前面我们已经启动了hdfs,再启动mapred

在hadoop1运行:bin/hadoop jobtracker

在hadoop1,hadoop2和hadoop2上运行: bin/hadoop tasktracker

创建一个输入目录:

bin/hadoop dfs -mkdir /user/hadoop/input

上传一些文件

bin/hadoop dfs -copyFromLocal conf/* /user/hadoop/input/

查看一下结果

bin/hadoop dfs -ls /user/hadoop/input/

启动mapred程序

使用kerberos认证的缺点

存在单点失败:它需要KDC中心服务器的服务。当KDC挂掉时,整个系统有可能瘫痪。Hadoop花了很多时间来解决namenode的单点问题。幸亏这个缺陷可以通过使用复合Kerberos服务器和缺陷认证机制弥补
Kerberos需要时间同步技术,Kerberos要求参与通信的主机的时钟同步,如果主机的时钟与Kerberos服务器的时钟不同步,认证会失败。默认设置要求时钟的时间相差不超过10分钟。通常用网络时间协议后台程序(NTP)来保持主机时钟同步。
配置非常繁琐,通常配置好一个100个节点的服务器,需要三天时间。而且还会存在一个大的问题:用户权限的问题,原来系统上的数据不能访问。这一点还需要完善。
因为所有用户使用的密钥都存储于中心服务器中,危及服务器的安全的行为将危及所有用户的密钥。
总结

Kerberos是一种性能比较高的认证和授权,并且能够进行数据加密的安全系统,但是并不是特别适合hadoop,原因有三点:1. Hadoop集群节点数多,配置和维护一个使用kerberos系统高性能,稳定的hadoop集群难度非常高。2. Hadoop中的hdfs是一个文件系统,用户的认证和授权比较复杂,难度不低于linux系统的用户和组管理。加上kerberos后,用户和用户组的管理更加复杂,通常一个合适的用户不能访问hdfs上的文件。 3. Hadoop加上kerberos后,通常原来的用户和文件,可能都失效导致数据流失。尤其是一些根目录,往往需要格式化整个系统才能使用。增加一个新用户也是比较难的。因为要考虑各个节点间的访问权限。 我认为可能轻量级的LDAP会适合hadoop系统,后面有时间来实现一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 表备份还原

方法1&#xff1a; create table mdmuser20120801 as select * from mdmuser方法2&#xff1a;create table mdmuser20120801 as select * from mdmuser where 12;insert into mdmuser20120801 select * from mdmuser ;转载于:https://www.cnblogs.com/zhchsh/p/9087331.html

HDFS文件导出本地合并为一个文件

HDFS受限于Block大小&#xff0c;大文件会分割成多个块分布在多个节点&#xff0c;导出本地的时候直接用&#xff1a; hadoop fs -get 命令会在本地创建一个目录存放多个块。 要想合并为一个大文件可以这样&#xff1a; hadoop fs -getmerge hdfs:///user/nixm/news_rank1…

MPI对道路车辆情况的Nagel-Schreckenberg 模型进行蒙特卡洛模拟

平台Ubuntu 16.04&#xff0c;Linux下MPI环境的安装见链接&#xff1a;https://blog.csdn.net/lusongno1/article/details/61709460据 Nagel-Schreckenberg 模型&#xff0c;车辆的运动满足以下规则&#xff1a;1. 假设当前速度是 v &#xff0c;和前一辆车的距离为d。2. 如…

Kerberos:cannot get master principle

The server encountered an internal error that prevented it from fulfilling this request 问题背景&#xff1a; 集群新增节点&#xff0c;添加datanode、hawq segment、pxf服务后&#xff0c;原先连接Hbase在hawq 外表报错“获取不到master principle 舍弃中……”、“Th…

BZOJ3223文艺平衡树——非旋转treap

此为平衡树系列第二道&#xff1a;文艺平衡树您需要写一种数据结构&#xff0c;来维护一个有序数列&#xff0c;其中需要提供以下操作&#xff1a; 翻转一个区间&#xff0c;例如原有序序列是5 4 3 2 1&#xff0c;翻转区间是[2,4]的话&#xff0c;结果是5 2 3 4 1 输入 第一行…

Linux centOS 硬盘分区挂载

文章转载自&#xff1a;http://linux008.blog.51cto.com/2837805/548711 1、什么是分区&#xff1f; 分区是将一个硬盘驱动器分成若干个逻辑驱动器&#xff0c;分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。 2、为…

Ambari删除服务报错之CSRF protection is turned on

Ambari安装组件失败后执行 curl 删除服务报错 CSRF protection is turned on X-Requested_By HTTP Header is required 解决方案&#xff1a; vi /etc/ambari-server/conf/ambari-properties增加 api.csrfPrevention.enabledfalse重启Ambari: ambari-server restart重新执行s…

Android 中.aar文件生成方法与用法

https://i.cnblogs.com/EditPosts.aspx?opt1 无论是用Eclipse还是用Android Studio做android开发&#xff0c;都会接触到jar包&#xff0c;全称应该是&#xff1a;Java Archive&#xff0c;即java归档文件。在用AS的过程中&#xff0c;你会发现有aar这么个东西&#xff0c;经查…

Ambari实现HTTPS登陆

关于Ambari的安全、访问控制在这里有非常详细的介绍。 http://pivotalhd.docs.pivotal.io/docs/security-guide-ambari-2.1.2.html 另外还可以参考这一篇 https://community.hortonworks.com/articles/39865/enabling-https-for-ambariserver-and-troubleshootin.html Amba…

ffs, fls

linux内核中的宏ffs(x) linux内核中ffs(x)宏是平台相关的宏,在arm平台,该宏定义在 arch/arm/include/asm/bitops.h #define ffs(x) ({ unsigned long __t (x); fls(__t & -__t); }) __t & -__t 等于找到__t 第一个为1的位(从低位开始),并把该位保留为1其余位清0. 例…

PLSQL注册码

Product Code: 4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number: 601769 password: xs374ca

【JAVA学习】09.创建BootstrapTale列表页

【提要】只要JSON 返回了rows , total ,数据就会展示在列表 【步骤】 1、页面添加Table标签用于装载数据 <table class"table" id"userTable"> <tr><td>请输入查询条件查询</td></tr>   </table> 2、页面初始化请求…

安装ElasticSearch过程遇到的坑

采用默认安装时是可以成功安装的&#xff0c;但是只能在本机通过127.0.0.1:9200访问&#xff0c;修改: network.host: 为本机IP后&#xff0c;启动报错。 elasticsearch 5.3 安装过程中遇到了一些问题&#xff0c;这里简单记录一下 。 问题一&#xff1a;警告提示 [2016-11-…

JS的介绍

1.JS是什么 &#xff1f; JS是一门脚本语言&#xff0c;是一门解释性语言&#xff0c;是一种动态类型的语言&#xff0c;是一门基于对象的语言。 脚本语言和和编译语言的区别&#xff1a;脚本语言不需要编译&#xff0c;直接执行。编译语言是需要把代码翻译成计算机所认识的二进…

windows10上安装mysql

环境&#xff1a;windwos 10&#xff08;1511&#xff09; 64bit、mysql 5.7.14 一、下载mysql1. 在浏览器里打开mysql的官网http://www.mysql.com/2. 进入页面顶部的"Downloads"3. 打开页面底部的“Community(GPL) Downloads” 4. 在页面中间的位置找到我们windows上…

后台长期运行进程的三种方式

入门&#xff1a; nohup command > /var/log/test.log 2>&1 & 优雅&#xff1a; screen方式&#xff0c;通过screen 命令创建的环境下运行的终端命令&#xff0c;其父进程不是sshd 登陆会话&#xff0c;而是screen,这样就可以避免用户退出进程消失的问题&…

sql server 内存初探

sql server 内存初探 原文:sql server 内存初探一. 前言 对于sql server 这个产品来说&#xff0c;内存这块是最重要的一个资源&#xff0c; 当我们新建一个会话&#xff0c;相同的sql语句查询第二次查询时间往往会比第一次快&#xff0c;特别是在sql统计或大量查询数据输出时&…

hdfs查看目录大小文件大小

1、hadoop fs -du /test 查看test子目录大小 2、hadoop fs -count -q /test

使用TcpClient的例程

例子1&#xff1a; ///假定一切工作正常 ///连接后发送一次消息&#xff0c;然后不停接受消息并且打印 主要API说明 TcpClient clientnew TcpClient(); client.Connect("127.0.0.1",8888); NetworkStream streamclient.GetStream(); 发送&#xff1a; stream.Write(o…

Hawq超过最大允许连接数

Hawq默认master允许最大连接数250 segment最大连接数750 可以通过命令行或者Ambari更改连接数 1、 命令行 $ hawq config -c max_connections -v 1000 $ hawq config -c seg_max_connections -v 2000 $ hawq config -c max_prepared_transactions -v 1000 更改完成后&…