zoukankan      html  css  js  c++  java
  • 大数据-hive理论(1)基础,原理,安装

    本章分享的目录:

      1:基础

        第一节:简介与原理

      2:设置用户及权限赋予

        第二节:角色权限

      3:安装 ,配置,连接

        第三节:部署hive

      4:参数动态设置

        第四节:hive参数设置

       

    第一节:简介与原理

      简介:

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

      核心组件:

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

      举例:

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

      存储:

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

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

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

      主要过程:

         

        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:网络连接到数据库(常用)

          

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

           

     

      安装过程:

        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:例子

        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中配置

  • 相关阅读:
    Java学习之--List和ArrayList
    Linux
    Linux
    Docker 容器管理
    Docker 镜像管理
    如何理解 AWS VPC
    Linux 内核版本
    Windows 快速切换到当前目录下的dos环境
    Git 整理
    TCP/IP
  • 原文地址:https://www.cnblogs.com/dblog/p/12164886.html
Copyright © 2011-2022 走看看