HDFS Yarn Oozie Hive 权限管理

本文介绍了Hadoop生态中各个组件如HDFS、Oozie、YARN、Hive、Ranger和Sentry等的权限管理系统。从HDFS的基础权限到ACL的细粒度控制,再到Oozie中的代理用户配置,以及YARN中的队列权限设定,直至Hive的DoAs机制和Ranger/Sentry的权限管理。全面解析Hadoop中不同层面的安全性和权限管理。

HDFS

HDFS的权限系统和普通linux的权限系统一样 , 每个文件或者文件夹都有三种权限: 拥有者, 相关组和其他人. 

同时HDFS也支持ACL的权限机制, ACL是基础的权限机制的扩充版, 它丰富了基础的权限机制里"其他人"的权限. 可以为"其他人"指定 fine-grained的权限.

hdfs dfs -setfacl -m group:execs:r-- /sales-data
hdfs dfs -getfacl /sales-data

 

hdfs的超级用户是namenode进程使用的用户。更确切的说,就是你启动namenode那么你就是超级用户。超级用户的权限检查永远不会失败,所以可以干任何事情。没有固定的超级用户,当谁启动namenode谁就是超级用户。HDFS的超级用户不是namenode主机的超级用户,没有必要,但是他是所有集群的超级用户。此外,HDFS的实验者在个人工作站,方便就安装的超级用户没有任何配置。

此外管理员可以通过配置参数确定一个高级的组,这个组的成员也是超级用户。

 

Oozie

ProxyUser

在关系型数据库中很多数据库的任务要定期运行, 比如sqlserver中的job, 这些任务运行时很可能需要特定的文件permission, 所以需要以特定的账户来运行, 这就是proxy的一个典型使用场景. 在Hadoop中Oozie就经常有这样的需求.

在Hadoop的core-site.xml中配置proxy:

 

<property>
    <name>hadoop.proxyuser.oozie.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.oozie.groups</name>
    <value>*</value>
</property>

让oozie服务器可以在任意的主机上, 扮演任意组的用户.

比如用户A在某台服务器上提交了一个oozie任务, 如果没有proxy,默认情况oozie server就会使用oozie server的启动者的帐号去润行这个任务, 如果oozie server的启动者是管理员, 那么用户A就会获取了管理员权限, 这是很危险的. 所以proxy的目的就是确保用户A 的任务执行过程中, 它只有用户A的权限, 不能越级!

 

YARN

Capacity Scheduler

capacity scheduler可以详见这篇文章: https://www.cnblogs.com/bugsbunny/p/6773016.html

YARN的配置文件里可以定用户是否有向queue提交app的权限

使用yarn命令提交任务时可以通过参数指定

-D mapreduce.job.queuename=<pool name>

 

 

Hive

hive.server2.enable.doAs=True

是否使用提交hive查询的用户作为执行任务的用户, 否则使用启动hive server的用户来执行query

 

Ranger

Hortonworks企业版的Hadoop系统中通常用apache ranger来进行权限管理, 有图形界面. 使用ranger的话, 就可以把doAs=False了, 因为ranger可以自行控制权限, 不必再借助HDFS的权限管理了,当然你仍然可以把doAs 设置为True, 但可能会带来不必要的错误.

 

Sentry

Cloudera 发行版的hadoop使用sentry来控制权限. 现在Hive的配置中关闭DoAs, 开启sentry作为权限管理.

使用SQL 语句来管理role和权限:

GRANT SELECT ON DATABASE `database` TO ROLE `role_name`;
CREATE ROLE `role_name`;
GRANT ROLE `role_name1`, `role_name2` TO GROUP `group1`, GROUP `group2`;
  • When Sentry is enabled, you must use Beeline to execute Hive queries. Hive CLI is not supported with Sentry and must be disabled. See Disabling Hive CLI.

 

 

 

Hue

(Cloudera)使用Hue来执行Hive Query时, 创建的文件在hdfs里会属于组 supergroup, 拥有者的名字和Hue的登录用户名一致.

 

### Hive on YARN 的执行架构与工作流程 Hive 是一种构建在 Hadoop 之上的数据仓库工具,能够将 SQL 查询转换为 MapReduce 或 Tez 作业,并在 YARN 上执行。Hive on YARN 的执行架构主要由以下几个组件构成: - **Hive CLI / HiveServer2**:客户端接口,用于提交 SQL 查询。 - **Hive Metastore**:存储元数据信息,如表结构、分区信息等。 - **Hive Driver**:负责解析 SQL 语句,生成执行计划。 - **MapReduce / Tez**:作为执行引擎,运行由 Hive 生成的作业。 - **YARN**:资源调度框架,负责管理集群资源并调度任务执行。 当用户通过 Hive CLI 或 HiveServer2 提交 SQL 查询时,Hive Driver 会解析 SQL 语句并生成逻辑执行计划,随后将其转换为物理执行计划,最终生成 MapReduce 或 Tez 作业。这些作业会被提交到 YARN 集群中执行,YARN 负责资源分配和任务调度[^4]。 #### Hive on MapReduce 的执行流程 1. **SQL 解析与优化**:用户提交的 SQL 语句首先由 ParseDriver 解析为 AST(抽象语法树),然后通过 SemanticAnalyzer 进行语义分析,最终生成 QueryPlan。 2. **MapReduce 作业生成**:QueryPlan 被转换为 MapReduce 作业,其中 MapRedTask 是执行 MapReduce 任务的核心类。如果作业不是通过子进程运行,则直接调用 ExecDriver.execute 方法执行[^4]。 3. **作业提交与执行**:生成的 MapReduce 作业被提交到 YARN 集群,ResourceManager 分配 ApplicationMaster,NodeManager 执行具体的任务。 4. **结果返回**:任务执行完成后,结果返回给客户端。 #### Hive on Tez 的执行流程 Hive on Tez 相比于 Hive on MapReduce 具有更低的延迟和更高的性能。Tez 是一个更灵活的执行引擎,支持 DAG(有向无环图)任务执行。Hive 会将 SQL 查询转换为 Tez DAG 作业,提交到 YARN 集群执行。Tez 的 DAG 引擎能够优化任务执行路径,减少中间数据的写入磁盘操作,从而提升执行效率。 #### OozieHive 作业的集成 在 Hadoop 生态系统中,Oozie 可用于管理 Hive 作业的执行流程。Oozie 支持将 Hive 作业作为 workflow 中的一个 action 来执行。Hive action 仅负责触发 HQL 文件的执行,而具体的查询逻辑和作业成功保障由 HQL 文件本身负责[^1]。Oozie 的 workflow 用于定义任务的执行顺序,而 coordinator 则用于定时触发 workflow,其触发条件可以是数据文件生成时间等[^2]。 例如,一个典型的 Oozie Hive action 配置如下: ```xml <action name="hive-action"> <hive xmlns="uri:oozie:hive-action:0.5"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <script>hive-script.hql</script> <param>INPUT=${inputDir}</param> <param>OUTPUT=${outputDir}</param> </hive> <ok to="end"/> <error to="fail"/> </action> ``` 上述配置中,`script` 指定了 Hive 查询脚本的路径,`param` 用于传递参数。Oozie 将这些参数传递给 Hive 脚本,Hive 脚本负责执行具体的查询逻辑。 #### Hive on YARN 的部署与依赖 在实际部署中,Hive 需要与 YARN 集成,并依赖 HDFS 存储数据。HiveServer2Hive Metastore 通常作为独立服务运行,HiveServer2 负责接收客户端请求,Hive Metastore 管理元数据。YARN 负责资源调度和任务执行,HDFS 用于存储 Hive 表数据和中间结果。 Hue 作为 Hadoop 生态系统中的图形化界面工具,集成了 HiveHDFSYARNOozie,用户可以通过 Hue 提交 Hive 查询、管理 HDFS 文件、监控 YARN 作业执行状态,并设计 Oozie 工作流[^3]。 在执行 Hive on YARN 作业时,若出现以下错误: ``` Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. File does not exist: hdfs://nameservice1/user/yarn/mapreduce/mr-framework/3.0.0-cdh6.1.1-mr-framework.tar.gz ``` 该错误通常表示 YARN 无法找到 MapReduce 框架的依赖包,需要检查 Hadoop 配置和 HDFS 文件路径是否正确[^5]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱知菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值