IP、主机名规划

hadoop集群规划:

hostname IP hadoop 备注
hadoop1 110.185.225.158 NameNode,ResourceManager,DFSZKFailoverController,JournalNode  
hadoop2 110.185.225.166 NameNode,ResourceManager,DataNode,NodeManager,DFSZKFailoverController,JournalNode  
hadoop3 110.185.225.167 DataNode,NodeManager,JournalNode hdfs client

kerberos集群规划:

hostname IP kerberos 备注
krb1 10.112.29.9 server  
krb2 10.112.29.10 slave  
krb3 10.112.28.237 slave  

用户权限规划:

user:group daemons
hdfs:hadoop NameNode, Second NameNode, JournalNode, DataNode
yarn:hadoop ResourceManager, NodeManager
mapred:hadoop MapReduce, JobHistory Server

前提是hadoop集群和kerberos服务器都安装完毕:

hadoop集群搭建:http://www.cnblogs.com/kisf/p/7460235.html

kerberos服务器搭建:http://www.cnblogs.com/kisf/p/7473193.html

注意:主机名,和host一定要配置正确。检验:hostname

为什么要使用kerberos:

简单来说,没有做 kerberos 认证的 Hadoop,只要有 client 端就能够连接上。而且,通过一个有 root 的权限的内网机器,通过创建对应的 Linux 用户,就能够得到 Hadoop 集群上对应的权限。

而实行 Kerberos 后,任意机器的任意用户都必须现在 Kerberos 的 KDC 中有记录,才允许和集群中其它的模块进行通信。

kerberos认证:

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。

使用 Kerberos 时,一个客户端需要经过三个步骤来获取服务:

  • 认证:客户端向认证服务器发送一条报文,并获取一个含时间戳的 Ticket-Granting Ticket(TGT)。
  • 授权:客户端使用 TGT 向 Ticket-Granting Server(TGS)请求一个服务 Ticket。
  • 服务请求:客户端向服务器出示服务 Ticket ,以证实自己的合法性。

为此,Kerberos 需要 The Key Distribution Centers(KDC)来进行认证。KDC 只有一个 Master,可以带多个 slaves 机器。slaves 机器仅进行普通验证。Mater 上做的修改需要自动同步到 slaves。

另外,KDC 需要一个 admin,来进行日常的管理操作。这个 admin 可以通过远程或者本地方式登录。

在 Kerberos 安全机制里,一个 principal 就是 realm 里的一个对象,一个 principal 总是和一个密钥(secret key)成对出现的。

这个 principal 的对应物可以是 service,可以是 host,也可以是 user,对于 Kerberos 来说,都没有区别。

Kdc(Key distribute center) 知道所有 principal 的 secret key,但每个 principal 对应的对象只知道自己的那个 secret key 。这也是“共享密钥“的由来。

kerberos操作:

1. 生成principal

addprinc -randkey hdfs/hadoop1@JENKIN.COM
addprinc -randkey hdfs/hadoop2@JENKIN.COM
addprinc -randkey hdfs/hadoop3@JENKIN.COM
addprinc -randkey yarn/hadoop1@JENKIN.COM
addprinc -randkey yarn/hadoop2@JENKIN.COM
addprinc -randkey yarn/hadoop3@JENKIN.COM
addprinc -randkey mapred/hadoop1@JENKIN.COM
addprinc -randkey mapred/hadoop2@JENKIN.COM
addprinc -randkey mapred/hadoop3@JENKIN.COM addprinc -randkey HOST/hadoop1@JENKIN.COM
addprinc -randkey HOST/hadoop2@JENKIN.COM
addprinc -randkey HOST/hadoop3@JENKIN.COM

  

2. 生成keytab(文件夹需要提前建好)

xst -norandkey -k /var/kerberos/krb5kdc/keytab/hdfs.keytab hdfs/hadoop1@JENKIN.COM hdfs/hadoop2@JENKIN.COM hdfs/hadoop3@JENKIN.COM
xst -norandkey -k /var/kerberos/krb5kdc/keytab/yarn.keytab yarn/hadoop1@JENKIN.COM yarn/hadoop2@JENKIN.COM yarn/hadoop3@JENKIN.COM
xst -norandkey -k /var/kerberos/krb5kdc/keytab/mapred.keytab mapred/hadoop1@JENKIN.COM mapred/hadoop2@JENKIN.COM mapred/hadoop3@JENKIN.COM xst -norandkey -k /var/kerberos/krb5kdc/keytab/hdfs.keytab HTTP/hadoop1@JENKIN.COM HTTP/hadoop2@JENKIN.COM HTTP/hadoop3@JENKIN.COM
xst -norandkey -k /var/kerberos/krb5kdc/keytab/mapred.keytab HTTP/hadoop1@JENKIN.COM HTTP/hadoop2@JENKIN.COM HTTP/hadoop3@JENKIN.COM

  

验证生成的keytab是否可用

kinit -k -t /var/kerberos/krb5kdc/keytab/hdfs.keytab hdfs/hadoop1@JENKIN.COM

查看:

klist -e -k -t /var/kerberos/krb5kdc/keytab/hdfs.keytab

  

  

3. 将可用的keytab发至其他服务器:

scp /var/kerberos/krb5kdc/keytab/hdfs.keytab hadoop2:/var/kerberos/krb5kdc/keytab/
scp /var/kerberos/krb5kdc/keytab/hdfs.keytab hadoop3:/var/kerberos/krb5kdc/keytab/
scp /var/kerberos/krb5kdc/keytab/yarn.keytab hadoop2:/var/kerberos/krb5kdc/keytab/
scp /var/kerberos/krb5kdc/keytab/yarn.keytab hadoop3:/var/kerberos/krb5kdc/keytab/
scp /var/kerberos/krb5kdc/keytab/mapred.keytab hadoop2:/var/kerberos/krb5kdc/keytab/
scp /var/kerberos/krb5kdc/keytab/mapred.keytab hadoop3:/var/kerberos/krb5kdc/keytab/

  

4. 安装jsvc  ( 2.6.x  版本以上不需要通过jsvc 启动 datanode了)

但需要特别注意如下配置,hdfs-site.xml比须有:

<property>
<name>dfs.data.transfer.protection</name>
<value>integrity</value>
</property>

   

5. 修改hadoop配置

  以hdfs用户为例

core-site.xml 增加配置

        <!--kerberos config --> 
<property> 
<name>hadoop.security.authorization</name> 
<value>true</value> 
</property> 
<property> 
<name>hadoop.security.authentication</name> 
<value>kerberos</value> 
</property> 
<!—默认使用authentication,可使用integrity ,privacy --> 
<property> 
<name>hadoop.rpc.protection</name> 
<value>authentication</value> 
</property>
<property> 
<name>hadoop.security.auth_to_local</name> 
<value>DEFAULT</value> 
</property>

 hdfs-site.xml 增加配置

  <!-- General HDFS security config --> 
<property> 
<name>dfs.block.access.token.enable</name> 
<value>true</value> 
</property>  <!--NameNode security config --> 
<property> 
<name>dfs.encrypt.data.transfer</name> 
<value>true</value> 
</property>  <property> 
<name>dfs.https.address</name> 
<value>hadoop1:50470</value> 
</property>
<property> 
<name>dfs.https.port</name> 
<value>50470</value> 
</property> 
<property> 
<name>dfs.namenode.keytab.file</name> 
<value>/var/kerberos/krb5kdc/keytab/hdfs.keytab</value>
<!-- path to the HDFS keytab -->  
</property> 
<property> 
<name>dfs.namenode.kerberos.principal</name> 
<value>root/_HOST@JENKIN.COM</value> 
</property> 
<property> 
<name>dfs.namenode.kerberos.https.principal</name> 
<value>HTTP/_HOST@JENKIN.COM</value> 
</property> 
<!-- journalnode secure -->
<property>
<name>dfs.journalnode.keytab.file</name>
<value>/var/kerberos/krb5kdc/keytab/hdfs.keytab</value>
</property>
<property>
<name>dfs.journalnode.kerberos.principal</name>
<value>hdfs/_HOST@JENKIN.COM</value>
</property>
<property>
<name>dfs.journalnode.kerberos.internal.spnego.principal</name>
<value>HTTP/_HOST@JENKIN.COM</value>
</property>
<!--DataNode security config --> 
<property> 
<name>dfs.datanode.data.dir.perm</name> 
<value>700</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> <property> 
<name>dfs.datanode.keytab.file</name> 
<value>/var/kerberos/krb5kdc/keytab/hdfs.keytab</value>
<!-- path to the HDFS keytab --> 
</property> 
<property> 
<name>dfs.datanode.kerberos.principal</name> 
<value>hdfs/_HOST@JENKIN.COM</value> 
</property> 
<property> 
<name>dfs.datanode.kerberos.https.principal</name> 
<value>HTTP/_HOST@JENKIN.COM</value> 
</property>  
<!--web config--> 
<property> 
<name>dfs.web.authentication.kerberos.principal</name> 
<value>HTTP/_HOST@JENKIN.COM</value> 
</property> 
<property> 
<name>dfs.web.authentication.kerberos.keytab</name> 
<value>/var/kerberos/krb5kdc/keytab/hdfs.keytab</value> 
<description> 
           The Kerberos keytab file with the credentials for the   HTTP Kerberos principal used by Hadoop-Auth in the HTTP endpoint. 
</description>
</property>

mapred-site.xml增加配置:

<!--JobTracker security configs --> 
<property> 
<name>mapreduce.jobtracker.kerberos.principal</name> 
<value>mapred/_HOST@JENKIN.COM</value> 
</property> 
<property> 
<name>mapreduce.jobtracker.kerberos.https.principal</name> 
<value>HTTP/_HOST@JENKIN.COM</value> 
</property> 
<property> 
<name>mapreduce.jobtracker.keytab.file</name> 
<value>/var/kerberos/krb5kdc/keytab/mapred.keytab</value>
<!-- path to the MapReducekeytab --> 
</property>  
<!--TaskTracker security configs --> 
<property> 
<name>mapreduce.tasktracker.kerberos.principal</name> 
<value>mapred/_HOST@JENKIN.COM</value> 
</property> 
<property> 
<name>mapreduce.tasktracker.kerberos.https.principal</name> 
<value>HTTP/_HOST@JENKIN.COM</value> 
</property> 
<property> 
<name>mapreduce.tasktracker.keytab.file</name> 
<value>/var/kerberos/krb5kdc/keytab/mapred.keytab</value>
<!-- path to the MapReducekeytab --> 
</property>  
<!--jobhistory server security -->  
<property> 
<name>mapreduce.jobhistory.address</name> 
<value>10020</value>
</property>  
<property> 
<name>mapreduce.jobhistory.keytab</name> 
<value>/var/kerberos/krb5kdc/keytab/mapred.keytab</value> 
</property>
<property> 
<name>mapreduce.jobhistory.principal</name> 
<value>mapred/_HOST@JENKIN.COM</value> 
</property> 

yarn-site.xml增加配置:

<!-- yarn security -->  
<property> 
<name>yarn.resourcemanager.keytab</name> 
<value>/var/kerberos/krb5kdc/keytab/yarn.keytab</value> 
</property> 
<property> 
<name>yarn.resourcemanager.principal</name> 
<value>yarn/_HOST@JENKIN.COM</value> 
</property> 
<property> 
<name>yarn.nodemanager.keytab</name> 
<value>/var/kerberos/krb5kdc/keytab/yarn.keytab</value> 
</property> 
<property> 
<name>yarn.nodemanager.principal</name> 
<value>yarn/_HOST@JENKIN.COM</value> 
</property> 

服务启动:

./sbin/start-all.sh

namenode,journalnode,dfszkfcfailovercontroller,datanode,nodemanager,及resourcemanager正常启动即可用安全模式启动。

 

参考文档:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SecureMode.html  

  

hadoop HA+kerberos HA集群搭建的更多相关文章

  1. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  2. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  3. Ubuntu 12.04下Hadoop 2.2.0 集群搭建(原创)

    现在大家可以跟我一起来实现Ubuntu 12.04下Hadoop 2.2.0 集群搭建,在这里我使用了两台服务器,一台作为master即namenode主机,另一台作为slave即datanode主机 ...

  4. Hadoop HA高可用集群搭建(2.7.2)

    1.集群规划: 主机名        IP                安装的软件                            执行的进程 drguo1  192.168.80.149 j ...

  5. Hadoop HA 高可用集群搭建

    一.首先配置集群信息 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 .tar.gz -C /usr/hadoop/ 2.进入/usr/hadoop/zo ...

  6. Zookeeper(四)Hadoop HA高可用集群搭建

    一.高可就集群搭建 1.集群规划 2.集群服务器准备 (1) 修改主机名(2) 修改 IP 地址(3) 添加主机名和 IP 映射(4) 同步服务器时间(5) 关闭防火墙(6) 配置免密登录(7) 安装 ...

  7. Hadoop2学习记录(1) |HA完全分布式集群搭建

    准备 系统:CentOS 6或者RedHat 6(这里用的是64位操作) 软件:JDK 1.7.hadoop-2.3.0.native64位包(可以再csdn上下载,这里不提供了) 部署规划 192. ...

  8. 高可用Hadoop平台-HBase集群搭建

    1.概述 今天补充一篇HBase集群的搭建,这个是高可用系列遗漏的一篇博客,今天抽时间补上,今天给大家介绍的主要内容目录如下所示: 基础软件的准备 HBase介绍 HBase集群搭建 单点问题验证 截 ...

  9. Hadoop初期学习和集群搭建

    留给我学习hadoop的时间不多了,要提高效率,用上以前学的东西.hadoop要注重实战,把概念和原理弄清楚,之前看过一些spark,感觉都是一些小细节,对于理解hadoop没什么帮助.多看看资料,把 ...

  10. 第3章 Hadoop 2.x分布式集群搭建

    目录 3.1 配置各节点SSH无密钥登录 1.将各节点的秘钥加入到同一个授权文件中 2.拷贝授权文件到各个节点 3.测试无秘钥登录 3.2 搭建Hadoop集群 1.上传Hadoop并解压 2.配置H ...

随机推荐

  1. [SharePoint 2010]Sandboxed Solution (沙箱解決方案)

    現有的SharePoint 2007系統中,我們如果要安裝客製化的程式碼到系統中,我們必須製作一個解決方案包裝檔(Solution Package),然後在系統的中央管理後台中,真對整個伺服器農場Fa ...

  2. oracle怎么把一个用户下的表复制给另一个用户?(授予表权限)

    //把system读写权限 授权给scottselect 'Grant all on '||table_name||' to scott;' from all_tables where owner = ...

  3. PL/SQL Developer使用技巧、快捷键(转载)

    1.类SQL PLUS窗口:File->New->Command Window,这个类似于oracle的客户端工具sql plus,但比它好用多了. 2.设置关键字自动大写:Tools-& ...

  4. MyBatis基础入门

    1.MyBatis概述 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创 ...

  5. R语言中获取当前目录

    # 获取当前工作目录 getwd() # 设置工作目录 setwd()

  6. ERR_PTR,PTR_ERR还有IS_ERR函数详解

    内核中的函数常常返回指针,问题是如果出错,也希望能够通过返回的指针体现出来. 总体来说,如果内核返回一个指针,那么有三种情况:合法指针,NULL指针和非法指针. 1)合法指针:内核返回的指针一般是指向 ...

  7. Linux Shell 文本处理工具集锦--Awk―sed―cut(row-based, column-based),find、grep、xargs、sort、uniq、tr、cut、paste、wc

    本文将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: ...

  8. python基础-第十篇-10.2CSS基础

    CSS是Cascading Style Sheet的简称,中文为层叠样式表 属性和属性值用冒号隔开,以分号结尾 引入方式 行内式--在标签的style属性中设定CSS样式 <body> & ...

  9. git在使用中出现 refusing to merge unrelated histories如何解决?

    一.GIT的使用 # 设置用户名 git config --global user.name "zhaijihai" # 设置用户邮箱 git config --global us ...

  10. Shiro框架简介

    Apache Shiro是Java的一个安全框架.对比另一个安全框架Spring Sercurity,它更简单和灵活. Shiro可以帮助我们完成:认证.授权.加密.会话管理.Web集成.缓存等. A ...