Sentry Beeline

本文介绍如何在Ubuntu上安装Maven并编译Sentry源码,配置Sentry环境,以及将Sentry与Hive集成的过程。包括数据库配置、路径设置、服务运行等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境

Ubuntu STL 16.0.4
Hadoop 2.7.4
Hive   2.1.1
sentry 1.7.0
maven  3.5.0

//注:伪分布式环境

安装maven

1.apache maven官网下载maven,用于编译sentry源码。 
2.修改~/.bashrc文件,添加maven路径。

export  MAVEN_HOME=/etc/usr/local/maven 
export  PATH=$PATH:MAVEN_HOME/bin

3.使.bashrc生效source ~/.bashrc。 
4.执行mvn -v 可查看maven是否安装成功。

编译sentry源码

  1. apache sentry官网下载sentry源码(很有意思,官网上没有直接运行的binary文件,只有源码,所以需要maven编译)。
  2. 在README.md文件里可知,在apache-sentry-1.7.0-src文件夹里执行mvn install -DskiTests 即可进行编译。 
    这里写图片描述
  3. 当终端出现下图情况时即编译成功: 
    这里写图片描述
  4. 编译结果在apache-sentry-1.7.0-src/sentry-dist/target/apache-stnery-1.7.0下。 
    这里写图片描述

编译结果上传至百度网盘,密码: e5hp。

配置sentry环境

  1. 将mysql-connector的jar包拷入sentry/lib下 
    sudo mv mysql-connector-java-5.0.8-bin.jar /usr/local/sentry/lib

  2. 修改sentry-site.xml文件

    注意:在sentry/conf下有sentry-site.xml.service.template和sentry-site.xml.hive-client.template两种类型的文件,其中service文件是用于在sentry/conf下配置sentry环境的,hive-client文件是需要拷贝到hive/conf下配置hive和sentry关联的。

    参考sentry-site.xml.service.template修改sentry-site.xml,sudo cp sentry-site.xml.service.template sentry-site.xml

<!-- 修改内容 -->
<property> 
    <name>sentry.store.jdbc.url</name>  
    <value>jdbc:mysql://localhost:3306/sentry</value> 
</property>  

<property> 
    <name>sentry.store.jdbc.driver</name>  
    <value>com.mysql.jdbc.Driver</value> 
</property>  

<property> 
    <name>sentry.store.jdbc.user</name>  
    <value>sentry</value> 
</property>  

<property> 
    <name>sentry.store.jdbc.password</name>  
    <value>sentry</value> 
</property> 

<!-- 关闭security.mode -->
<property>
    <name>sentry.service.security.mode</name>
    <value>kerberos</value>
</property>

<property>
    <name>sentry.service.server.principal</name>
    <value></value>
</property>

<property>
     <name>sentry.service.server.keytab</name>
     <value></value>
</property>

<!-- 添加内容 -->
<property> 
    <name>sentry.service.server.rpc-address</name>  
    <value>localhost</value> 
</property>  

<property> 
    <name>sentry.service.server.rpc-port</name>  
    <value>8038</value> 
</property>  

注释: 
sentry默认数据库不是mysql,所以默认驱动也不是mysql 的,所以前四个是将数据库相关信息修改为mysql的。 
因为对sentry还不是很了解,所以先把其他多余的服务关闭,配置好环境再说。T_T 
后面添加内容用于监听localhost:8038端口,原本sentry-site.xml.service.template里面没有,是自己添加的。经测试不添加也可以,应该是默认端口号就是8038。

为sentry配置数据库和路径

1.配置数据库

CREATE DATABASE sentry;
CREATE USER sentry IDENTIFIED BY 'sentry';
GRANT all ON sentry.* TO sentry@'%' IDENTIFIED BY 'sentry';
flush privileges;

2.配置sentry路径

export SENTRY_HOME=/usr/local/sentry
export PATH=$PATH:$SENTRY_HOME/bin

执行 sentry -v ,如果出现如下所示即配置成功: 
这里写图片描述

运行sentry服务

如果是第一次运行sentry服务需要提前初始化元数据库,命令如下:

sentry --command schema-tool --conffile /usr/local/sentry/conf/sentry-site.xml --dbType mysql --initSchema
  • 1

运行sentry命令:

sentry --command service --conffile /usr/local/sentry/conf/sentry-site.xml

如果报错: 
could not create SeverSocket on address localhost/127.0.0.1:8038 
这里写图片描述
则可能metastore已经启动,如果想要重新启动sentry需要先关闭之。 
执行命令jps,kill -9 pid即可。 
这里写图片描述

出现如下界面说明已经运行起来了: 
这里写图片描述

serving on localhost/127.0.0.1:8038

hive集成sentry

1.将sentry-site.xml.hive-client.template拷贝到hive/conf下:

sudo mv /usr/local/sentry/conf/sentry-site.xml.hive-client.template  /usr/local/hive/conf/sentry-site.xml

2.修改hive-site.xml

<!-- Hive Metastore集成Sentry -->
<property>
    <name>hive.metastore.pre.event.listeners</name>
    <value>org.apache.sentry.binding.metastore.MetastoreAuthzBinding</value>
</property>

<property>
    <name>hive.metastore.event.listeners</name>
      <value>org.apache.sentry.binding.metastore.SentryMetastorePostEventListener</value>
    </property>


<!-- Hive-server2集成Sentry -->
<property>
    <name>hive.server2.enable.impersonation</name>
    <value>true</value>
</property>

<property>
    <name>hive.security.authorization.task.factory</name>
     <value>org.apache.sentry.binding.hive.SentryHiveAuthorizationTaskFactoryImpl</value>
</property>

<property>
     <name>hive.server2.session.hook</name>
     <value>org.apache.sentry.binding.hive.HiveAuthzBindingSessionHook</value>
</property>

<property>
     <name>hive.sentry.conf.url</name>
     <value>file:///usr/local/hive/conf/sentry-site.xml</value>
</property>

3.修改sentry-site.xml 
注意!这里改的是hive/conf/sentry-site.xml而不是sentry/conf下的!!!!

    <property>
       <name>sentry.service.client.server.rpc-port</name>
       <value>8038</value>
    </property>

    <property>
       <name>sentry.service.client.server.rpc-address</name>
       <value>localhost</value>
    </property>

    <property>
       <name>sentry.service.client.server.rpc-connection-timeout</name>
       <value>200000</value>
    </property>

    <!--以下是客户端配置-->
    <property>
        <name>sentry.provider</name>
        <value>org.apache.sentry.provider.file.HadoopGroupResourceAuthorizationProvider</value>
    </property>

    <property>
        <name>sentry.hive.provider.backend</name>
        <value>org.apache.sentry.provider.db.SimpleDBProviderBackend</value>
    </property>

    <property>
        <name>sentry.metastore.service.users</name>
        <value>hive</value><!--queries made by hive user (beeline) skip meta store check-->
    </property>

      <property>
        <name>sentry.hive.server</name>
        <value>localhost</value>
      </property>

     <property>
        <name>sentry.hive.testing.mode</name>
        <value>true</value>
     </property>

注释: 
Sentry 的使用有两种方式,一是基于文件的存储方式(SimpleFileProviderBackend),一是基于数据库的存储方式(SimpleDbProviderBackend),如果使用基于文件的存储则只需要安装sentry,否则还需要安装 sentry-store。

3.hive添加对sentry的依赖

创建软链接:

sudo cp /usr/lcoal/sentry/lib/sentry-binding-hive-1.7.0.jar /usr/lcoal/sentry/lib/sentry-binding-hive.jar
sudo ln -s /usr/lcoal/sentry/lib/sentry-binding-hive.jar /usr/lcoal/hive/lib/sentry-binding-hive.jar 
  • 1
  • 2

4.重新初始化元数据库 
重新配置hive-site.xml之后立马运行hive,执行操作时汇报如下错误: 
这里写图片描述
这时需要重新初始化元数据库。 
需要先把愿元数据库中的hive_metadata删掉,然后在执行初始化操作。

mysql -u hive -p hive
show databases;
drop database hive_metadata;
quit;

schematool -dbType mysql -initSchema

这里写图片描述
初始化成功

注意: 
在hive更改完sentry相关配置之后进入hive页面执行查询数据库命令(show databases;)时,会出现错误。 
这时把sentry/lib下sentry*.jar和solr*.jar拷贝到hive/lib/下,然后就能在hive下执行查询操作了

hive集成sentry测试

Sentry权限控制通过Beeline(Hiveserver2 SQL 命令行接口)输入Grant 和 Revoke语句来配置。语法跟现在的一些主流的关系数据库很相似。

需要注意的是:当sentry服务启用后,我们必须使用beeline接口来执行hive查询,Hive Cli并不支持sentry。

参考内容

安装和配置Sentry 
Apache Sentry安装及简单使用 
测试Hive集成Sentry 
Impala和Hive集成Sentry





beeline 常用语法: 
1. beeline -u “jdbc:hive2://nn02:10000/default” -n maxiaoli -e “select * from mxl_hive;” 
-u : 连接信息 
-n:登陆用户 
-e:执行hql 
2. beeline -u “jdbc:hive2://nn02:10000/default” -n maxiaoli -i query.hql 
3. 输入beeline 进入,输入!connect 连接串 在输入用户名和密码 即可登陆 
这里写图片描述

除了进入beeline进行操作,在脚本中以前的hive -e/-f 就不能使用,现在就我遇到的问题进行总结,以及和hive进行对比。假如hive 有这样的一张表 test

nameage
mxl20
zhangsan21
  1. hive -e “select * from ”> test.txt
mxl 20
zhangsan 21
  • 1
  • 2

beeline

beeline -u "jdbc:hive2://localhost:10000/default" -n admin--silent=true --showHeader=false --outputformat=csv  -f new.sh  > mxl.log 
  • 1

不显示查询头,以静默的方式导出csv文件,当然 -f 后面是hql 查询文件,也可以-e “query” 。 
beeline -f 和 -e 默认的查询结果都带有表信息,mr过程等内容。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值