1. 介绍
本文介绍的Hadoop权限管理包括以下几个模块:
(1) 用户分组管理。用于按组为单位组织管理,某个用户只能向固定分组中提交作业,只能使用固定分组中配置的资源;同时可以限制每个用户提交的作业数,使用的资源量等
(2) 作业管理。包括作业提交权限控制,作业运行状态查看权限控制等。如:可限定可提交作业的用户;可限定可查看作业运行状态的用户;可限定普通用户只能修改自己作业的优先级,kill自己的作业;高级用户可以控制所有作业等。
想要支持权限管理需使用Fair Scheduler或者 Capacity Scheduler(作业管理需用到Hadoop的ACL(Access Control List)功能,启用该功能需选择一个支持多队列管理的调度器)
2. 基本术语
(1) 用户(User):Hadoop使用Linux用户管理,Hadoop中的用户就是Linux中的用户
(2) 分组(group):Hadoop使用Linux分组管理,Hadoop中的分组就是Linux中的分组
(3) 池(pool):Hadoop Fair Scheduler中的概念,一个pool可以是一个user,一个group,或者一个queue。
(4) 队列(Queue):队列是Hadoop提出的概念,一个Queue可以由任意几个Group和任意几个User组成。
3. Hadoop中Fair Scheduler与Capacity Scheduler介绍
3.1 Fair Scheduler
Facebook开发的适合共享环境的调度器,支持多用户多分组管理,每个分组可以配置资源量,也可限制每个用户和每个分组中的并发运行作业数量;每个用户的作业有优先级,优先级越高分配的资源越多。
3.2 Capacity Scheduler
Yahoo开发的适合共享环境的调度器,支持多用户多队列管理,每个队列可以配置资源量,也可限制每个用户和每个队列的并发运行作业数量,也可限制每个作业使用的内存量;每个用户的作业有优先级,在单个队列中,作业按照先来先服务(实际上是先按照优先级,优先级相同的再按照作业提交时间)的原则进行调度。
3.3 Fair Scheduler vs Capacity Scheduler
(1) 相同点
[1] 均支持多用户多队列,即:适用于多用户共享集群的应用环境
[2] 单个队列均支持优先级和FIFO调度方式
[3] 均支持资源共享,即某个queue中的资源有剩余时,可共享给其他缺资源的queue
(2) 不同点
[1] 核心调度策略不同。 计算能力调度器的调度策略是,先选择资源利用率低的queue,然后在queue中同时考虑FIFO和memory constraint因素;而公平调度器仅考虑公平,而公平是通过作业缺额体现的,调度器每次选择缺额最大的job(queue的资源量,job优先级等仅用于计算作业缺额)。
[2] 内存约束。计算能力调度器调度job时会考虑作业的内存限制,为了满足某些特殊job的特殊内存需求,可能会为该job分配多个slot;而公平调度器对这种特殊的job无能为力,只能杀掉这种task。
(3) 功能上的不同
Fair Scheduler不允许配置每个user使用的slot数上限,但允许抢占资源 ;而Capacity scheduler允许配置每个user使用的slot数上限,但暂时不支持资源抢占 。
4. 用户分组管理
以Fair Scheduler(http://hadoop.apache.org/common/docs/r0.20.0/fair_scheduler.html )为例,按以下步骤进行:
(1) 将Fair Scheduler的jar包拷贝到lib中
如:cp ${HADOOP_HOME}/contrib/fairscheduler/hadoop-fairscheduler-0.20.2+320.jar ${HADOOP_HOME}/lib/
(2) 配置Queue相关信息
具体参考:
http://hadoop.apache.org/common/docs/r0.20.2/cluster_setup.html#Configuring+the+Hadoop+Daemons
在mapred-site.xml中添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
< property >
< name >mapred.acls.enabled</ name >
< value >true</ value >
</ property >
< property >
< name >mapred.queue.names</ name >
< value >my_group,default</ value >
</ property >
< property >
< name >mapred.queue.my_queue.acl-submit-job</ name >
< value > my_group</ value >
</ property >
< property >
< name >mapred.queue.default.acl-administer-jobs</ name >
< value ></ value >
</ property >
< property >
< name >mapred.queue.my_queue.acl-administer-jobs</ name >
< value ></ value >
</ property >
|
说明:
【1】 属性mapred.queue.names是queue的所有名字,在这一名字中,必须有一个叫“default”的queue
【2】 每个queue均有一个属性mapred.queue.<queue-name>.acl-submit-job,用于指定哪些user或者group可以向该queue中提交作业
【3】每个queue均有一个属性mapred.queue.<queue-name>.acl-administer-jobs,用于指定哪些user或者group可以管理该queue中的所有作业,即可以kill作业,查看task运行状态。一般而言,对于每个队列,该选项为空即可,表示每个user只能管理自己的作业。
【4】 每个queue拥有的资源量和其他信息均在另外一个配置文件中指定(对于公平调度器,可以在fair-scheduler.xml中指定)
【5】 mapred.queue.<queue-name>.acl-submit-job和mapred.queue.<queue-name>.acl-administer-jobs配置方法如下:
用户和用户组之间用空格分开,用户之间用“,”分割,用户组之间用“,”分割,如果queue的属性值中只有用户组,则前面保留一个空格。
(3) 配置fair scheduler相关信息
在mapred-site.xml中添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
< property >
< name >mapred.jobtracker.taskScheduler</ name >
< value >org.apache.hadoop.mapred.FairScheduler</ value >
</ property >
< property >
< name >mapred.fairscheduler.poolnameproperty</ name >
< value >mapred.job.queue.name</ value >
</ property >
< property >
< name >mapred.fairscheduler.allocation.file</ name >
< value >/home/XXX/hadoop/conf/fair-scheduler.xml</ value >
</ property >
|
说明:
mapred.fairscheduler.poolnameproperty有三个可用值:默认情况下是user.name,即每个用户独自一个pool;group.name,即一个linux group一个pool,mapred.job.queue.name,即一个queue一个pool,如果要支持“作业管理”,需使用最后一种配置。
(4) 创建文件fair-scheduler.xml,并添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<? xml
version = "1.0" ?>
< allocations >
< pool
name = "my_queue" >
< minMaps >10</ minMaps >
< minReduces >10</ minReduces >
< maxRunningJobs >10</ maxRunningJobs >
< minSharePreemptionTimeout >300</ minSharePreemptionTimeout >
< weight >2.0</ weight >
</ pool >
< user
name = "bob" >
< maxRunningJobs >5</ maxRunningJobs >
</ user >
< poolMaxJobsDefault >25</ poolMaxJobsDefault >
< userMaxJobsDefault >2</ userMaxJobsDefault >
< defaultMinSharePreemptionTimeout >600</ defaultMinSharePreemptionTimeout >
< fairSharePreemptionTimeout >600</ fairSharePreemptionTimeout >
</ allocations >
|
说明:
【1】各个字段的含义
<pool></pool>之间配置的是每个pool的信息,主要如下:
(a) minMaps:该pool可使用的map slot数
(b) minReduces:该pool可使用的reduce slot数
(c) maxRunningJobs:该pool最大运行作业数
(d) minSharePreemptionTimeout:该pool抢占资源的时间间隔,即本属于自己的资源在改时间内拿不到便会抢占。
(e) Weight:pool的权重,该值越大,能够从共享区(有一些pool中的资源用不完,会共享给其他pool)中获取的资源越多。
<user></user>之间配置某个用户的约束:
maxRunningJobs:该用户可同时运行的作业数
<poolMaxJobsDefault></poolMaxJobsDefault>之间配置默认情况下每个pool最大运行作业数
<userMaxJobsDefault></userMaxJobsDefault>之间配置默认情况下每个user最大运行作业数
……
【2】 该配置文件中可动态修改无需重启Hadoop(修改后3s会被重新加载)
5. 作业管理
作业管理模块由Hadoop的ACL(http://hadoop.apache.org/common/docs/r0.20.2/service_level_auth.html )完成。
(1) 在core-site.xmll中配置以下属性:
1
2
3
4
5
6
7
|
< property >
< name >hadoop.security.authorization</ name >
< value >true</ value >
</ property >
|
(2) 配置${HADOOP_CONF_DIR}/hadoop-policy.xml
Hadoop有9个可配置的ACL属性,每个属性可指定拥有相应访问权限的用户或者用户组。这9个ACL属性如下:
这9个ACL的配置方法相同,具体如下:
每个ACL可配置多个用户,用户之间用“,”分割;可配置多个用户组,分组之间用“,”分割, 用户和分组之间用空格分割,如果只有分组,前面保留一个空格,如:
1
2
3
4
5
6
7
|
< property >
< name >security.job.submission.protocol.acl</ name >
< value >alice,bob group1,group2</ value >
</ property >
|
说明: 用户alice和bob, 分组group1和group2可提交作业
又如:
1
2
3
4
5
6
7
|
< property >
< name > security.client.protocol.acl </ name >
< value > group3</ value >
</ property >
|
说明:只有group3可访问HDFS
1
2
3
4
5
6
7
|
< property >
< name >security.client.protocol.acl</ name >
< value >*</ value >
</ property >
|
说明:所有用户和分组均可访问HDFS
注意,默认情况下,这9个属性不对任何用户和分组开放。
该配置文件可使用以下命令动态加载:
(1) 更新namenode相关属性: bin/hadoop dfsadmin –refreshServiceAcl
(2) 更新jobtracker相关属性:bin/hadoop mradmin -refreshServiceAcl
6. 提交作业
用户提交作业时,需用mapred.job.queue.name属性告诉Hadoop你要将作业提交到哪个Queue中,具体如下:
(1) 如果你是用Java编写Hadoop作业,用-D mapred.job.queue.name指明提交到哪个queue,如:
1
2
3
4
5
6
7
8
9
|
$HADOOP_HOME / bin / hadoop jar wordcount.jar wordcount
\
- D mapred. map .tasks = 1
\
- D mapred. reduce .tasks = 1
\
- D mapred.job.queue.name =
infrastructure \
Input
ouput
|
(2) 如果你使用Hadoop Pipes编写作业,用-D mapred.job.queue.name指明提交到哪个queue,如:
1
2
3
4
5
6
7
8
9
10
11
|
$HADOOP_HOME / bin / hadoop pipes \
- D hadoop.pipes.executable = / examples / bin / wordcount
\
- D hadoop.pipes.java.recordreader = true \
- D hadoop.pipes.java.recordwriter = true \
- D mapred.job.queue.name =
my_group \
- input
in - dir
- output out - dir
|
(3) 如果你使用Hadoop Streaming编写作业,用-D mapred.job.queue.name指明提交到哪个queue,如:
1
2
3
4
5
6
7
8
9
10
11
|
$HADOOP_HOME / bin / hadoop jar $HADOOP_HOME / hadoop - streaming.jar
\
- input
myInputDirs \
- output myOutputDir \
- mapper myPythonScript.py \
- reducer
/ bin / wc \
- D mapred.job.queue.name =
my_group
|
7. 参考资料
http://hadoop.apache.org/common/docs/r0.20.2/cluster_setup.html#Configuring+the+Hadoop+Daemons
http://hadoop.apache.org/common/docs/r0.20.2/service_level_auth.html
http://hadoop.apache.org/common/docs/r0.20.0/fair_scheduler.html
分享到:
相关推荐
### Hadoop权限管理详解 #### 一、概述 Hadoop是一种分布式存储与处理的大数据框架,为了确保数据的安全性及高效地进行资源管理,Hadoop提供了多层次的权限管理机制。本文将详细介绍Hadoop中的权限管理机制,包括...
5. **权限控制**:Django的内置认证和授权机制可以用于限制用户对文件和目录的操作权限,实现安全的文件共享。 6. **搜索功能**:提供文件和目录的搜索功能,方便用户查找所需内容。 7. **日志记录**:为了监控和...
Cloudera Hadoop 5&Hadoop高阶管理及调优课程,完整版,提供课件代码资料下载。 内容简介 本教程针对有一定Hadoop基础的学员,深入讲解如下方面的内容: ...4、Hadoop安全认证及授权管理 5、Hadoop各组件性能调优
5. **Hadoop认证和授权**:确保用户"xudsa"的认证信息正确无误,如Kerberos票证等。如果Hadoop集群启用了安全模式,用户必须进行有效的身份验证才能访问资源。 6. **Hadoop的HDFS审计日志**:通过分析HDFS审计日志...
这份文档将教授如何在Linux上进行基本操作,如文件管理、用户权限设置以及常用命令行工具的使用,这些都是在Hadoop环境中工作所必需的技能。 "大数据管理实验之二Hadoop的安装与部署.docx"详尽介绍了Hadoop的安装...
3. 安全机制:系统需具备权限管理、访问控制和数据加密功能,确保用户数据的安全。 4. 性能优化:通过缓存策略、负载均衡、数据预取等手段,提高系统响应速度和用户体验。 5. 监控与维护:监控Hadoop集群的运行...
- **Linux权限管理**:学习如何在Linux系统中管理和调整文件及目录的权限。 - **Hadoop故障排查指南**:参考更多关于Hadoop常见问题及其解决方案的文章和资料。 通过以上步骤和建议,可以有效地解决Hadoop Datanode...
由于Windows与Linux的文件系统和权限模型不同,`winutils.exe`的存在使得Hadoop可以适应Windows的环境,使得开发者和管理员能在不熟悉Linux的情况下也能管理Hadoop集群。 在Hadoop 2.6.0版本中,这些组件已经相对...
Apache Ambari 是一个由 Apache Software Foundation (ASF) 维护的开源项目,主要用于简化 Hadoop 集群的部署、管理和监控。它的核心特性在于提供了一个用户友好的 Web 界面,使得非技术背景的用户也能轻松管理 ...
例如,你可以使用`winutils.exe`来设置HDFS的权限,或者初始化Hadoop的本地文件系统。在Windows上搭建和运行Hadoop集群时,`winutils.exe`是不可或缺的一部分。 在实际使用中,确保这两个文件位于正确的路径并配置...
这个工具集包含了多种命令,如创建HDFS目录、设置HDFS权限、管理Hadoop守护进程等。在Linux上,这些功能通常由`hadoop`命令行工具完成,但在Windows上,由于操作系统本身的差异,这些操作需要通过`winutils.exe`来...
`winutils.exe`是运行Hadoop MapReduce作业和HDFS操作的必要组件,特别是在进行身份验证或管理HDFS文件权限时。 标签 "hadoop2.6 hadoop.dll winutils.exe" 明确指出这些元素属于Hadoop 2.6版本,这是Hadoop的一个...
- **权限授权管理框架**:Sentry和Ranger提供了权限授权管理功能。 ##### 7.2 MaxCompute安全 MaxCompute的安全体系基于“飞天+MaxCompute”架构,具体包括: - **“飞天+MaxCompute”安全架构**:提供了一套全面...
- Windows环境下运行Hadoop可能会遇到权限问题,确保以管理员身份运行命令提示符。 - Hadoop在Windows上运行效率较低,推荐在Linux环境下使用Hadoop以获得更好的性能。 通过以上步骤,你可以在Windows环境中成功...
这个文件包含了Windows平台上的Hadoop实用工具,比如用于设置HDFS的访问权限和配置Hadoop环境的命令行工具。安装并配置好winutils后,Windows用户可以通过Hadoop的HDFS API访问HDFS,进行数据读写操作。 在大数据...
如何诊断并解决Hadoop集群中的各种错误,以及如何实施用户权限控制、数据加密和网络安全措施,都是运维人员必须掌握的技能。 总之,《Hadoop技术详解》这本书会深入讲解Hadoop的各个方面,包括其核心组件、生态系统...
在Linux上,Hadoop的许多操作可以通过命令行完成,如设置HDFS的目录权限、启动或停止Hadoop服务等。但在Windows上,由于系统环境的不同,需要`winutils.exe`来模拟这些功能。这个工具通常位于Hadoop安装目录的`bin`...
其次,`winutils.exe`是Hadoop在Windows上的实用工具,它提供了与Hadoop生态系统交互的命令行工具,比如设置HDFS的权限、管理Hadoop守护进程等。在Linux环境下,相应的功能由`hadoop`命令行工具提供,但在Windows上...
`winutils.exe`是Hadoop在Windows环境下运行的一个必备工具,它提供了类似于Linux系统的命令行工具,用于执行诸如设置HDFS权限、启动和管理Hadoop服务等任务。在Linux中,这些功能通常由`hadoop`命令行工具完成,但...
它提供了诸如设置Hadoop环境变量、创建HDFS目录、管理HDFS文件权限等功能。在Windows上运行Hadoop时,`winutils.exe`是必不可少的,因为它的功能类似于Linux下的`hadoop`命令行工具。 在Hadoop 2.7.4版本中,这些...