zoukankan      html  css  js  c++  java
  • 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"的用户,而非ooziehive等.

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

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





  • 相关阅读:
    二维码在短信业务应用的初步构思
    Twproject Gantt开源甘特图功能扩展
    vscode 1.5安装体验
    OpenLiveWriter代码插件
    golang语言构造函数
    WebAPI接口返回ArrayList包含Dictionary对象正确解析
    golang枚举类型
    Gatekeeper Pattern 把关(守门人)模式
    .NET Core Windows环境安装与体验
    Federated Identity Pattern 联合身份模式
  • 原文地址:https://www.cnblogs.com/skyrim/p/7455259.html
Copyright © 2011-2022 走看看