HADOOP docker(五):hadoop用户代理 Proxy user
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的更多相关文章
- Hadoop教程(五)Hadoop分布式集群部署安装
Hadoop教程(五)Hadoop分布式集群部署安装 1 Hadoop分布式集群部署安装 在hadoop2.0中通常由两个NameNode组成,一个处于active状态,还有一个处于standby状态 ...
- HADOOP docker(八):hadoop本地库
前言2. Native Hadoop Library3. 使用本地库4. 本地库组件5. 支持的平台6. 下载7. 编译8. 运行时观察9. 检查本地库10. 如果共享本地库 小伙伴还记得每次启动hd ...
- docker 安装hadoop
上一篇文章介绍了一些docker的基本命令,这篇文章来安装一个HADOOP 一.下载hadoop镜像 @~/git/github/docker-ambari (master)$ docker pull ...
- 使用Docker搭建Hadoop集群(伪分布式与完全分布式)
之前用虚拟机搭建Hadoop集群(包括伪分布式和完全分布式:Hadoop之伪分布式安装),但是这样太消耗资源了,自学了Docker也来操练一把,用Docker来构建Hadoop集群,这里搭建的Hado ...
- 基于Docker搭建Hadoop+Hive
为配合生产hadoop使用,在本地搭建测试环境,使用docker环境实现(主要是省事~),拉取阿里云已有hadoop镜像基础上,安装hive组件,参考下面两个专栏文章: 克里斯:基于 Docker 构 ...
- docker搭建Hadoop集群
一个分布式系统基础架构,由Apache基金会所开发. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储. 首先搭建Docker环境,Docker版本大于1.3. ...
- Docker部署Hadoop集群
Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...
- docker安装hadoop
docker为hadoop的云化带来了极大便利,安装和应用也会更快更方便.进入正题: docker search hadoop 将会看到如下结果: INDEX NAME DESCRIPTION STA ...
- docker安装hadoop集群
docker安装hadoop集群?图啥呢?不图啥,就是图好玩.本篇博客主要是来教大家如何搭建一个docker的hadoop集群.不要问 为什么我要做这么无聊的事情,答案你也许知道,因为没有女票.... ...
随机推荐
- 插入排序_c++
插入排序_c++ GitHub 文解 插入排序的核心思想是针对于 N 个元素进行排序时,共进行 K = (N-1) 次排序,第 M 次排序时将第 M + 1 个元素插入前 M 个元素中进行排序. 图解 ...
- JFinal DB.tx()事务回滚及lambda表达式应用
JFinal DB.tx()事务回滚 在要往数据库操作多条数据时,就需要用到事务,JFinal中有封装好的事务应用 写法: Db.tx(new IAtom(){ @Override public bo ...
- Yii2 联表查询数据丢失,即出现主键覆盖情况的解决方法
前段时间做项目,遇到一个问题,用yii2的AR连表查询数据的时候,理应该查出来更多的数据,但是实际得到的只有部分数据: 例如,有这么一个查询: $query = OperaHotelRoom::fin ...
- Yii中实现分页
$criteria = new CDbCriteria(); // 查询字段 $criteria->select = 'id, name, create_time'; // 排序 $criter ...
- linux 操作之压缩与解压
压缩与解压 压缩格式:zip , rar , 7z , iso , exe gzip (以下是命令操作) gzip [文件名] #压缩成gz格式 , 原来的文件消失 , 不支持目录. bzip2 - ...
- Django templates加载css/js/image等静态资源
配置步骤: 1.首先在应用下面创建static目录 2.将静态资源拷贝进去 3.在应用的settings.py文件中添加 import os BASE_PATH = os.path.dirname(o ...
- Hadoop-Hive学习笔记(2)
1.Hive基本操作 #创建数据库hive>create database name;#创建新表hive> create table students(id int,name string ...
- linux 网络编程 2---(TCP编程)
流程 服务器:server 创建套接字 socket( ) 填充服务器网络信息结构体 sockaddr_in 将套接字与服务器网络信息结构体绑定 bind( ) 将套接字设置为被动监听状态 liste ...
- Java和JDK版本的关系
JAVA的版本最开始是1995年的JDK Alpha and Beta版本,第二年发布JDK1.0版本之后就是JDK1.1,JDK1.2.到1998年,不再叫JDK了,而是叫J2SE,但是版本号还是继 ...
- git忽略项gitegnore配置
在git中如果想忽略掉某个文件, 不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法.这个文件每一行保存了一个匹配的规则 例如 # 此为注释 – 将被 Git 忽略 *.a # ...