首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >「EMR 运维指南」之 Impala 关联 Sentry + Hue

「EMR 运维指南」之 Impala 关联 Sentry + Hue

原创
作者头像
岳涛
修改于 2023-11-23 04:50:08
修改于 2023-11-23 04:50:08
67800
代码可运行
举报
文章被收录于专栏:大数据生态大数据生态
运行总次数:0
代码可运行

说明

本文描述问题及解决方法同样适用于 弹性 MapReduce(EMR)

背景

实现 impala 权限认证,并且需要支持 hue 控制台作业权限控制。

Impala 与 Sentry 权限管控部署

操作流程

1. 环境说明

在EMR集群带公网master节点部署sentry服务,Impala的GROUP组需要在Impala server节点上进行创建系统组与之关联。

2. 下载 sentry

sentry 下载及 解压且改名移动到/usr/local/service/hadoop/ 及拷贝 mysql-jar包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://mirror.bit.edu.cn/apache/sentry/2.1.0/apache-sentry-2.1.0-bin.tar.gz
tar -xf apache-sentry-2.1.0-bin.tar.gz
mv apache-sentry-2.1.0 /usr/local/service/hadoop/sentry
cp -ra /usr/local/service/hive/lib/mysql-connector-java-5.1.40-bin.jar\
/usr/local/service/hadoop/sentry/lib/
chown -R  hadoop.hadoop /usr/local/service/hadoop/sentry

3. 修改sentry的配置文件

/usr/local/service/hadoop/sentry/conf/sentry-site.xml

sentry.service.admin.group

hadoop

sentry.service.allow.connect

hadoop

sentry.service.client.server.rpc-addresses

Server-IP主机名(例如10.0.3.42)

sentry.store.jdbc.user

DB用户

sentry.store.jdbc.password

DB密码

sentry.store.jdbc.url

jdbc:mysql://IP:PORT/DATABASE?useSSL=false&createDatabaseIfNotExist=true&characterEncoding=UTF-8 (请更改DATABASE?useSSL=false&createDatabaseIfNotExist=true&characterEncoding=UTF-8 (请更改IP/PORT/DATABASE)

sentry.service.client.server.rpc-port

8038

sentry.service.client.server.rpc-connection-timeout

200000

sentry.service.security.mode

trusted (不开启kerberos)

sentry.store.jdbc.driver

com.mysql.jdbc.Driver

sentry.verify.schema.version

true

4. 修改Impala配置文件 impalad.flgs catalogd.flgs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/data/Impala/conf/catalogd.flgs  文本追加一行 
-sentry_config=/usr/local/service/hadoop/sentry/conf/sentry-site.xml
/data/Impala/conf/impalad.flgs   文本追加两行 
-sentry_config=/usr/local/service/hadoop/sentry/conf/sentry-site.xml
-server_name=sentryserver

5. sentry包分发到各个节点(除了EMR-common节点),且授权

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scp -r /usr/local/service/hadoop/sentry $IP:/usr/local/service/hadoop
ssh $IP "chown -R hadoop.hadoop /usr/local/service/hadoop/sentry"

6. Impala配置文件分发各个节点(除了EMR-common节点),且授权

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scp -r /data/Impala/conf/* $IP:/data/Impala/conf/
ssh $IP "chown -R hadoop.hadoop /data/Impala/conf/"

7. 初始化DB库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
su hadoop
cd /usr/local/service/hadoop/sentry/
./bin/sentry --command schema-tool --conffile  ./conf/sentry-site.xml --dbType mysql --initSchema

8. 控制台重启Impala三个服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Impala-Catlog Impala-Server Impala-StateStore

9. 启动sentry服务(sentry.service.client.server.rpc-addresses 该节点启动)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
su - hadoop
nohup /usr/local/service/hadoop/sentry/bin/sentry --command service --conffile  /usr/local/service/hadoop/sentry/conf/sentry-site.xml &  #挂后台进程

10. 验证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.sentryserver端创建用户test
    useradd test
id test  (test默认在test组下)
 
2.连接impala
    su hadoop 
    cd /data/Impala/
    ./bin/impala-shell.sh -i 10.0.3.42:27001 -uhadoop
 
3.创建测试DB库
    create database impala_test;
    
4.创建角色并关联Group(即test组)
    CREATE ROLE test;
    GRANT ROLE test TO GROUP test;
    GRANT SELECT ON DATABASE impala_test TO ROLE test;
    
5.切换用户及验证
    su hadoop 
    cd /data/Impala/
    ./bin/impala-shell.sh -i 10.0.3.42:27001 -utest  
    show database;  #是否存在impala_test
    use impala_test
    create table t1(id int);

11. 定时任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /usr/local/service/hadoop/sentry/scripts/check_sentry.sh
# !/bin/bash
source /etc/profile
export PATH=/usr/local/service/hadoop/sentry/bin/:$PATH
flag=`ps -ef |grep "sentry-tools-2.1.0.jar" |grep -v "grep"|wc -l`
if [[ $flag  -eq  0 ]]
then
sentry --command service --conffile /usr/local/service/hadoop/sentry/conf/sentry-site.xml &
fi
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chown hadoop.hadoop -R /usr/local/service/hadoop/sentry/scripts/check_sentry.sh
chmod a+x /usr/local/service/hadoop/sentry/scripts/check_sentry.sh
 
echo "*/1 * * * * su hadoop -c \
'/bin/bash /usr/local/service/hadoop/sentry/scripts/check_sentry.sh > /dev/null 2>&1 &'" >> /var/spool/cron/root

12. 相关命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.IMPALA权限管控设置常用命令
创建角色:CREATE ROLE <role name>
组分配角色:GRANT ROLE <role name> TO GROUP <group name> 
服务级赋权:GRANT <ALL|SELECT|UPDATE> ON SERVER <server name> TO ROLE <role name> 
数据库赋权:GRANT <ALL|SELECT|UPDATE> ON DATABASE <database name> TO ROLE <role name> 
表赋权:GRANT <ALL|SELECT|UPDATE> ON TABLE <database name> <table name> TO ROLE <role name>
 
2.权限管控查看命令
SHOW ROLES ;
SHOW CURRENT ROLES ;
SHOW ROLE GRANT GROUP <group name> ;
SHOW GRANT ROLE <role name> ;
SHOW GRANT ROLE <role name> on OBJECT <object name> ;

Impala + Sentry + Hue

操作流程

该sentry开源包包:https://www.apache.org/dyn/closer.cgi/sentry/2.1.0

1. 开启hue的impala插件支持

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/usr/local/service/hue/tools/app_reg/app_reg.py --install /usr/local/service/hue/apps/impala

/usr/local/service/hue/tools/app_reg/app_reg.py --install /usr/local/service/hue/apps/security

2. 编辑hue 配置文件,开启impala+sentry相关配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /usr/local/service/hue/desktop/conf/pseudo-distributed.ini

删除上述红框中的配置,填写impala 相关配置如下图:

impersonation_enabled = True 开启模拟用户

配置sentry相关配置

上述已完成hue相关配置

3. 整合 sentry 服务:

我这里提供我这边整理的配置: sentry-site.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

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

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

  <property>
      <name>sentry.service.admin.group</name>
      <value>hadoop</value>
  </property>

  <property>
      <name>sentry.service.allow.connect</name>
      <value>hadoop</value>
  </property>

  <property>
      <name>sentry.store.group.mapping</name>
      <value>org.apache.sentry.provider.common.HadoopGroupMappingService</value>
  </property>
      
  <property>
      <name>sentry.service.reporting</name>
      <value>JMX</value>
  </property>

  <property>
      <name>sentry.verify.schema.version</name>
      <value>true</value>  
  </property>

  <property>
    <name>sentry.service.security.mode</name>
    <value>none</value>
  </property>

  <property>
    <name>sentry.store.jdbc.url</name>
    <value>jdbc:mysql://172.21.0.70:3306/sentrydb?useSSL=false&amp;createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>
  </property>

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

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

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

</configuration>

impala-sentry.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

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

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

    <property>
        <name>sentry.service.client.server.rpc-addresses</name>
        <value>172.21.0.99</value>
    </property>

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

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

    <property>
        <name>sentry.service.security.mode</name>
        <value>none</value>
    </property>

</configuration>

4. impala 相关配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/data/Impala/conf/catalogd.flgs  文本追加一行
-sentry_config=/data/Impala/conf/impala-sentry.xml 
/data/Impala/conf/impalad.flgs   文本追加两行
-sentry_config=/data/Impala/conf/impala-sentry.xml 
-server_name=server1
-authorized_proxy_user_config=hadoop=*

以上就完成了sentry+impala相关的配置了

注意:

hive 创建的库 在impala 里面不受权限控制

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
C# 三种方式实现Socket数据接收(经典)
public abstract int Read(byte[] buffer, int offset, int count)
zls365
2021/01/14
8K0
C# 三种方式实现Socket数据接收(经典)
超详细的TCP、Sokcket和SuperSocket入门指导
然后编写服务代码,SuperSocket的服务代码主要是配置AppServer对象,因为AppServer已经很好的封装端口监听了。
Kiba518
2020/10/23
1.1K0
C#的Sockets
在现代软件开发中,网络通信是不可或缺的一部分。C#提供了一套强大的Sockets API,允许开发者进行底层的网络通信编程。本文将深入探讨Sockets的工作原理、使用场景、最佳实践以及一些高级技巧。
Michel_Rolle
2024/10/09
3K0
你也可以写个聊天程序 C# Socket学习
我们做软件工作的虽然每天都离不开网络,可网络协议细节却不是每个人都会接触和深入了解。我今天就来和大家一起学习下Socket,并写一个简单的聊天程序。
郑子铭
2023/08/30
4000
你也可以写个聊天程序 C# Socket学习
C# Socket编程笔记
看到这个题目,是不是很眼熟?在博客园里搜下,保证会发现关于这个东东的文章实在是太多了~~~真得是没有写得必要,而且我也有点懒得去琢磨字句。(看到这,肯定得来个转折的了,不然就看不到下文了,不是吗)但是,为了自己下一篇要写的文章做参考,还是有必要先补充一下socket基础知识。
zls365
2020/08/19
1.2K0
C# Socket编程笔记
C# socket通信实现两个控制台之间聊天
1、运行效果 图1 启动服务端 图2 启动客户端 图3 客户发消息 图4 服务端发消息 图5 客户主动关闭,服务段打印异常详情 2、服务器端源码 服务端和客户端都要添加一下namespace: using System.Net; using System.Net.Sockets; using System.Threading; 源码:  class Program     {         private static string serverIP = "192.168.3.42";
用户7705674
2021/11/03
9190
面向对象(二十七)-Socket TCPListener
简介: 对Socket的封装,使其使用较为简单。 Server Code // 建立一个TCP监听对象,来监听客户端端的连接 TcpListener server = new TcpListener(IPAddress.Parse("172.26.128.1"), 8090); // 开始监听客户端的连接 server.Start(); // 接收连接上的客户端
孙寅
2020/06/02
4690
剖析.NET开源库-AlterNats是如何做到高性能发布订阅的?
在过去的一些文章里面,我们聊了一些.NET平台上高性能编程的技巧,今天带大家了解一下AlterNats这个库是如何做到远超同类SDK性能的。
InCerry
2022/11/14
6270
C# 一分钟浅谈:Socket 编程基础
在现代网络应用开发中,Socket 编程是一种非常重要的技术,它允许不同设备之间的应用程序通过网络进行通信。本文将从基础概念入手,逐步深入到 Socket 编程中的常见问题和易错点,并通过具体的代码示例来帮助读者更好地理解和掌握这一技术。
Jimaks
2024/10/18
2080
C# SOCKET发送和接收例子
Socket 客户端 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; namespace A0140_SocketClient.Sample { /// <summary> /// 这个类为一个 Socket 客户端的例子. /// 这个类简单的 连接到 Socket 服务器,并发送一段消息。 /
用户8671053
2021/11/03
2.6K0
C# 温故而知新:Stream篇(七)
NetworkStream 目录: NetworkStream的作用 简单介绍下TCP/IP 协议和相关层次 简单说明下 TCP和UDP的区别 简单介绍下套接字(Socket)的概念 简单介绍下TcpClient,TcpListener,IPEndPoint类的作用 使用NetworkStream的注意事项和局限性 NetworkStream的构造 NetworkStream的属性 NetworkStream的方法 NetwrokStream的简单示例 创建一个客户端向服务端传输图片的小示例 本章总结 1.
逸鹏
2018/04/10
1.5K0
C# 温故而知新:Stream篇(七)
C# TCP通讯示例
示例目的:使用控制台项目模板分别新建一个服务器和一个客户端,实现两两通讯 1. 新建服务器项目 using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; namespace server { class Program { static TcpClient tcpClient; static NetworkStrea
zls365
2021/01/13
2.2K0
C# TCP通讯示例
socket通信(C#)
4:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;
红目香薰
2022/11/29
1K0
socket通信(C#)
c#简单的socket通讯demo
代码中注释比较多 如果仍旧看不懂请看JimmyZhang的这篇文章 http://www.cnblogs.com/JimmyZhang/archive/2008/09/07/1286300.html 讲的很细很基础
liulun
2022/05/09
3590
C# 一分钟浅谈:WebSocket 协议应用
在过去的这一年里,我有幸参与了一些非常有意义的项目,其中一个让我特别引以为傲的是一个基于 WebSocket 的实时通信系统。这个系统不仅提高了我们的工作效率,还为用户带来了更好的体验。在这个过程中,我也遇到了不少挑战,但最终通过不断学习和实践,成功解决了这些问题。本文将以 WebSocket 协议在 C# 中的应用为主题,分享我的经验和心得,希望能对广大开发者有所帮助。
Jimaks
2024/10/17
3160
C#网络编程(同步传输字符串) - Part.2
在与服务端的连接建立以后,我们就可以通过此连接来发送和接收数据。端口与端口之间以流(Stream)的形式传输数据,因为几乎任何对象都可以保存到流中,所以实际上可以在客户端与服务端之间传输任何类型的数据。对客户端来说,往流中写入数据,即为向服务器传送数据;从流中读取数据,即为从服务端接收数据。对服务端来说,往流中写入数据,即为向客户端发送数据;从流中读取数据,即为从客户端接收数据。
张子阳
2018/09/30
9420
C#中Socket的简单使用
一.Socket的概念 Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口.
全栈程序员站长
2022/09/07
1.1K0
C#中Socket的简单使用
C#网络编程(异步传输字符串) - Part.3
这篇文章我们将前进一大步,使用异步的方式来对服务端编程,以使它成为一个真正意义上的服务器:可以为多个客户端的多次请求服务。但是开始之前,我们需要解决上一节中遗留的一个问题。
张子阳
2018/09/30
7570
C#网络编程(异步传输字符串) - Part.3
C#网络编程(接收文件) - Part.5
这篇文章将完成 Part.4 中剩余的部分,它们本来是一篇完整的文章,但是因为上一篇比较长,合并起来页数太多,浏览起来可能会比较不方便,我就将它拆为两篇了,本文便是它的后半部分。我们继续进行上一篇没有完成的步骤:客户端接收来自服务端的文件。
张子阳
2018/09/30
8720
您可知道如何通过HTTP2实现TCP的内网穿透???
可能有人很疑惑应用层 转发传输层?,为什么会有这样的需求啊???哈哈技术无所不用其极,由于一些场景下,对于一个服务器存在某一个内部网站中,但是对于这个服务器它没有访问外网的权限,虽然也可以申请端口访问外部指定的ip+端口,但是对于访问服务内部的TCP的时候我们就会发现忘记申请了!这个时候我们又要提交申请,又要等审批,然后开通端口,对于这个步骤不是一般的麻烦,所以我在想是否可以直接利用现有的Http网关的端口进行转发内部的TCP服务?这个时候我询问了我们的老九大佬,由于我之前也做过通过H2实现HTTP内网穿透,可以利用H2将内部网络中的服务映射出来,但是由于底层是基于yarp的一些方法实现,所以并没有考虑过TCP,然后于老九大佬交流深究,决定尝试验证可行性,然后我们的Taibai项目就诞生了,为什么叫Taibai?您仔细看看这个拼音,翻译过来就是太白,确实全称应该叫太白金星,寓意上天遁地无所不能!下面我们介绍一下具体实现逻辑,确实您仔细看会发现实现是真的超级简单的!
用户10786849
2024/04/30
1050
您可知道如何通过HTTP2实现TCP的内网穿透???
相关推荐
C# 三种方式实现Socket数据接收(经典)
更多 >
LV.1
.NET Foundation
目录
  • 说明
  • 背景
  • Impala 与 Sentry 权限管控部署
    • 操作流程
      • 1. 环境说明
      • 2. 下载 sentry
      • 3. 修改sentry的配置文件
      • 4. 修改Impala配置文件 impalad.flgs catalogd.flgs
      • 5. sentry包分发到各个节点(除了EMR-common节点),且授权
      • 6. Impala配置文件分发各个节点(除了EMR-common节点),且授权
      • 7. 初始化DB库
      • 8. 控制台重启Impala三个服务
      • 9. 启动sentry服务(sentry.service.client.server.rpc-addresses 该节点启动)
  • Impala + Sentry + Hue
    • 操作流程
      • 1. 开启hue的impala插件支持
      • 2. 编辑hue 配置文件,开启impala+sentry相关配置
      • 3. 整合 sentry 服务:
      • 4. impala 相关配置:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档