Hadoop web页面的授权设定--转载

blog1

一、相关概念

  在默认情况下,Hadoop相关的WEB页面(JobTracker, NameNode, TaskTrackers and DataNodes)是不需要什么权限验证就可以直接进入的,谁都可以查看到当前集群上有哪些作业在运行,这对安全来说是很不合理的。我们应该限定用户来访问Hadoop相关的WEB页面,只有授权的用户才能看到自己授权的作业等信息,而不应该看到他不该看到的。其实Hadoop提供了简单的web页面的授权设定。
  和Hadoop的RPC授权一样,Hadoop相关的WEB页面也可以通过配置Kerberos利用HTTP SPNEGO协议来进行相应的授权控制,HTTP SPNEGO协议是支持Firefox和Internet Explorer浏览器。不过Hadoop WEB页面也是支持Hadoop的Pseudo/Simple授权控制,如果相应的授权开启了,用户需要在查看某个页面的时候,需要在URL的后面带上一个查询参数,如下:

http://localhost:50030/jobtracker.jsp?user.name=babu

  这样,jobtracker.jsp中将会获取到user.name参数的值,从而达到简单的授权控制。如果需要达到比较好的授权机制,用户可以自己写个Hadoop WEB页面授权的插件(比如我们可以实现自己的AuthenticatorHandler,可以参考Hadoop自带的Hadoop-auth.jar工具包)。
  

二、如何配置

  上面说了Hadoop支持对相关的WEB页面进行简单的授权,那么如何来设定呢?下面就来进行说明。
  下面的所有配置都是在$HADOOP_HOME/etc/hadoop/core-site.xml里面进行设定,设定好后,需要将core-site.xml同步到集群中的所有机器。
  1、hadoop.http.filter.initializers的值设定为org.apache.hadoop.security.AuthenticationFilterInitializer,它的默认值如下:

<property>

  <name>hadoop.http.filter.initializers</name>

  <value>org.apache.hadoop.http.lib.StaticUserWebFilter</value>

  <description>A comma separated list of class names. Each class in the list

  must extend org.apache.hadoop.http.FilterInitializer. The corresponding

  Filter will be initialized. Then, the Filter will be applied to all user

  facing jsp and servlet web pages.  The ordering of the list defines the

  ordering of the filters.</description>

</property>

  2、设定hadoop.http.authentication.type的值,这个属性的值支持simple、kerberos、#AUTHENTICATION_HANDLER_CLASSNAME#;默认配置是simple。

<property>

  <name>hadoop.http.authentication.type</name>

  <value>simple</value>

  <description>

    Defines authentication used for Oozie HTTP endpoint.

    Supported values are: simple|kerberos | #AUTHENTICATION_HANDLER_CLASSNAME#

  </description>

</property>

  3、hadoop.http.authentication.token.validity这个值设定本次授权的token多长时间有效,单位是秒。默认配置是3600秒。
  4、hadoop.http.authentication.signature.secret.file设定signature secret file文件存放的绝对路径,这个文件需要同步到集群中所有的JobTracker, NameNode, DataNode 和TastTracker,它的默认值是${user.home}/hadoop-http-auth-signature-secret。需要保证signature secret file文件可以被启动JobTracker, NameNode, DataNode 和TastTracker进程的用户可读。
  5、hadoop.http.authentication.cookie.domain:以Cookie存储认证Token的域名,为了能够使得授权得以生效,需要配置一个正确的值,该属性是默认值为空。
  6、hadoop.http.authentication.simple.anonymous.allowed:在simple授权模式下,是否允许匿名用户请求。默认值是ture,也就是允许。
  7、hadoop.http.authentication.kerberos.principal:在kerberos授权模式下,是否允许HTTP终端用 Kerberos principal,这个属性的值必须是以'HTTP/'开头。默认的值是HTTP/_HOST@$LOCALHOST。
  8、hadoop.http.authentication.kerberos.keytab: keytab file文件的存放地址,默认值是$user.home/hadoop.keytab.i。

 

blog2

core-siet.xml配置文件中增加如下三行

<property>

                <name>hadoop.http.filter.initializers</name>

                <value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>

</property>

<property>

                <name>hadoop.http.authentication.type</name>

                <value>simple</value>

</property>

<property>

               <name>hadoop.http.authentication.signature.secret.file</name>

               <value>/hadoop/hdfs/hadoop-http-auth-signature-secret</value>

</property>

hadoop.http.authentication.simple.anonymous.allowed:在simple授权模式下,是否允许匿名用户请求。默认值是ture,也就是允许。 将这个参数改为flase;

创建/hadoop/hdfs/hadoop-http-auth-signature-secret文件,里面输入自己想要的密码

重启hadopp集群

页面访问

http://localhost:50070?user.nam=你的密码

<think>好的,我需要帮助用户解决他们遇到的Class loading error,具体是找不到AmIpFilter类的问题。根据用户提供的引用内容,用户已经尝试复制了hadoop-lzo-0.4.19.jar到lib目录,但问题依旧存在。用户现在想确认Hadoophadoop-yarn-server-webproxy组件是否存在,并希望得到解决异常的方案。 首先,我需要回顾之前的回答,看看是否有遗漏或需要补充的地方。之前的解决方案提到了依赖缺失、类路径配置错误、环境变量问题和服务器缓存。用户现在可能已经检查了部分步骤,但问题仍未解决,需要更详细的指导。 用户引用的错误日志显示,在复制hadoop-lzo的jar后,仍然出现ClassNotFoundException,说明hadoop-yarn-server-web-proxy的jar可能没有正确引入。需要确认该组件的存在以及路径是否正确。 接下来,我应该分步骤详细说明如何确认组件是否存在,并提供具体的检查方法。比如,通过Hadoop安装目录查找相关jar,检查项目依赖,环境变量设置是否正确,以及如何验证类载等。 此外,用户提到的是JanusGraph与Hadoop集成的情况,可能需要考虑两者的版本兼容性,以及是否有额外的配置步骤,比如修改JanusGraph的配置文件。 还需要注意用户可能遇到的常见问题,比如依赖冲突,特别是如果用户使用了不同的Hadoop版本,或者构建工具中的依赖管理不当,导致版本不一致。 最后,应该提供验证步骤,确保用户按照指导操作后问题得到解决,并生成相关问题帮助用户进一步排查可能的问题。</think>### 分步解决方案 根据您提供的错误日志和引用信息,`AmIpFilter`类属于**Hadoop YARN Web代理组件**(`hadoop-yarn-server-web-proxy`)。以下是具体验证和修复步骤: --- #### **1. 确认Hadoop组件是否存在** **验证目标**: 确保Hadoop安装目录中包含`hadoop-yarn-server-web-proxy`的JAR文件。 **操作步骤**: 1. **定位Hadoop安装路径** 执行以下命令,确认`HADOOP_HOME`环境变量是否正确: ```bash echo $HADOOP_HOME # 输出应为Hadoop安装路径,如/usr/local/hadoop-3.3.6 ``` 若未设置,需手动指定路径(例如`/usr/local/hadoop`)。 2. **检查组件JAR文件** 进入Hadoop的YARN模块目录,查找`hadoop-yarn-server-web-proxy`的JAR包: ```bash ls $HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-server-web-proxy-*.jar ``` - **预期结果**:应显示类似`hadoop-yarn-server-web-proxy-3.3.6.jar`的文件。 - **若不存在**:说明Hadoop安装不完整,需重新安装或补充组件[^1]。 --- #### **2. 修复类载异常** **核心问题**: `AmIpFilter`类位于`hadoop-yarn-server-web-proxy`的JAR中,但未正确部署到应用(如JanusGraph)的类路径。 **操作步骤**: 1. **手动复制缺失的JAR** 将Hadoop的`web-proxy`组件和依赖的`hadoop-lzo`包复制到JanusGraph的`lib`目录: ```bash # 复制web-proxy组件 cp $HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-server-web-proxy-*.jar $janusgraph-home/lib/ # 复制LZO压缩支持(根据您的引用[1],已执行此步骤,但需确认版本一致性) cp $HADOOP_HOME/share/hadoop/tools/lib/hadoop-lzo-0.4.19.jar $janusgraph-home/lib/ ``` 2. **验证类路径包含性** 检查JanusGraph启动脚本(如`janusgraph-server.sh`)是否包含`lib`目录: ```bash # 示例启动命令类路径配置 java -cp "$janusgraph-home/lib/*:...其他路径..." ... ``` 若未包含`lib/*`,需在脚本中添`$janusgraph-home/lib/*`到`CLASSPATH`。 3. **清理缓存并重启服务** Jetty等服务器可能缓存旧类文件,需清理工作目录后重启: ```bash rm -rf $janusgraph-home/tmp/* # 清理临时文件 $janusgraph-home/bin/janusgraph-server.sh restart # 重启服务 ``` --- #### **3. 版本兼容性检查** **潜在问题**: Hadoop版本与JanusGraph集成的Hadoop客户端版本不匹配(例如Hadoop 3.x与JanusGraph依赖的Hadoop 2.x)。 **操作步骤**: 1. **检查项目依赖声明** 若使用Maven/Gradle,确认`hadoop-yarn-server-web-proxy`版本与Hadoop集群一致: ```xml <!-- Maven示例:版本需与HADOOP_HOME中的版本一致 --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-yarn-server-web-proxy</artifactId> <version>3.3.6</version> </dependency> ``` 2. **排除冲突依赖** 使用`mvn dependency:tree`检查是否存在其他组件(如Spark、HBase)引入了旧版Hadoop依赖: ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.3.6</version> <exclusions> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-yarn-server-web-proxy</artifactId> </exclusion> </exclusions> </dependency> ``` --- #### **4. 验证类载** **操作步骤**: 1. **手动测试类载** 执行以下命令,确认JVM能否找到`AmIpFilter`类: ```bash java -cp "$janusgraph-home/lib/*" org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter ``` - **成功**:无输出或提示缺少主类(正常,因该类是Filter,非可执行类)。 - **失败**:若仍报`ClassNotFoundException`,说明JAR未正确部署或损坏。 2. **检查日志详细信息** 查看JanusGraph服务启动日志,定位类载失败的具体原因: ```bash tail -n 100 $janusgraph-home/logs/janusgraph-server.log ``` --- ### 关键总结 | 问题根源 | 解决动作 | 验证方法 | |-------------------------|---------------------------------------|------------------------------| | `hadoop-yarn-server-web-proxy`缺失 | 复制JAR到`lib/`目录 | 检查`lib/`下是否存在对应JAR | | 版本冲突 | 统一Hadoop组件版本或排除冲突依赖 | `mvn dependency:tree` | | 类路径配置错误 | 修正启动脚本中的`CLASSPATH` | 检查启动命令参数 | --- ### 相关问题 1. 如何排查Hadoop依赖冲突导致的`NoClassDefFoundError`? 2. JanusGraph集成Hadoop时需要哪些额外配置? 3. Jetty服务器类载机制与Tomcat有何区别?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值