- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python3.6.5基于kerberos认证的hive和hdfs连接调用方式由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1. Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。具体请查阅官网 。
2. 需要安装的包(基于centos) 。
1
2
3
4
5
6
7
8
9
10
11
12
|
yum install libsasl2
-
dev
yum install gcc
-
c
+
+
python
-
devel.x86_64 cyrus
-
sasl
-
devel.x86_64
yum install python
-
devel
yum install krb5
-
devel
yum install python
-
krbV
pip install krbcontext
=
=
0.9
pip install thrift
=
=
0.9
.
3
pip install thrift
-
sasl
=
=
0.2
.
1
pip install impyla
=
=
0.14
.
1
pip install hdfs[kerberos]
pip install pykerberos
=
=
1.2
.
1
|
3. /etc/krb5.conf 配置, 在这个文件里配置你服务器所在的域 。
4./etc/hosts 配置, 配置集群机器和域所在机器 。
5. 通过kinit 生成 ccache_file或者keytab_file 。
6. 连接hive代码如下 。
1
2
3
4
5
6
7
8
9
10
11
|
import
os
from
impala.dbapi
import
connect
from
krbcontext
import
krbcontext
keytab_path
=
os.path.split(os.path.realpath(__file__))[
0
]
+
'/xxx.keytab'
principal
=
'xxx'
with krbcontext(using_keytab
=
True
,principal
=
principal,keytab_file
=
keytab_path):
conn
=
connect(host
=
ip, port
=
10000
, auth_mechanism
=
'GSSAPI'
, kerberos_service_name
=
'hive'
)
cursor
=
conn.cursor()
cursor.execute(
'SELECT * FROM default.books'
)
for
row
in
cursor:
print
(row)
|
7. 连接hdfs代码如下 。
1
2
3
4
5
6
7
8
9
|
from
hdfs.ext.kerberos
import
KerberosClient
from
krbcontext
import
krbcontext
hdfs_url
=
'http://'
+
host
+
':'
+
port
data
=
self
._get_keytab(sso_ticket)
self
._save_keytab(data)
with krbcontext(using_keytab
=
True
, keytab_file
=
self
.keytab_file, principal
=
self
.user):
self
.client
=
KerberosClient(hdfs_url)
self
.client._list_status(path).json()[
'FileStatuses'
][
'FileStatus'
]
#获取path下文件及文件夹
|
8. 注:krbcontext这个包官方说支持python2,但是python3也能用 。
这个hdfs_url 一定要带"http://"不然会报错 。
9. 我新增了一些配置文件配置,具体的操作如下 。
python3.6.5基于kerberos认证的hdfs,hive连接调用(含基础环境配置) 。
1需要准备的环境 。
yum包(需要先装yum包,再装python包,不然会有问题) 。
1
2
3
4
5
6
7
|
yum install openldap
-
clients
-
y
yum install krb5
-
workstation krb5
-
libs
-
y
yum install gcc
-
c
+
+
python
-
devel.x86_64 cyrus
-
sasl
-
devel.x86_64
yum install python
-
devel
yum install krb5
-
devel
yum install python
-
krbV
yum install cyrus
-
sasl
-
plain cyrus
-
sasl
-
devel cyrus
-
sasl
-
gssapi
|
python包安装(pip或pip3,请根据实际情况选择) 。
1
2
3
4
5
6
|
pip install krbcontext
=
=
0.9
pip install thrift
=
=
0.9
.
3
pip install thrift
-
sasl
=
=
0.2
.
1
pip install impyla
=
=
0.14
.
1
pip install hdfs[kerberos]
pip install pykerberos
=
=
1.2
.
1
|
配置/etc/hosts文件(需要把大数据平台的机器和域名进行配置) 。
10.xxx.xxx.xxx name-1 panel.test.com 10.xxx.xxx.xxx name-1 。
配置/etc/krb5.conf(具体查看kerberos服务配置中心) 。
参考配置(仅供参考,具体更具自己实际配置修改) 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[libdefaults]
renew_lifetime
=
9d
forwardable
=
true
default_realm
=
PANEL.COM
ticket_lifetime
=
24h
dns_lookup_realm
=
false
dns_lookup_kdc
=
false
default_ccache_name
=
/
tmp
/
krb5cc_
%
{uid}
[logging]
default
=
FILE
:
/
var
/
log
/
krb5kdc.log
admin_server
=
FILE
:
/
var
/
log
/
kadmind1.log
kdc
=
FILE
:
/
var
/
log
/
krb5kdc1.log
[realms]
PANEL.COM
=
{
admin_server
=
panel.test1.com
kdc
=
panel.test1.com
}
|
连接代码:
hdfs:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import
json, os
from
hdfs.ext.kerberos
import
KerberosClient
from
krbcontext
import
krbcontext
def
_connect(
self
, host, port, sso_ticket
=
None
):
try
:
hdfs_url
=
'http://'
+
host
+
':'
+
port
active_str
=
'kinit -kt {0} {1}'
.
format
(
self
.keytab_file,
self
.user)
# 激活当前kerberos用户认证,因为python缓存机制,切换用户,这个缓存不会自动切换,需要手动处理下
os.system(active_str)
with krbcontext(using_keytab
=
True
, keytab_file
=
self
.keytab_file, principal
=
self
.user):
self
.client
=
KerberosClient(hdfs_url)
except
Exception as e:
raise
e
|
hive 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import
os
from
krbcontext
import
krbcontext
from
impala.dbapi
import
connect
from
auto_model_platform.settings
import
config
def
_connect(
self
, host, port, sso_ticket
=
None
):
try
:
active_str
=
'kinit -kt {0} {1}'
.
format
(
self
.keytab_file,
self
.user)
# 同hdfs
os.system(active_str)
with krbcontext(using_keytab
=
True
, principal
=
self
.user, keytab_file
=
self
.keytab_file):
self
.conn
=
connect(host
=
host, port
=
port, auth_mechanism
=
'GSSAPI'
, kerberos_service_name
=
'hive'
)
self
.cursor
=
self
.conn.cursor()
except
Exception as e:
raise
e
|
总结 。
我在做的时候也遇到很多坑,其实在这个需要理解其中原理,比如kerberos的机制和对应命令 。
如果是做基础平台用,用多用户切换的情况,建议不要用python,因为一点都不友好,官方包问题很多,我都改用java的jdbc去操作hdfs和hive了 。
如果只是自己测试和和做算法研究,还是可以用的,因为这个代码简单,容易实现 。
补充 。
kinit命令 。
kinit -kt xxxx.keytab #激活xxxx用户当前缓存 kinit list #查看当前缓存用户 。
以上这篇python3.6.5基于kerberos认证的hive和hdfs连接调用方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/u012133034/article/details/94460278 。
最后此篇关于python3.6.5基于kerberos认证的hive和hdfs连接调用方式的文章就讲到这里了,如果你想了解更多关于python3.6.5基于kerberos认证的hive和hdfs连接调用方式的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我可以将 CSV 或任何其他平面文件导入到 hive 中,而无需先在 hive 中创建和定义表结构吗?假设我的 csv 文件有 200 列,需要导入到 hive 表中。所以我必须首先在 hive 中创
我有以下示例数据,我试图在 hive 中爆炸它.. 我使用了 split 但我知道我错过了一些东西.. ["[[-80.742426,35.23248],[-80.740424,35.23184],[
我有一个很大的日志文件,我加载到 HDFS . HDFS将根据机架感知复制到不同的节点。 现在我将相同的文件加载到配置单元表中。命令如下: create table log_analysis (log
我正在尝试使用 UDF在 hive 中。但是当我尝试使用 userdate as 'unixtimeToDate' 创建一个临时函数时,我得到这个异常(exception) hive> create
在Mysql中,我们可以使用DO sleep(5) ;来进行暂停。但它在 Hive 中不起作用。 Hive有 sleep 功能吗? 最佳答案 你可以通过反射调用Thread让hive在处理每一行后多等
我正在将数据从 csv 文件导入 Hive。我的表包含字符串和整数。但是,在我的输入文件中,整数周围有空格,所以它看起来像这样: some string, 2 ,another stri
我可以嵌套吗select在 Hive 中具有不同的条件?例如 如果我有以下两个 Hive 查询: select percentile(x, 0.95) from t1 where y = 1; sel
hive 安装有什么特定的模式吗? 例如,Hadoop 安装有 3 种模式:独立、伪分布式和完全分布式。 同样,Hive 是否有任何特定类型的分布? Hive 可以分布式安装吗? 最佳答案 Hive
我正在使用 Hive,我有一个结构如下的表: CREATE TABLE t1 ( id INT, created TIMESTAMP, some_value BIGINT ); 我需要找到
我是 Hadoop 生态系统工具的新手。 任何人都可以帮助我了解 hive 、直线和 hive 之间的区别。 提前致谢! 最佳答案 Apache hive : 1] Apache Hive 是一个建立
如何在 Hive 中写出数组文字? SELECT PERCENTILE(my_column, [0.5, 0.25, 0.50, 0.75, 0.95]) AS quantiles FROM my_t
我正在尝试在Hive中重命名columnName。是否可以在Hive中重命名列名称。 tableA(栏1,_c1,_c2) 至 tableA(column1,column2,column3) ?? 最
减号查询似乎在 HIVE 中不起作用。 尝试过: select x from abc minus select x from bcd ; 我做错了还是没有为 HIVE 定义负查询?如果是这样,还有其他
我正在尝试使用 hive-jdbc 连接将数据插入 Hive (NON-ACID) 表。如果我在“语句”中执行单个 SQL 查询,它就可以工作。如果我尝试使用“addBatch”对 SQL 进行批处理
我知道这些, 要获取表中的列名,我们可以触发: show columns in . 要获取表的描述(包括 column_name、column_type 和许多其他详细信息): describe [f
无法找到有关 Hive 表最大字符限制的合适规范。 我正在开发一个涉及 hive 表的 ETL 过程,这些表已指定格式为 _ 的命名约定,并且提供的表名称远大于 30 字节(pl/sql 的正常限制)
在安装了Hive的集群中,metastore和namenode有什么?我了解 Metastore 拥有所有表架构、分区详细信息和元数据。现在这个元数据是什么?那么namenode有什么呢?这个元存储在
Hive 中静态分区和动态分区的主要区别是什么?使用单独的插入意味着静态,而对分区表的单个插入意味着动态。还有什么优点吗? 最佳答案 在静态分区中,我们需要在每个 LOAD 语句中指定分区列值。 假设
我是 hadoop 和 hive 的新手。如果有人研究过pivot in hive的概念,请与我分享。 例如:来自 teradata 或 oracle 的数据未转置,这些数据应在 hive 中转置。那
1)如果分区列没有数据,那么当你查询它时,你会得到什么错误? 2)如果某些行没有分区列,这些行将如何处理?会不会有数据丢失? 3)为什么需要对数字列进行分桶?我们也可以使用字符串列吗?流程是什么?您将
我是一名优秀的程序员,十分优秀!