大数据-hive理论(1)

本章分享的目录:

  1:基础

    第一节:简介与原理

  2:设置用户及权限赋予

    第二节:角色权限

  3:安装 ,配置,连接

    第三节:部署hive

  4:参数动态设置

    第四节:hive参数设置

   

第一节:简介与原理

  简介:

    数据仓库,对海量数据的离线处理(以HiveQL的形式,生成MR任务);

  核心组件:

    解释器,编译器,优化器;

  举例:

    HDFS或HBase ---映射--> HIVE表 -- HiveQL--> (MR)HDFS

  存储:

    元数据(metadata)------>关系型数据库

      因为hdfs中存储的数据文件都是数据不包括数据的头等信息,所以元数据信息存储在关系型数据库。

    数据文件------>hdfs

  主要过程:

     大数据-hive理论(1)

    Hive --------HQL-------->MR(过程如下)

      client发送请求 -------------->

        driver驱动 ----->  CLI(启动hive副本) ------>存储matedata   ----->生成MR(hadoop执行)---->driver(结果返回)

                          ------>compiler(解释器)

      --------------> client接收结果

     compiler:解释,编译,优化

      Parser(分析程序):HQL ---> 抽象语法树

      Semantic Analyzer(语法分析器):抽象语法树 ---> 查询块

      Logical plan generator(逻辑计划生产器):查询块 ---> 逻辑查询计划

      Logical optimizer(逻辑优化程序):优化(重写)逻辑计划

      Physical plan generator(物理计划生产器):逻辑计划 ---> 物理计划(MR)

      Physical optimizer(物理优化程序):优化MR

  

第二节:角色权限

  (1):权限管理

    1:三种授权模型:

      1、Storage Based Authorization in the Metastore Server

        基于存储的授权 - 可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(例如:列级别、行级别)。

      2、SQL Standards Based Authorization in HiveServer2(推荐使用该模式

        基于SQL标准的Hive授权 - 完全兼容SQL的授权模型。

      3、Default Hive Authorization (Legacy Mode)

        hive默认授权 - 设计目的仅仅只是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据

    2:SQL Standards Based Authorization in HiveServer2(推荐使用该模式

      (1)完全兼容SQL的授权模型

      (2)除支持对于用户的授权认证,还支持角色role的授权认证

          role可理解为是一组权限的集合,通过role为用户授权

          一个用户可以具有一个或多个角色

          默认包含另种角色权限:public、admin

       (3)限制(如果开启了权限管理之后):

          1、启用当前认证方式之后,dfs, add, delete, compile, and reset等命令被禁用。

          2、通过set命令设置hive configuration的方式被限制某些用户使用。

          (可通过修改配置文件hive-site.xml中hive.security.authorization.sqlstd.confwhitelist进行配置)

          3、添加、删除函数以及宏的操作,仅为具有admin的用户开放。

          4、用户自定义函数(开放支持永久的自定义函数),可通过具有admin角色的用户创建,其他用户都可以使用。

          5、Transform功能被禁用。

       (4)如何开启权限

        1、在hive服务端修改配置文件hive-site.xml添加以下配置内容:

<property>
  <name>hive.security.authorization.enabled</name>
  <value>true</value></property>

<property>
  <name>hive.server2.enable.doAs</name>
  <value>false</value>
</property>

<property>
  <name>hive.users.in.admin.role</name>
  <value>root</value>
</property>

<property>
  <name>hive.security.authorization.manager</name>
  <value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value>
</property>

<property>
  <name>hive.security.authenticator.manager</name>
  <value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>

      2、服务端启动hiveserver2;客户端通过beeline进行连接

  (2):权限管理

    beeline连接之后,Hive权限管理

    1、角色的添加、删除、查看、设置:(角色)

      CREATE ROLE role_name;  -- 创建角色

      DROP ROLE role_name;  -- 删除角色

      SET ROLE (role_name|ALL|NONE);  -- 设置角色

      SHOW CURRENT ROLES;  -- 查看当前具有的角色

      SHOW ROLES;  -- 查看所有存在的角色

     说明:root有两种角色:public,admin,默认的是public需要添加admin:set role admin,这个时候就是admin了。然后就会进行一些操作了。

     2、用户的插入、移除、查看(用户)

      SELECT privilege – gives read access to an object.

      INSERT privilege – gives ability to add data to an object (table).

      UPDATE privilege – gives ability to run update queries on an object (table).

      DELETE privilege – gives ability to delete data in an object (table).

      ALL PRIVILEGES – gives all privileges (gets translated into all the above privileges).

     3、权限的授予、移除、查看(给角色、给用户)

      3.1 将权限授予某个用户、角色:

        语法:

          GRANT role_name [, role_name] ...

          TO principal_specification [, principal_specification] ...

          [ WITH ADMIN OPTION ];

          principal_specification

            : USER user

            | ROLE role

         实例:grant admin(权限) to role test(角色) / user test(用户);

       3.2 移除某个用户、角色的权限:

        语法:

          REVOKE [ADMIN OPTION FOR] role_name [, role_name] ...

          FROM principal_specification [, principal_specification] ... ;

          principal_specification

            : USER user

            | ROLE role

         实例:revoke admin from role test(角色)  / user test(用户);

 

      3.3 查看授予某个用户、角色的权限列表

        语法:

          SHOW ROLE GRANT (USER|ROLE) principal_name;

        实例:

          查看用户、角色下的角色:

            show role grant role test; 查看的是角色的权限

            show role grant user test; 查看的是用户的权限

          查看权限下的用户、角色:

            SHOW PRINCIPALS role_name;

第三节:部署hive

   三种搭建模式:

    1:元数据存储在内存数据库(不用)

    2:网络连接到数据库(常用)

      大数据-hive理论(1)

  3:远程服务器模式(解耦:只需要访问MetaStoreServer,不需要知道后面连的是那种关系型数据库)

       大数据-hive理论(1)

 

  安装过程:

    1:安装mysql

      Yum instail mysql-server

      启动

      Service mysqld start

      开机启动

    Chkconfig mysqld on

      Mysql授权

      grant all privileges on *.* to ‘root’@‘%’ identified by ‘youpassword’ with grant option

      删除其他

      Delete from user where host != ‘root’

      刷新权限

      Flush privileges

      登录

      Mysql -u -p

 

      导入jar

        导入mysql的连接驱动包,jline包到lib下

 

      查看test表的详细信息(hive的)

        desc formatted test;

 

  2:远程服务器模式:

    服务端(连接数据库):

    配置 hive-site.xml

<property>  
  <name>hive.metastore.warehouse.dir</name>  本地表的默认位置
  <value>/user/hive/warehouse</value>  
</property>  

<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true</value>  
</property>  

<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>com.mysql.jdbc.Driver</value>  
</property>     

<property>  
  <name>javax.jdo.option.ConnectionUserName</name>  
  <value>root</value>  
</property>  

<property>  
  <name>javax.jdo.option.ConnectionPassword</name>  
  <value>123456</value>  
</property>

  客户端:

<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  

<property>  
  <name>hive.metastore.uris</name>  
  <value>thrift://node02:9083</value>  
</property>

  配置hive高可用(推荐方式:HAProxy,可以:zk)

  配置:其中一台

<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  

<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://node01:3306/hive?createDatabaseIfNotExist=true</value>  
</property>  

<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>com.mysql.jdbc.Driver</value>  
</property>     

<property>  
  <name>javax.jdo.option.ConnectionUserName</name>  
  <value>root</value>  
</property>  

<property>  
  <name>javax.jdo.option.ConnectionPassword</name>  
  <value>123456</value>  
</property>

<property>
  <name>hive.server2.support.dynamic.service.discovery</name>
  <value>true</value>
</property>

<property>
  <name>hive.server2.zookeeper.namespace</name> //在zk中的文件夹 查看zkCil.sh ls /
  <value>hiveserver2_zk</value>
</property>

<property>
  <name>hive.zookeeper.quorum</name>
  <value>node1:2181,node2:2181,node3:2181</value>
</property>

<property>
  <name>hive.zookeeper.client.port</name>
  <value>2181</value>
</property>

<property>
  <name>hive.server2.thrift.bind.host</name> //所在IP
  <value>node2</value>
</property>

<property>
  <name>hive.server2.thrift.port</name>
  <value>10001</value>
</property>

  启动方式:

    1、 服务端 hivemetastore:端口:9083

      hive --service metastore

      客户端:

      hive

    2、 服务端 hiveserver2(支持多个客户端的连接) 端口:10000

      hiveserver2

      客户端 beeline方式

      beeline

      !connect jdbc:hive2://node4:10000/default root 123(用户名密码不需要,但是随便给都行,不给不行)

    或者

      beeline -u jdbc:hive2://node4:10000/default(这个不需要用户名密码)

     3、 代码JDBC连接

       大数据-hive理论(1)

 

第四节:hive参数设置

  1:例子

    hiveconf hive.cli.print.header=true(可以看见hive表的头部信息)

  2:设置方式

    (1)在启动cli时候(只在当前会话有效)

      hive --hiveconf hive.cli.print.header=true

    (2)在已经启动的cli下(只在当前会话有效)

      set hive.cli.print.header=true;

      set hive.cli.print.header //查看这个值目前是什么

    (3)在家目录下的 .hiverc 文件(永久有效),如果没有则创建该文件,在启动cli时候回加载这个文件中的配置

      在文件中set hive.cli.print.header=true

      ~/.hivehistory 这个文件可以看见hive执行的历史指令

    (4)hive-site.xml中配置

相关推荐