HiverServer2支持远程多客户端的并发和认证,支持通过JDBC、Beeline等连接操作。hive默认的Derby数据库,由于是内嵌的文件数据库,只支持一个用户的操作访问,支持多用户需用mysql保存元数据。现在关心的是HiveServer如何基于mysql元数据库管理用户权限,其安全控制体系与Linux及Hadoop的用户是否存在联系。
1)remote方式部署Hive
Hive中metastore(元数据存储)的三种方式:内嵌Derby方式、基于mysql的Local方式、基于mysql的Remote方式。显然多用户并发模式是采用remote方式部署,Hiveserver元数据放置在mysql数据库并在mysql建立用户,HiveClient远程连接。回顾下remote方式部署Hive:
第一步:元数据库mysql创建用户名和数据库;
第二步:HiveServer在 hive-site.xml 文件中配置jdbc URL、驱动、用户名、密码等属性;
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysql server IP/hive_meta?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for aJDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for aJDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use againstmetastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use againstmetastore database</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<!-- base hdfs path -->
<value>/user/hive/warehouse</value>
<description>base hdfs path :locationof default database for the warehouse</description>
</property>
第三步:HiveClient在hive-site.xml 文件中配置thrift(负责client和server的通信)和存储路径;
<!--thrift://<host_name>:<port> 默认端口是9083 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://Hiveserver IP:9083</value>
<description>Thrift uri for the remotemetastore. Used by metastore client to connect to remotemetastore.</description>
</property>
<!-- hive表的默认存储路径 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of defaultdatabase for the warehouse</description>
</property>
< property >
< name >hive.metastore.local</ name >
< value >false</ value>
</ property >
第四步:HiveServer启动metastore监听
执行命令:hive--service metastore -p <port_num> //默认端口是9083
第五步:HiveClient执行hive命令。
上述5步,下图是很清晰的展现。
2)msyql元数据字典表
从remote方式部署的Hive看,还未体现出多用户管理及其权限控制,需进一步深入研究下图四个模块的关系。
Hive早期版本是通过Linux的用户和用户组来控制用户权限,无法对Hive表的CREATE、SELECT、DROP等操作进行控制。现Hive基于元数据库来管理多用户并控制权限。数据分为元数据和数据文件两部分,元数据存储在mysql,而数据文件则是HDFS,控制元数据即控制可访问的数据文件。
Hive在mysql上的元数据表主要分为:Database相关、Table相关、数据存储相关SDS、COLUMN相关、SERDE相关(序列化)、Partition相关(分区)、SKEW相关(数据倾斜)、BUCKET相关(分桶)、PRIVS相关(权限管理),对数据库-数据表、用户有相应关系体现。其中TBL_PRIVS存储了表/视图的授权信息,见如下数据字典:
元数据表字段 |