Vertica Integrating with (Kerberized) Hadoop
一、Vertica 与 Hadoop
Hadoop 与 Vertica 一样,使用节点集群进行分布式处理。
Vertica 与 Hadoop 集成主要使用 HDFS,即 Hadoop 分布式文件系统。
可以通过多种方式将 Vertica 与 HDFS 结合使用:
1、使用 HCATALOG 直接访问 Hive 数据库进行数据查询
2、使用外部表访问 HDFS 数据
通过在数据库创建外部表直接访问 hdfs 的数据,实现对数据的分层管理,冷数据存放在 hdfs,热数据存放在数据库,释放数据库存储空间,降低存储压力。
3、将 HDFS 作为 Vertica 数据库的 Storage Location
HDFS 可以作为 Vertica 的一个存储路径,由数据库进行管理。
4、以列存储格式导出到 HDFS
将 Vertica 数据库中的数据以 Hadoop 列格式(Parquet、ORC)导出到 HDFS 与其他 Hadoop 组件共享。
5、HDFS 作为 EON 模式的共享存储(Communal Storage)
二、Vertica 集成带 Kerberos 认证的 Hadoop 集群步骤
0 环境描述
Vertica 集群:v001,v002,v003
Kerberos Server:k001
hdfs namenode:h001
hdfs data node:h002,h003,h004
1 Vertica 集群操作系统配置
分别修改 Vertica 集群3台服务器的/etc/hosts文件
vi /etc/hosts 192.168.1.101 v001.hadoop.com v001 192.168.1.102 v002.hadoop.com v002 192.168.1.103 v003.hadoop.com v003 192.168.1.111 k001 192.168.1.121 h001 192.168.1.122 h002 192.168.1.123 h003 192.168.1.124 h004
2 生成票据
登录到KDC服务器,使用kadmin登录票据管理添加、导出票据
# 添加票据
addprinc -randkey -requires_preauth +allow_forwardable vertica/v001.hadoop.com@HADOOP.COM
addprinc -randkey -requires_preauth +allow_forwardable vertica/v002.hadoop.com@HADOOP.COM
addprinc -randkey -requires_preauth +allow_forwardable vertica/v003.hadoop.com@HADOOP.COM
addprinc -randkey -requires_preauth +allow_forwardable host/v001.hadoop.com@HADOOP.COM
addprinc -randkey -requires_preauth +allow_forwardable host/v002.hadoop.com@HADOOP.COM
addprinc -randkey -requires_preauth +allow_forwardable host/v003.hadoop.com@HADOOP.COM
addprinc -randkey -requires_preauth +allow_forwardable host/v001@HADOOP.COM
addprinc -randkey -requires_preauth +allow_forwardable host/v002@HADOOP.COM
addprinc -randkey -requires_preauth +allow_forwardable host/v003@HADOOP.COM
addprinc -randkey -requires_preauth +allow_forwardable dbadmin@HADOOP.COM
# 导出票据
xst -k /tmp/vertica.keytab vertica/v001.hadoop.com@HADOOP.COM vertica/v002.hadoop.com@HADOOP.COM vertica/v003.hadoop.com@HADOOP.COM host/v001.hadoop.com host/v002.hadoop.com host/v003.hadoop.com host/v001@HADOOP.COM host/v002@HADOOP.COM host/v003@HADOOP.COM dbadmin@HADOOP.COM
将上面生成的票据拷贝到Vertica集群3个节点的/home/dbadmin/目录下,且票据文件的权限为600,属主为dbadmin
[root@V001 ~]# cls_run ls -l /home/dbadmin/vertica.keytab -rw------- 1 dbadmin verticadba 5568 Feb 27 18:53 /home/dbadmin/vertica.keytab -rw------- 1 dbadmin verticadba 5568 Feb 27 18:53 /home/dbadmin/vertica.keytab -rw------- 1 dbadmin verticadba 5568 Feb 27 18:53 /home/dbadmin/vertica.keytab
3 数据库配置
1、将Hadoop配置文件hdfs-site.xml和core-site.xml文件存放到Vertica集群所有节点相同路径(eg:/opt/hadoopclient/),并保证dbadmin用户对该路径有读写权限,然后设置数据库HadoopConfDir参数:
ALTER DATABASE mydb SET HadoopConfDir = '/opt/hadoopclient/';
2、设置数据库参数KerberosKeyTabFile指向票据文件路径:
ALTER DATABASE mydb SET KerberosKeytabFile = '/home/dbadmin/vertica.keytab';
所有节点的票据文件都存放在同一路径(例如/home/dbadmin/vertica.keytab),并且dbadmin用户有权限访问该路径。
3、设置数据库参数KerberosServiceName:
ALTER DATABASE mydb SET KerberosServiceName = 'vertica';
4、设置域名,与Hadoop相同:
ALTER DATABASE mydb SET KerberosRealm = 'HADOOP.COM'
5、设置数据库参数KerberosHostname
select set_config_parameter('KerberosHostname', 'v001.hadoop.com');
6、重启数据库,使参数生效:
[dbadmin@szxtsp104 ~]$ admintools -t stop_db -d <dbname> -p<dbpassword> -F [dbadmin@szxtsp104 ~]$ admintools -t start_db -d <dbname> -p<dbpassword> -F
4 验证
dbadmin=> select kerberos_config_check();
--------------------------------------------------------------------
ok: kinit exists
ok: klist exists
ok: krb5 exists at [/etc/krb5.conf]
ok: Vertica Keytab file is set to [/home/dbadmin/vertica.keytab]
ok: Vertica Keytab file exists at [/home/dbadmin/vertica.keytab]
Kerberos configuration parameters set in the database
KerberosServiceName : [vertica]
KerberosHostname : [v001.hadoop.com]
KerberosRealm : [HADOOP.COM]
KerberosKeytabFile : [/home/dbadmin/vertica.keytab]
Vertica Principal: [vertica/v001.hadoop.com@HADOOP.COM]
ok: Can read Vertica keys
ok: Can get tickets for Vertica principal
ok: Vertica can kinit
(1 row)
vsql -h v001 -U dbadmin <<- EOF copy public.test from 'webhdfs://h001:25002/user/hive/warehouse/cmdata.db/c04_org_info/stat_dt=20161204/000000_0' orc direct; EOF