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. 最新SQL手工注入语句&SQL注入大全

    看看下面的1.判断是否有注入;and 1=1;and 1=2 2.初步判断是否是mssql;and user>0 3.判断数据库系统;and (select count(*) from syso ...

  2. jQuery mouseove和mouseout事件不断触发

    关于锋利的jQuery第三章结尾提示图片效果(鼠标放在图片上会出现一个大图跟随鼠标移动)实现时mouseove和mouseout事件不断触发的问题 html <ul class="bo ...

  3. .Net core 还原Nuget包失败的解决方法

    今天是2018最后一天了,真是神奇的一年啊,写个博客压压惊,来年继续加油吧..... 正文: 当我们打开.net core 项目时候,发现输出提示nuget包还原失败,这个时候首先要考虑.Net Co ...

  4. MySQL索引的使用及注意事项

    索引是存储引擎用于快速找到记录的一种数据结构.索引优化应该是对查询性能优化最有效的手段了.索引能够轻易将查询性能提高几个数量级,"最优"的索引有时比一个"好的" ...

  5. word 或者 WPS 使用两个目录的时候去掉中间的空格间隙

    在生成图表目录时,发现Office word图表目录中多个标题之间的空行无法删除,我是自己建的标签,比如“图1-”.“图2-”…….“表1-”.“表2-”…… 发现“图1-”.“图2-”…….“表1- ...

  6. idea 聚合项目里如果子项目引用不到父类的maven应用

    idea 聚合项目里如果子项目引用不到父类的maven应用,可以点看子类pom.xml文件,然后右键---->maven----->Reimport即可 点击右边子项目的maven---& ...

  7. linux搭建的LNMP环境下的mysql授权远程连接

    用phpstudy搭建的lnmp环境下mysql授权远程连接 简单高效 这是因为mysql 里的优先级不是所有人(提前检查防火墙是关闭状态)1.使用phpstudy安装的mysql没有放置到可以直接调 ...

  8. Altium Designer常用快捷键

    一:Altium原理图快捷键:    Shift+左键选择    :实现多个目标选择    Ctrl+左键拖动    :保持连线拖动目标        Shift+c       :清除当前过滤(?? ...

  9. 虚拟机搭建hadoop的步骤

    1.首先是安装Vmware Workstation,下载地址:https://www.vmware.com/products/workstation-player/workstation-player ...

  10. SQL Server服务器角色和数据库角色描述

    服务器角色 bulkadmin 这个角色可以运行BULK INSERT语句.该语句允许从文本文件中将数据导入到SQL Server2008数据库中,为需要执行大容量插入到数据库的域帐号而设计. dbc ...