文档首页/ 数据治理中心 DataArts Studio/ 最佳实践/ 数据开发进阶实践/ 使用Python脚本连接MRS安全集群执行Impala SQL
更新时间:2024-11-27 GMT+08:00
分享

使用Python脚本连接MRS安全集群执行Impala SQL

第一步:在执行任务的服务器上安装相应的包

pip install krbcontext(版本0.10)

pip install kerberos(版本1.3.1)

pip install impala

命令样例如下:

pip install krbcontext == 0.10

执行pip命令需要查看服务器安装的版本(有可能是pip3),执行如下命令进行查看:

which pip

第二步:在执行任务的服务器上安装Impala客户端(也可以装整个MRS客户端)并上传Impala用户认证凭证

  • 在Manager主页下载的客户端软件包,包含了集群内所有服务(除Flume之外)的客户端。如果只需要安装单个服务的客户端,请选择“集群 > 服务 > 服务名称 > 更多 > 下载客户端”,弹出“下载客户端”信息提示框。
  • MRS 3.3.0及之后版本,在Manager主页中直接单击“下载客户端”即可。
  1. 登录MRS控制台。
  2. 选择“MRS集群 > 现有集群”。
  3. 单击所需集群的名称进入MRS集群的概览页面。单击“前往Manager”,登录MRS服务的管理面。

    “Kerberos认证”为“开启”状态。

    图1 前往Manager

    如果跳出提示框,选择访问MRS Manager页面的访问方式,详细内容请参考访问FusionInsight Manager(MRS 3.x及之后版本)

  4. 进入FusionInsight Manager登录页面,登录FusionInsight Manager(登录用户名和密码找系统管理员获取)。
  5. 单击“集群”,在“概览”页签下,从右上方选择“更多 > 下载客户端”。

    图2 下载客户端

  6. 弹出“下载集群客户端”提示框,选择相关下载参数后单击“确定”,下载客户端。

    图3 下载集群客户端

  7. 选择客户端类型、平台类型(与执行任务的服务器保持一致),如果不修改保存路径,会自动下载客户端到MRS主节点对应路径下,在拷贝客户端软件包到待安装客户端节点的指定目录。以待安装客户端的用户登录将要安装客户端的节点,并解压客户端软件包后,执行install命令进行安装,详细内容请参考安装客户端(3.x及之后版本)

    MRS 3.x之前版本集群在集群创建后,在主Master节点默认安装有客户端,安装目录为“/opt/client”。

  8. 在FusionInsight Manager界面下载用户认证凭证到本地。

    用户为安全模式集群进行应用开发的场景下,需要获取用户keytab文件用于安全认证。管理员可以通过FusionInsight Manager导出keytab文件。用户凭据获取方法如下:

    修改用户密码后,之前导出的keytab将失效,需要重新导出。

    1. 登录FusionInsight Manager。

      MRS 3.x及之后版本:选择“系统 > 权限 > 用户”。

      MRS 3.x之前版本:选择“系统设置 > 权限配置 > 用户管理”。

    2. 在需导出文件的用户所在行,选择“更多 > 下载认证凭据”,待文件自动生成后指定保存位置,并妥善保管该文件。

      人机用户创建好后,需要登录一次FusionInsight Manager重置密码后才有效。

      认证凭据中会携带kerberos服务的“krb5.conf”文件。

      解压认证凭据文件后可以获取两个文件:

      • “krb5.conf”文件包含认证服务连接信息。
      • “user.keytab”文件包含用户认证信息。

      下载认证凭据的详细信息请参考下载MRS集群用户认证凭据文件

      图4 下载认证凭据

  9. 上传Impala用户认证凭据到待操作节点的Impala客户端安装目录下,例如“客户端安装目录/impala/”。
  10. 进入Impala客户端路径,查看用户的principal,执行以下命令查看用户的principal。

    Kerberos认证时需要配置Kerberos认证所需要的文件参数,主要包含keytab文件路径、Kerberos认证的用户名称、Kerberos认证所需要的客户端配置“krb5.conf”文件。

    登录MRS集群客户端所在节点,进入客户端安装目录。
    cd {客户端安装目录}
    执行以下命令配置环境变量。
    source bigdata_env
    执行以下命令进行用户认证。
    kinit MRS集群业务用户
    输入密码
    执行如下命令,查询用户的principal。
    klist -kt 客户端安装目录/impala/user.keytab
    图5 查看principal

Python3代码样例参考

Python2和python3导入包的版本(krbcontext)有差异。

## ******************************************************************** ##
from impala.dbapi import connect
from krbcontext.context import krbcontext
#from krbcontext import krbcontext      python2导入包
#from subprocess import Popen, PIPE
#kinit = Popen(['/opt/bigdata/client/KrbClient/kerberos/bin/kinit', 'impala1@F5840AB1_7495_448E_BC63_A8D2B0E2EE69.COM'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
#kinit.stdin.write('Admin@123$#\n'.encode())
#kinit.wait()
with krbcontext(using_keytab=True,principal='impala1@F5840AB1_7495_448E_BC63_A8D2B0E2EE69.COM',keytab_file='/opt/bigdata/user.keytab'):
 conn = connect(host="192.168.0.136", port=21050, auth_mechanism='GSSAPI', kerberos_service_name='impala',database='default')
 cursor = conn.cursor()
 cursor.execute("show databases;")
 data = cursor.fetchall()
 print (data)
 cursor.close()
 conn.close()

相关文档