1. 首页 > Hadoop教程 > 正文

大数据教程FG159-Hadoop多租户架构最佳实践

本文详细介绍Hadoop多租户架构最佳实践,包括多租户概念、权限管理、资源隔离、认证配置等内容,风哥教程参考Hadoop、Ranger、Kerberos官方文档,适合大数据安全管理员使用。学习交流加群风哥微信: itpux-com

Part01-基础概念与理论知识

1.1 多租户架构概述

多租户架构指多个租户(用户/团队/组织)共享同一套Hadoop集群,同时保证租户间的资源隔离、数据安全和服务质量。更多视频教程www.fgedu.net.cn

多租户核心目标:

  • 资源隔离:各租户独立使用资源,互不影响
  • 数据安全:租户数据隔离,权限控制
  • 服务质量:保证各租户的SLA
  • 成本优化:资源共享,降低成本
  • 管理统一:统一的用户和权限管理
  • 可扩展性:支持租户的动态增加和删除

1.2 多租户模型介绍

常见的多租户模型:

# 多租户模型
物理隔离模型:
– 每个租户独立的集群
– 完全隔离
– 成本高
– 资源利用率低

虚拟化模型:
– 使用虚拟机或容器
– 较好的隔离
– 成本适中
– 需要额外的虚拟化层

逻辑隔离模型:
– 共享物理资源
– 通过软件隔离
– 成本低
– 资源利用率高
– 需要完善的权限和资源管理

# Hadoop多租户采用逻辑隔离模型
– YARN队列:资源隔离
– HDFS ACL:数据隔离
– Ranger/Sentry:权限管理
– Kerberos:认证安全

1.3 Hadoop多租户组件

Hadoop多租户核心组件:

  • 认证:Kerberos、LDAP
  • 授权:Apache Ranger、Apache Sentry
  • 资源管理:YARN Capacity/Fair Scheduler
  • 数据隔离:HDFS ACL、HDFS Quota
  • 审计:HDFS Audit Log、Ranger Audit
风哥提示:Apache Ranger是目前最流行的Hadoop权限管理工具,支持HDFS、Hive、HBase、Kafka、Spark等组件的统一权限管理。学习交流加群风哥QQ113257174

Part02-生产环境规划与建议

2.1 租户规划

租户规划要点:

# 租户分类
生产租户:
– 生产业务
– 高优先级
– 资源保障

开发租户:
– 开发测试
– 中优先级
– 资源弹性

测试租户:
– 测试验证
– 低优先级
– 资源限制

# 租户命名规范
组织级租户:
– fgedu_org_finance
– fgedu_org_marketing
– fgedu_org_tech

项目级租户:
– fgedu_proj_etl
– fgedu_proj_analysis
– fgedu_proj_ml

用户级租户:
– fgedu_user_zhangsan
– fgedu_user_lisi

# 租户资源规划示例
生产租户(60%):
– fgedu_org_finance: 25%
– fgedu_org_marketing: 20%
– fgedu_org_tech: 15%

开发租户(30%):
– fgedu_proj_etl: 15%
– fgedu_proj_analysis: 10%
– fgedu_proj_ml: 5%

测试租户(10%):
– 测试共用

2.2 资源隔离方案

资源隔离方案:

# YARN队列隔离
– 每个租户对应一个YARN队列
– 配置队列容量
– 配置最大容量
– 配置用户限制
– 配置ACL

# HDFS目录隔离
– 每个租户独立的HDFS目录
– 配置目录权限
– 配置目录Quota
– 配置ACL

# 示例目录结构
/bigdata/fgdata/
├── fgedu_org_finance/
│ ├── warehouse/
│ ├── tmp/
│ └── archive/
├── fgedu_org_marketing/
│ ├── warehouse/
│ ├── tmp/
│ └── archive/
└── fgedu_org_tech/
├── warehouse/
├── tmp/
└── archive/

# Hive数据库隔离
– 每个租户独立的Hive数据库
– 配置数据库权限
– 配置数据库Location

# 示例数据库
fgedu_org_finance_db
fgedu_org_marketing_db
fgedu_org_tech_db

2.3 安全规划

安全规划要点:

安全规划:

  • 认证:Kerberos + LDAP
  • 授权:Ranger统一权限管理
  • 审计:完整的审计日志
  • 加密:数据传输加密、数据存储加密
  • 网络:网络隔离、防火墙

更多学习教程公众号风哥教程itpux_com

Part03-生产环境项目实施方案

3.1 Ranger权限管理配置

3.1.1 Ranger安装配置

# 1. 下载Ranger
cd /bigdata/app
wget https://archive.apache.org/dist/ranger/2.4.0/ranger-2.4.0-admin.tar.gz
tar -zxvf ranger-2.4.0-admin.tar.gz
ln -s ranger-2.4.0-admin ranger-admin

# 2. 配置数据库
mysql -u root -p
CREATE DATABASE ranger DEFAULT CHARACTER SET utf8;
CREATE USER ‘ranger’@’%’ IDENTIFIED BY ‘fgedu123’;
GRANT ALL PRIVILEGES ON ranger.* TO ‘ranger’@’%’;
FLUSH PRIVILEGES;

# 3. 配置install.properties
cd /bigdata/app/ranger-admin
vi install.properties

# 关键配置
DB_FLAVOR=MYSQL
SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
db_root_user=root
db_root_password=fgedu123
db_host=fgedu-mysql
db_name=ranger
db_user=ranger
db_password=fgedu123

rangerAdmin_host=fgedu-ranger
rangerAdmin_port=6080

# 4. 安装Ranger Admin
./setup.sh

# 5. 启动Ranger Admin
ranger-admin start

# 6. 访问Ranger Web UI
http://fgedu-ranger:6080
# 默认用户名: admin
# 默认密码: admin

# 7. 配置HDFS插件
# 下载ranger-2.4.0-hdfs-plugin.tar.gz
tar -zxvf ranger-2.4.0-hdfs-plugin.tar.gz
cd ranger-2.4.0-hdfs-plugin
vi install.properties

# 关键配置
POLICY_MGR_URL=http://fgedu-ranger:6080
REPOSITORY_NAME=fgedu_hdfs
XAAUDIT.SOLR.ENABLE=false

# 8. 启用HDFS插件
./enable-hdfs-plugin.sh

# 9. 重启HDFS
hdfs –daemon stop namenode
hdfs –daemon start namenode

# 10. 在Ranger中配置HDFS Service
# Web UI中添加HDFS Service
# 配置NameNode地址
# 配置用户

3.2 Sentry权限管理配置

3.2.1 Sentry安装配置

# 1. 下载Sentry
cd /bigdata/app
wget https://archive.apache.org/dist/sentry/2.1.0/apache-sentry-2.1.0-bin.tar.gz
tar -zxvf apache-sentry-2.1.0-bin.tar.gz
ln -s apache-sentry-2.1.0-bin sentry

# 2. 配置数据库
mysql -u root -p
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8;
CREATE USER ‘sentry’@’%’ IDENTIFIED BY ‘fgedu123’;
GRANT ALL PRIVILEGES ON sentry.* TO ‘sentry’@’%’;
FLUSH PRIVILEGES;

# 3. 配置sentry-site.xml
cat > /bigdata/app/sentry/conf/sentry-site.xml << ‘EOF’
<?xml version=”1.0″?>
<configuration>
<property>
<name>sentry.service.admin.group</name>
<value>hive,hdfs,yarn</value>
</property>
<property>
<name>sentry.service.allow.connect</name>
<value>hive,hdfs,yarn</value>
</property>
<property>
<name>sentry.verify.schema.version</name>
<value>false</value>
</property>
<property>
<name>sentry.store.jdbc.url</name>
<value>jdbc:mysql://fgedu-mysql:3306/sentry</value>
</property>
<property>
<name>sentry.store.jdbc.user</name>
<value>sentry</value>
</property>
<property>
<name>sentry.store.jdbc.password</name>
<value>fgedu123</value>
</property>
<property>
<name>sentry.store.jdbc.driver</name>
<value>com.mysql.jdbc.Driver</value>
</property>
</configuration>
EOF

# 4. 初始化数据库
sentry –command schema-tool –conffile /bigdata/app/sentry/conf/sentry-site.xml –dbType mysql –initSchema

# 5. 启动Sentry服务
sentry –command service –conffile /bigdata/app/sentry/conf/sentry-site.xml

# 6. 配置Hive集成
# 在hive-site.xml中添加
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.sentry.hdfs.SentryAuthorizationFactory</value>
</property>
<property>
<name>hive.security.authenticator.manager</name>
<value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>

# 7. 使用Sentry授权
beeline
> CREATE ROLE finance_role;
> GRANT ROLE finance_role TO GROUP finance;
> GRANT ALL ON DATABASE finance_db TO ROLE finance_role;

3.3 Kerberos认证配置

3.3.1 Kerberos安装配置

# 1. 安装Kerberos KDC
yum install -y krb5-server krb5-libs krb5-auth-dialog krb5-workstation

# 2. 配置kdc.conf
vi /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88

[realms]
FGEDU.NET.CN = {
#master_key_type = aes256-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}

# 3. 配置krb5.conf
vi /etc/krb5.conf

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = FGEDU.NET.CN

[realms]
FGEDU.NET.CN = {
kdc = fgedu-kdc
admin_server = fgedu-kdc
}

[domain_realm]
.fgedu.net.cn = FGEDU.NET.CN
fgedu.net.cn = FGEDU.NET.CN

# 4. 创建Kerberos数据库
kdb5_util create -s -r FGEDU.NET.CN

# 5. 创建admin principal
kadmin.local
kadmin.local: addprinc admin/admin@FGEDU.NET.CN

# 6. 配置ACL
vi /var/kerberos/krb5kdc/kadm5.acl
*/admin@FGEDU.NET.CN *

# 7. 启动Kerberos服务
systemctl start krb5kdc
systemctl start kadmin
systemctl enable krb5kdc
systemctl enable kadmin

# 8. 创建Hadoop principal
kadmin
kadmin: addprinc -randkey hdfs/fgedu-nn@FGEDU.NET.CN
kadmin: addprinc -randkey yarn/fgedu-rm@FGEDU.NET.CN
kadmin: addprinc -randkey HTTP/fgedu-nn@FGEDU.NET.CN

# 9. 创建keytab
kadmin: xst -k hdfs.keytab hdfs/fgedu-nn@FGEDU.NET.CN HTTP/fgedu-nn@FGEDU.NET.CN
kadmin: xst -k yarn.keytab yarn/fgedu-rm@FGEDU.NET.CN

# 10. 配置Hadoop使用Kerberos
# 在core-site.xml中添加
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>

# 在hdfs-site.xml中添加
<property>
<name>dfs.block.access.token.enable</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.keytab.file</name>
<value>/etc/security/keytabs/hdfs.keytab</value>
</property>
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>hdfs/_HOST@FGEDU.NET.CN</value>
</property>

# 11. 测试Kerberos认证
kinit -kt /etc/security/keytabs/hdfs.keytab hdfs/fgedu-nn@FGEDU.NET.CN
klist

风哥提示:Kerberos配置比较复杂,但安全级别高。建议在测试环境充分测试后再上线生产。如果没有特别强的安全需求,可以先从简单的LDAP认证开始。from bigdata视频:www.itpux.com

Part04-生产案例与实战讲解

4.1 HDFS多租户实战

4.1.1 HDFS目录和权限配置

# 1. 创建租户目录
hdfs dfs -mkdir -p /bigdata/fgdata/fgedu_org_finance
hdfs dfs -mkdir -p /bigdata/fgdata/fgedu_org_finance/warehouse
hdfs dfs -mkdir -p /bigdata/fgdata/fgedu_org_finance/tmp
hdfs dfs -mkdir -p /bigdata/fgdata/fgedu_org_finance/archive

# 2. 设置目录所有者和权限
hdfs dfs -chown -R fgedu_finance:fgedu_finance /bigdata/fgdata/fgedu_org_finance
hdfs dfs -chmod 770 /bigdata/fgdata/fgedu_org_finance
hdfs dfs -chmod 770 /bigdata/fgdata/fgedu_org_finance/warehouse
hdfs dfs -chmod 770 /bigdata/fgdata/fgedu_org_finance/tmp
hdfs dfs -chmod 750 /bigdata/fgdata/fgedu_org_finance/archive

# 3. 设置Quota
hdfs dfsadmin -setSpaceQuota 100T /bigdata/fgdata/fgedu_org_finance
hdfs dfsadmin -setQuota 1000000 /bigdata/fgdata/fgedu_org_finance

# 4. 查看Quota
hdfs dfs -count -q -h /bigdata/fgdata/fgedu_org_finance

# 5. 配置HDFS ACL
hdfs dfs -setfacl -m group:fgedu_finance_analyst:r-x /bigdata/fgdata/fgedu_org_finance/warehouse

# 6. 查看ACL
hdfs dfs -getfacl /bigdata/fgdata/fgedu_org_finance/warehouse

# 7. 在Ranger中配置HDFS策略
# Service: fgedu_hdfs
# Policy Name: finance_hdfs_policy
# Resource Path: /bigdata/fgdata/fgedu_org_finance
# User/Group: fgedu_finance
# Permissions: Read, Write, Execute

4.2 Hive多租户实战

4.2.1 Hive数据库和权限配置

# 1. 创建Hive数据库
beeline -u jdbc:hive2://fgedu-hive:10000
> CREATE DATABASE IF NOT EXISTS fgedu_finance_db
LOCATION ‘/bigdata/fgdata/fgedu_org_finance/warehouse/fgedu_finance_db.db’;

> CREATE DATABASE IF NOT EXISTS fgedu_marketing_db
LOCATION ‘/bigdata/fgdata/fgedu_org_marketing/warehouse/fgedu_marketing_db.db’;

# 2. 在Ranger中配置Hive策略
# Service: fgedu_hive
# Policy Name: finance_hive_policy
# Database: fgedu_finance_db
# Table: *
# Column: *
# User/Group: fgedu_finance
# Permissions: select, create, drop, alter, index, lock, all

# Policy Name: finance_hive_readonly_policy
# Database: fgedu_finance_db
# Table: *
# Column: *
# User/Group: fgedu_finance_analyst
# Permissions: select

# 3. 测试权限
# 使用fgedu_finance用户
kinit fgedu_finance
beeline -u jdbc:hive2://fgedu-hive:10000
> USE fgedu_finance_db;
> CREATE TABLE test (id INT, name STRING);
> INSERT INTO test VALUES (1, ‘fgedu’);
> SELECT * FROM test;

# 使用fgedu_finance_analyst用户
kinit fgedu_finance_analyst
beeline -u jdbc:hive2://fgedu-hive:10000
> USE fgedu_finance_db;
> SELECT * FROM test; — 应该成功
> CREATE TABLE test2 (id INT); — 应该失败

4.3 YARN多租户实战

4.3.1 YARN队列和权限配置

# 1. 配置Capacity调度器队列
# capacity-scheduler.xml
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>fgedu_org_finance,fgedu_org_marketing,fgedu_org_tech,default</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.fgedu_org_finance.capacity</name>
<value>25</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.fgedu_org_finance.maximum-capacity</name>
<value>40</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.fgedu_org_finance.acl_submit_applications</name>
<value>fgedu_finance</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.fgedu_org_finance.acl_administer_queue</name>
<value>fgedu_finance_admin</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.fgedu_org_marketing.capacity</name>
<value>20</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.fgedu_org_tech.capacity</name>
<value>15</value>
</property>

# 2. 刷新队列
yarn rmadmin -refreshQueues

# 3. 测试提交作业到指定队列
# 使用fgedu_finance用户提交到finance队列
kinit fgedu_finance
hadoop jar /bigdata/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi \
-Dmapreduce.job.queuename=root.fgedu_org_finance 10 100

# Spark提交到指定队列
spark-submit –master yarn –queue root.fgedu_org_finance –class …

# 4. 查看队列状态
yarn queue -status root.fgedu_org_finance
yarn application -list -queue root.fgedu_org_finance

生产环境建议:多租户配置需要在资源隔离和资源利用率之间找到平衡。建议先从简单的配置开始,逐步细化。同时要做好审计日志,方便追踪问题。更多视频教程www.fgedu.net.cn

Part05-风哥经验总结与分享

5.1 多租户最佳实践

多租户最佳实践:

  • 租户规划:根据组织架构合理规划租户
  • 权限最小化:遵循最小权限原则
  • 资源隔离:YARN队列 + HDFS目录隔离
  • 统一管理:使用Ranger统一管理权限
  • 审计日志:完整记录所有操作
  • 定期审查:定期审查权限和资源使用

5.2 常见问题处理

# 常见问题1:权限不足
– 检查Ranger策略
– 检查HDFS权限
– 检查用户组
– 查看审计日志

# 常见问题2:无法提交作业
– 检查YARN队列ACL
– 检查用户权限
– 检查队列资源
– 查看RM日志

# 常见问题3:Kerberos认证失败
– 检查keytab
– 检查principal
– 检查时间同步
– 查看Kerberos日志

# 常见问题4:Ranger策略不生效
– 检查插件状态
– 检查策略同步
– 重启相关服务
– 查看Ranger日志

# 常见问题5:资源不足
– 检查队列配置
– 调整队列容量
– Kill非关键作业
– 增加集群资源

5.3 运维检查清单

# 多租户运维检查清单
– [ ] Ranger服务状态
– [ ] Kerberos服务状态
– [ ] 租户权限配置
– [ ] YARN队列状态
– [ ] HDFS目录权限
– [ ] Hive数据库权限
– [ ] 审计日志正常
– [ ] 资源使用正常
– [ ] 告警规则检查
– [ ] 定期权限审查
– [ ] 日志检查

# 日常巡检内容
1. 检查Ranger服务状态
2. 检查Kerberos服务状态
3. 检查权限策略同步
4. 查看审计日志
5. 检查资源使用
6. 查看失败作业
7. 检查告警
8. 定期权限审查

风哥提示:多租户安全是一个持续的过程,不是一次性配置完成就完事了。需要定期审查权限,及时回收不必要的权限,监控异常访问。建议建立完善的安全运维流程。学习交流加群风哥微信: itpux-com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息