Ambari+Hive+HDFS的权限认证配置

关注我的微信公众号:pythonislover,领取python,大数据,SQL优化相关视频资料!~

Python大数据与SQL优化笔 QQ群:771686295

 

 

一. Hive 配置里的几个概念

Authorization: 授权,也就是用户权限

Authentication:验证,也就是用户身份认证

Metastore Server, HiveServer2, 这是Hive里两个独立的组件

(1) Metastore通过Thrift API 对外提供访问,生态里的工具如:pig, MR, impala, presto, SparkSQL, NIFI 都可以通过Thrift接口访问Metastore, Metastore接口格式为:thrift://xxxxxxx:9083

(2) HiveServer2对外提供JDBC/ODBC接口,供前端工具(DBeavor, SQL Squirrel, SQL Developer, DBVis)使用, 编程语言如:Python, Scala, Java也可以通过JDBC连接访问HiveServer2, HiveServer2的JDBC接口格式为:jdbc:hive2://xxxxxx:10000

二. 权限控制

Hive支持的Authorization方式有

  • 1. Storage Based Authorization in the Metastore Server

  • 2. SQL Standards Based Authorization in HiveServer2

  • 3. Authorization using Apache Ranger & Sentry

  • 4. Old default Hive Authorization (Legacy Mode)

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization

可以看出,不同的Authorization方式是针对不同Hive组件提供的,所以是可以并存的。

Ambari显示的Authorization方式有

  • NONE (Storage Based)

  • SQLStd (SQL Standards Based)

  • Ranger (Ranger)

1. Storage Based

通过Hive Metastore 的thrift接口访问Hive的时候,会使用这个权限,这种方式可以和SQL Standards Based或者Ranger的方式并存。

Storage Based的权限控制,也就是基于HDFS权限访问,和Linux权限管理类似,用到了以下几个概念:

  • 普通权限,也就是ls -l 命令所以看到的user + group + other 权限;

  • umask权限,设置新建文件/文件夹的默认权限;

  • ACL 掩码, 设置指定user/group对于文件/目录权限;

Hive的warehouse dir在HDFS上的权限,在创建过程中已经自动生成,为了对现有目录的任何权限不作修改,通过ACL方式给CDP_MERKLE_DEVELOPER组赋予warehouse dir的权限, 如下:

[root@nj-hdp-nb-node2 ~]# su - hdfs

[hdfs@nj-hdp-nb-node2 ~]$ hdfs dfs -setfacl -R -m group:xxxxx:r-x /warehouse

[hdfs@nj-hdp-nb-node2 ~]$ hdfs dfs -setfacl -R -m default:group:xxxxxx:r-x /warehouse

注意HDFS中对于user和group的关系刷新有延迟,从而影响权限生效速度,可手动刷新:

[hdfs@nj-hdp-nb-node2 ~]$  hdfs dfsadmin -refreshUserToGroupsMappings

另外,Spark Shell下访问Hive的database/table,需要注意2个Spark配置项:

(1) hive.metastore.uris

配置为: thrift://xxxxxx:9083

(2) metastore.catalog.default

配置为:Hive

 

这个选项默认为Spark, 即读取SparkSQL自己的metastore_db,修改完后,Spark Shell会去读取Hive的metastore,这样就可以实现以Spark Shell方式访问Hive SQL方式创建的databases/tables.

 

 

2. SQL Standards Based

通过HiveServer2的JDBC/ODBC接口访问Hive的时候,会使用这个权限,这种方式支持通过SQL语句的grant/revoke方式来分配database, table级别的权限。

从Storage Based的方式切换到SQL Std Based方式,只要从Ambari UI中点击选择即可,但要注意Ambari自动生成的配置文件项:hive.security.metastore.authorization.manager

org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider,org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly

应改为:

org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider

另外,需要为这种授权方式指定一个admin账号,因为从HiveServer2的JDBC/ODBC接口访问时,是不直接接触HDFS的,所以需要一个"sql" admin账号来负责grant/revoke access,修改配置文件项:hive.users.in.admin.role 来指定"sql" admin

注意:"sql "admin账号登入HiveServer2时,每次需要运行set role admin, 才可以将自己切换为admin权限;

3. Ranger

集中式权限控制,可以通过web界面管理 HDFS和HIVE的权限

 

 

三. 身份认证

HiveServer2有几种Authentication (身份验证)模式,不同的验证模式,需要的身份信息不一样:

  • NONE, Linux本地用户,只需要用户名

  • LDAP, 用户名 + 密码

  • KERBEROS, Kerberos principal

  • PAM, Linux的身份验证文件

  • CUSTOM,

  • NOSASL, 不需要用户名密码

Ambari显示的Authentication方式有:

  • NONE

  • LDAP

  • Kerberos

  • PAM

  • CUSTOM

目前选用的Authentication方式为NONE,即Linux本地验证,在LDAP将user/group信息同步到本地的情况下,区别只在于是否需要验证密码。

你可能感兴趣的:(Spark大数据平台)