Kerberos 认证
管理员可以使用集群成员服务器上的keytab 进行 kerberos 认证,从而获得集群管理员权限,用户需要先进行 kerberos 认证才能对集群进行操作。
在命令行中输入如下命令即可完成kerberos 认证:
klist -kt /etc/security/keytabs/<user>.keytab | awk '{print $4}' | grep -e '<user>.*@.*' | head -1 | xargs kinit -kt /etc/security/keytabs/<user>.keytab也可以将klist 和 kinit 命令分开使用:
1、输入 klist -kt /etc/security/keytabs/<user>.keytab 获取 principal;
2、输入 kinit -kt /etc/security/keytabs/<user>.keytab <principal> 完成认证。
没有通过kerberos 认证,直接登录 Beeline客户端会抛出如下异常:
javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos credentials)]下面以hdfs 用户作为认证用户,其示例如下:
1、输入 klist -kt /etc/security/keytabs/hdfs.keytab,运行结果如下,图中红框部分即为 principal:
2、输入 下述命令,该命令从指定的 keytab 文件中读取对应主体的密钥,然后向 Kerberos 认证服务器(KDC)请求一个初始票据。其中 principal 是从 klist 命令中获取。
kinit -kt /etc/security/keytabs/hdfs.keytab <principal>完成kerberos 认证后再次登录 Hive 客户端,发现可以成功登录。
使用Beeline 的命令为
$HIVE_HOME/bin/beeline -u 'jdbc:hive2://<hiveserver2_url>:<port>...' -n <user> [other options ...]如果启用了服务发现模式,则启动命令变为
$HIVE_HOME/bin/beeline -u 'jdbc:hive2://<server_list>;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=<kerberos_principal>' 连接参数说明如下:
1、hiveserver2_url:必要参数,zookeeper 服务地址;
2、port:必要参数,zookeeper 服务端口;
3、kerberos_principal:kerberos principal。
Beeline 客户端启动参数基本与 Hive Client 相同,详细解析如下:
1、-u:指定 JDBC 连接串;
2、-r:指定重新连接到上次保存的连接 url;
3、-n:指定连接用户名;
4、-p:指定连接密码;
5、-d:指定连接使用的引擎全类名;
6、-w:指定密码文件。
Usage: java org.apache.hive.cli.beeline.BeeLine
-u <database url> the JDBC URL to connect to
-r reconnect to last saved connect url (in conjunction with !save)
-n <username> the username to connect as
-p <password> the password to connect as
-d <driver class> the driver class to use
-i <init file> script file for initialization
-e <query> query that should be executed
-f <exec file> script file that should be executed
-w (or) --password-file <password file> the password file to read password from
--hiveconf property=value Use value for given property
--hivevar name=value hive variable name and value
This is Hive specific settings in which variables
can be set at session level and referenced in Hive
commands or queries.启动Beeline客户端的示例如下(示例中的zk_host_name请替换为实际集群信息):
# 启动 Beeline 客户端
# - hiveserver2_url 参数为:zk_host_name1
# - port 参数为 2181
$HIVE_HOME/bin/beeline -u "jdbc:hive2://zk_host_name1:2181,zk_host_name2:2181,zk_host_name3:2181/default;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;" Beeline 客户端界面如下:
注意
生产环境推荐使用Beeline 通过 HiveServer2 访问
导入、导出数据
Hive 中通过 LOAD DATA 导入数据,其基本语法如下:
LOAD DATA [local] inpath <path>
[overwrite] into table
<tb_name> [partition (partcol1=val1,...)];参数说明如下:
1、local:表示是否从本地加载数据,默认从 HDFS 读取数据;
2、inpath:表示加载数据的路径;
3、overwrite:表示是否覆盖原始数据;
4、into table:表示要加载到哪张表中;
5、partition:表示要加载到哪个分区中。
Hive 使用 EXPORT 命令将表数据或者分区数据导出到 HDFS 上,导出语法如下:
EXPORT TABLE tablename
[PARTITION (part_column="value"[, ...])]
TO 'export_target_path' [ FOR replication('eventid') ];一个简单的数据导入、导出例子如下:
-- 1. 将测试数据 SampleDatas.csv 放置在/tmp/dataset/目录下
-- 2. 创建CSV格式存储表 test_tmp.csv_tbl
CREATE TABLE test_tmp.csv_tbl
(
email STRING,
IMEI STRING,
IPv4 STRING,
IPv6 STRING,
MAC STRING,
MEID STRING,
CarNumber STRING,
IdentityCardNumber STRING,
URL STRING,
BankCardNumber STRING,
domain STRING,
MobilePhoneNumber STRING
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;-- 3. 导入数据
LOAD DATA LOCAL INPATH '/tmp/dataset/SampleDatas.csv' INTO TABLE test_tmp.csv_tbl;-- 4. 导出数据
EXPORT TABLE test_tmp.csv_tbl TO 'hdfs:///ctyunns/path/to/export';