1.hadoop用户代理简介

hadoop用户代理功能的作用是让超级用户superuser模拟一个普通用户来执行任务。比如用户joe通过oozie提交一个任务到集群上,如果不设置用户代理,那么就会以启动oozie(oozie)进程的用户来提交任务,这样任务就显示为oozie,无法判断是哪个用户提交了任务。当开始proxy功能后,会以superuser模拟joe来提交任务,任务的提交者是supersuer,但显示为joe.

superuser指启动各个守护进程的用户,如name hive oozie等。

2.配置

用户代理分为host group user三个方面,分别表示哪些主机上的superuser 、模拟哪些组、模拟哪些用户

修改core-site.xml

  <property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>hadoop1,hadoop2</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>hadoop</value>
</property>
<property>
<name>hadoop.proxyuser.hive.users</name>
<value>bob,joe</value>
</property>

上述三个配置分别表示,hadoop1 hadoop2上的hive用户可以superuser的方式模拟hadoop组的任务用户,还可以模拟bob和joe用户。

注意:host实限定了superuser所在的主机,而不是clinet所在的主机。

3.实验

上一节连接hiveserver2时关了hiveserver2的代理功能。这里测试代理功能。

修改core-site.xml:

  <property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>hadoop1,hadoop2</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>hadoop</value>
</property>
<property>
<name>hadoop.proxyuser.hive.users</name>
<value>bob,joe</value>
</property>

分发到各hadoop节点

修改hadoop1 hadoop2 上的hive-site.xml:

<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
</property>

其它hive做为beeline客户端,不设置hive-site.xml。

然后在hadoop1上启动hiveserver2。

在hadoop5上执行:

[hive@hadoop4 apache-hive-2.1.1]$ beeline
beeline> !connect jdbc:hive2://hadoop1:10000
Enter username for jdbc:hive2://hadoop1:10000: hive
Enter password for jdbc:hive2://hadoop1:10000: ****
Connected to: Apache Hive (version 2.1.1)
Driver: Hive JDBC (version 2.1.1)
17/04/21 18:10:54 [main]: WARN jdbc.HiveConnection: Request to set autoCommit to false; Hive does not support autoCommit=false.
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hadoop1:10000>

发现已经连接上来了,而之前是报 "User: hive is not allowed to impersonate hive".

当hadoop4上的用户通过beeline发起连接时,hadoop1上的hive用户作为hive的superuser代理了hadoop4上的hive用户。

另外,如果在hadoop3上启hiveserver2,再去连接,又会报错:

Enter username for jdbc:hive2://hadoop3:10000: hive
Enter password for jdbc:hive2://hadoop3:10000: ****
17/04/21 18:30:04 [main]: WARN jdbc.HiveConnection: Failed to connect to hadoop3:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop3:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): Unauthorized connection for super-user: hive from IP 172.18.0.13 (state=08S01,code=0)

再次验证了host参数只是用来限制superuser的主机而非client.

同样,只要是hadoop组,不管在哪台机器上都可以被代理。bob joe用户在任何机器上都可以被代理。

其它:除了hive外,凡是要使用hdfs 和 yarn的组件,都可以设置用户代理,比如oozie等。

[========]

2017/7/5补充:

昨晚在家安装beeline又遇到hadoop用户代理的问题.仔细思考了一下hadoop用户代理的机制:

http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/SecureMode.html

里有一段:

Some products such as Apache Oozie which access the services of Hadoop on behalf of end users need to be able to impersonate end users. You can configure proxy user using properties hadoop.proxyuser.$superuser.hosts along with either or both of hadoop.proxyuser.$superuser.groups and hadoop.proxyuser.$superuser.users.

注意第一句中的"end users",指的是实际使用oozie的用户,这个用户可能是bob john等(这些用户甚至不用存在于os上),但不是启动oozie服务的用户(一般是oozie),bob john不是以oozie的身份去执行任务,因此bob john是"end users".hadoop只对非"end users"开放通行,即各服务的启动用户,如oozie(oozie)\hive(hiveserver2)等.因此当"end user"使用oozie或者hiveserver2的服务时,就需要通过设置hadoop的用户代理功能.当启用hadoop用户代理后,yarn上的任务名就是"end users"的用户,而非oozie\hive等.

hive cli\sqoop客户端,本身没有"end users"用户,哪个用户启动就以哪个用户连接hadoop,而其中的用户验证过程是由hive cli\sqoop客户端和namenode一起完成的,因此不存在用户代理需要.

当hiveserver2关于自身的用户代理功能后,bob john执行的任务将以hive的名字提交,这时就没有"end users"了,所有的任务都是hive这个前端用户提交的,而hiveserver2和namenode一起完成了用户hive的验证,所以任务能提交成功.当这就是为什么hadoop对非"end users"放行.

HADOOP docker(五):hadoop用户代理 Proxy user的更多相关文章

  1. Hadoop教程(五)Hadoop分布式集群部署安装

    Hadoop教程(五)Hadoop分布式集群部署安装 1 Hadoop分布式集群部署安装 在hadoop2.0中通常由两个NameNode组成,一个处于active状态,还有一个处于standby状态 ...

  2. HADOOP docker(八):hadoop本地库

    前言2. Native Hadoop Library3. 使用本地库4. 本地库组件5. 支持的平台6. 下载7. 编译8. 运行时观察9. 检查本地库10. 如果共享本地库 小伙伴还记得每次启动hd ...

  3. docker 安装hadoop

    上一篇文章介绍了一些docker的基本命令,这篇文章来安装一个HADOOP 一.下载hadoop镜像 @~/git/github/docker-ambari (master)$ docker pull ...

  4. 使用Docker搭建Hadoop集群(伪分布式与完全分布式)

    之前用虚拟机搭建Hadoop集群(包括伪分布式和完全分布式:Hadoop之伪分布式安装),但是这样太消耗资源了,自学了Docker也来操练一把,用Docker来构建Hadoop集群,这里搭建的Hado ...

  5. 基于Docker搭建Hadoop+Hive

    为配合生产hadoop使用,在本地搭建测试环境,使用docker环境实现(主要是省事~),拉取阿里云已有hadoop镜像基础上,安装hive组件,参考下面两个专栏文章: 克里斯:基于 Docker 构 ...

  6. docker搭建Hadoop集群

    一个分布式系统基础架构,由Apache基金会所开发. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储. 首先搭建Docker环境,Docker版本大于1.3. ...

  7. Docker部署Hadoop集群

    Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...

  8. docker安装hadoop

    docker为hadoop的云化带来了极大便利,安装和应用也会更快更方便.进入正题: docker search hadoop 将会看到如下结果: INDEX NAME DESCRIPTION STA ...

  9. docker安装hadoop集群

    docker安装hadoop集群?图啥呢?不图啥,就是图好玩.本篇博客主要是来教大家如何搭建一个docker的hadoop集群.不要问 为什么我要做这么无聊的事情,答案你也许知道,因为没有女票.... ...

随机推荐

  1. 用IntelliJ IDEA 配置Maven并部署Maven工程到Tomcat(Windows中)

    近几天做一个新项目才接触Intellij IDEA 1.在官网下载了maven 解压并新建一个本地仓库文件夹 2.配置本地仓库路径 3.配置maven环境变量 4.在IntelliJ IDEA中配置m ...

  2. 在vue中使用 layui框架中的form.render()无效解决办法

    下面简单介绍在vue中使用 layui框架中的form.render()无效解决办法. 原文地址:小时刻个人技术博客 > http://small.aiweimeng.top/index.php ...

  3. day 24 内置模块re

    1.正则表达式,匹配字符串 正则表达式是对字符串操作的一种逻辑公式.我们一般使用正则表达式对字符串镜子那个匹配和过滤,使用正则的优缺点: 优点: 灵活,功能性强,逻辑性强 缺点: 上手难.一旦上手,会 ...

  4. day 12 生成器和生成器函数以及各种推导式

    一.生成器    本质就是迭代器. 我们可以直接执⾏__next__()来执⾏ 以下⽣成器 一个一个的创建对象 创建生成器的方式: 1.生成器函数 2.通过生成器 表达式来获取生成器 3.类型转换(看 ...

  5. 退出循环break,continue,return,goto分析

    /* 在循环中间设置单个或者多个退出点,可以使用的语句有:break语句.continue语句.goto语句. return */ (1)break :break语句语句用于循环或 switch 语句 ...

  6. centos install rabbitmq

    安装rabbitmq 需要环境上有erlang,没有安装的可以参照下面的内容进行安装: https://www.erlang-solutions.com/resources/download.html ...

  7. 组播___IGMP

    一.基本概念: 1.协议概述: 是运行在主机和与主机直连的路由器之间,其实现的功能是双向的:一方面,主机通过IGMP通知路由器希望接收某个特定组播组的信息:另一方面,路由器通过IGMP周期性地查询局域 ...

  8. 最小化的测试套件minimal_test的使用

    1:需要包含文件文#include <boost/test/minimal_test.hpp> 2:minimal_test内部实现了main(), 因此无需自己编写main()函数, 只 ...

  9. UNIX故障--sun m4000服务器故障硬盘更换案例

    一.故障诊断 查看messages日志c0d0t0这块盘不断报错,类型为:retryable,如下: root@gdhx # more /var/adm/messages Aug  5 16:43:0 ...

  10. WMI、WQL语言、WQL测试工具wbemtest.exe

    Windows Management Instrumentation (WMI) 是 Windows 操作系统的一个组件,允许通过编程方式访问应用程序.服务和其他计算机组件的管理信息(例如,配置设置和 ...