presto基于kerberos访问hive的安装

presto基于kerberos访问hive的安装

注意事项:

1.安装的presto0.223最新版是需要jdk1.8的,但是hadoop的jdk是1.7.所以新建presto的用户。安装jdk1.8到presto用户环境下。让presto在presto用户下执行。

2.presto的用户组需要添加hadoop,否则找不到presto服务的keytab文件。

3.ncmp安装hive_client会自动安装一次mysql,但是如果需要在主机运行指定的mysql.那么主机不能安装hive _client.但是presto的coordinator需要配置hive.client.所以不要在没有安装hive_client客户端主机下。将presto的coordinator安装到这台主机下。

安装presto过程:

1. 新建presto用户

1.1切换root权限/或者在有sudo权限的普通用户下新建presto

sudo useradd presto

1.2presto用户添加到hadoop组

sudo usermod -a -G hadoop presto

1.4查看用户是否添加成功

[外链图片转存失败(img-bVXDgXgC-1565246366293)(presto基于kerberos访问hive的安装.assets/1565165682227.png)]

1.3修改用户密码

[外链图片转存失败(img-XPDmTIPf-1565246366295)(presto基于kerberos访问hive的安装.assets/1565165575878.png)]

1.5添加sudo权限

[外链图片转存失败(img-KMWz5w6G-1565246366296)(presto基于kerberos访问hive的安装.assets/1565165725158.png)]

root权限下,修改/etc/sudoers文件。

添加presto ALL=(ALL) NOPASSWD: ALL

2. 安装1.8jdk(切换到presto用户)

2.1上传jdk,解压tar包(),(这里我把jdk安装到了/home/presto。presto的家目录)

[外链图片转存失败(img-U8UTdcIa-1565246366298)(presto基于kerberos访问hive的安装.assets/1565165809360.png)]

tar -xvzf jdk-8u221-linux-x64.tar.gz -C ~/

[外链图片转存失败(img-8FdFwcpM-1565246366299)(presto基于kerberos访问hive的安装.assets/1565165881238.png)]

2.2配置用户的环境属性

vi .bashrc

[外链图片转存失败(img-uFoLaVqE-1565246366300)(presto基于kerberos访问hive的安装.assets/1565166013308.png)]

export JAVA_HOME=/home/presto/jdk1.8.0_221
export PATH=.: J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH

2.2.1使文件生效

source .bashrc

2.2.2查看jdk是否安装成功

[外链图片转存失败(img-h5HhYE1s-1565246366302)(presto基于kerberos访问hive的安装.assets/1565166176404.png)]

java -version

3. 安装presto

3.1下载presto-server-0.223.tar.gz上传到/home/presto

[外链图片转存失败(img-FKURVo46-1565246366303)(presto基于kerberos访问hive的安装.assets/1565167274597.png)]

3.2解压的路径(我是在/opt下创建module/目录,赋权chmod 777 /opt/module/,其实可以直接解压到/home/presto/目录下更好)

3.3解压完成

tar -xvzf ./presto-server-0.223.tar.gz -C /opt/module/

[外链图片转存失败(img-gr9ZeGey-1565246366304)(presto基于kerberos访问hive的安装.assets/1565167679930.png)]

3.4presto解压目录下,新建./etc/目录**。

mkdir ./etc

[外链图片转存失败(img-g3I5zbSF-1565246366307)(presto基于kerberos访问hive的安装.assets/1565168018469.png)]

注意(此文件夹下放置的是presto的配置文件。重要)

3.5***4大配置文件***


Node Properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data

新建etc/node.properties

  • node.environment=production presto的环境名,一个presto集群的所有的节点环境名需要相同
  • node.id=ffffffff-ffff-ffff-ffff-ffffffffffff 每个节点唯一标识符。每个运行presto节点的只要保证node.id不同就行
  • node.data-dir=/var/presto/data 日志和数据存储的位置。可以默认不变。

[外链图片转存失败(img-Qc6Hy2dB-1565246366307)(presto基于kerberos访问hive的安装.assets/1565168808723.png)]


JVM Config
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

etc/jvm.config文件是启动java虚拟机的命令行的选项,因为文件不能被shell解释,所有注意不能使用空格和其他特殊的字符


Config Properties

etc/config.properties文件是presto节点的配置信息,非常重要。由于一个presto的节点可以单纯作为coordinator或者作为worker又或者同时作为coordinator和worker

最小的coordinator的配置如下。可以直接copy

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080

最小的worker的配置如下。可以直接copy

coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery.uri=http://example.net:8080

只有单节点或者测试presto的可以采用下列的配置

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080
  • coordinator 允许这个节点作为presto的协调器coordinator.作用在于从客户端接受请求并执行查询

  • node-scheduler.include-coordinator 允许调度任务在这个协调器上。

  • http-server.http.port presto节点内外部的通讯的节点。这里这里需要查找8080端口是否被占用,这里我设置为8081

  • query.max-memory 查询可以用到的最大的分布式内存容量,默认就行。

  • query.max-memory-per-node 查询可以在任何一台机器上使用的最大用户内存默认

  • query.max-total-memory-per-node 查询可以在任何一台机器上使用的最大用户和系统内存,其中系统内存是在执行期间由读取器、写入器和网络缓冲区等使用的内存,默认

  • discovery.uri presto集群向coordinator 注册自己节点的信息


Log Levels

/etc/log.properties日志配置

com.facebook.presto=INFO

4. 运行presto命令

后台启动服务

bin/launcher start

前台启动服务

bin/launcher run

查看presto是否启动成功

[外链图片转存失败(img-lqMVFmDY-1565246366308)(presto基于kerberos访问hive的安装.assets/1565227602852.png)]

kerberos认证

1. Coordinator Kerberos Authentication

coordinator协调器认证目的是为了coordinator可以通过https能够进行kerberos认证

1.1 MIT Kerberos Configuration

无需对此项更改 /etc/krb5.conf,使用集群已经配置好的信息

[libdefaults]
  renew_lifetime = 7d
  forwardable = true
  default_realm = NEWLAND.COM
  ticket_lifetime = 24h
  dns_lookup_realm = false
  dns_lookup_kdc = false
  default_ccache_name = /tmp/krb5cc_%{uid}
  #default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
  #default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5

[domain_realm]
  NEWLAND.COM = NEWLAND.COM

[logging]
  default = FILE:/var/log/krb5kdc.log
  admin_server = FILE:/var/log/kadmind.log
  kdc = FILE:/var/log/krb5kdc.log

[realms]
  NEWLAND.COM = {
    admin_server = ncmp246
    kdc = ncmp246
  }


1.2 Kerberos Principals and Keytab Files

presto coordinator 协调器需要有kerberos实体,用于连接presto coordinator

sudo kadmin.local
addprinc -randkey presto/ncmp247@NEWLAND.COM
ktadd -k /etc/presto/presto.keytab presto/ncmp247@NEWLAND.COM

1.3 Java Cryptography Extension Policy Files

Java加密扩展策略文件Java运行时环境附带的策略文件限制了可以使用的加密密钥的强度。

US_export_policy.jar和local_policy.jar放置到$JAVA_HOME/jre/lib/security目录下

cd $JAVA_HOME/jre/lib/security 

[外链图片转存失败(img-N9Rgkk7P-1565246366309)(presto基于kerberos访问hive的安装.assets/1565230133442.png)]

1.4 Java Keystore File for TLS

通过https访问presto coordinator使用kerberos认证的时候需要在coordinator 上创建一个Java keystore File

cd ~
keytool -genkeypair -alias presto -keyalg RSA -keystore keystore.jks
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  presto-coordinator.example.com
What is the name of your organizational unit?
  [Unknown]:
What is the name of your organization?
  [Unknown]:
What is the name of your City or Locality?
  [Unknown]:
What is the name of your State or Province?
  [Unknown]:
What is the two-letter country code for this unit?
  [Unknown]:
Is CN=presto-coordinator.example.com, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
  [no]:  yes

Enter key password for <presto>
        (RETURN if same as keystore password):


验证密钥存储文件的密码,并使用keytool查看其内容

 keytool -list -v -keystore ~/presto.jks

1.5 config.properties

Kerberos身份验证是在协调器节点的配置中配置的。属性文件。下面列出了需要添加的条目

http-server.authentication.type=KERBEROS

http.server.authentication.krb5.service-name=presto
http.server.authentication.krb5.service-hostname=presto.example.com
http.server.authentication.krb5.keytab=/etc/presto/presto.keytab
http.authentication.krb5.config=/etc/krb5.conf

http-server.https.enabled=true
http-server.https.port=7778

http-server.https.keystore.path=/etc/presto_keystore.jks
http-server.https.keystore.key=keystore_password

  • http-server.authentication.type Presto协调器的身份验证类型。必须设置为KERBEROS
  • http.server.authentication.krb5.service-name Presto协调器的Kerberos服务名称。必须匹配Kerberos主体
  • http.server.authentication.krb5.keytab 用于验证Kerberos主体的keytab的位置。
  • http.authentication.krb5.config Kerberos配置文件的位置。
  • http-server.https.enabled 为Presto协调器启用HTTPS访问。应该设置为true PRESTO-CLI是使用https访问的协调器
  • http-server.https.port HTTPS服务器端口
  • http-server.https.keystore.path 用于保护TLS的Java密钥存储文件的位置
  • http-server.https.keystore.key 密钥存储库的密码。这必须与创建密钥存储库时指定的密码匹配,刚才Java Keystore File for TLS步骤中配置的密码
1.6 Kerberos Verification
  $ kinit -kt /etc/presto/presto.keytab presto/ncmp247@NEWLAND.COM
  $ klist

2. hive security connector

etc/catalog/hive.config创建hive连接器

#基于hadoop2.x的配置
#连接器名/hive.metastore的地址/端口
connector.name=hive-hadoop2
hive.metastore.uri=thrift://10.1.8.247:9083
#namenode高可用
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml

#Hive Metastore Thrift Service Authentication
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/ncmp247@NEWLAND.COM
hive.metastore.client.principal=hive/ncmp247@NEWLAND.COM
hive.metastore.client.keytab=/etc/security/keytabs/hive.service.keytab

#Hdfs Authentication

hive.hdfs.authentication.type=KERBEROS
hive.hdfs.presto.principal=nn/ncmp247@NEWLAND.COM
hive.hdfs.presto.keytab=/etc/security/keytabs/nn.service.keytab

#hdfs导线加密
hive.hdfs.wire-encryption.enabled=true 

  • connector.name=hive-hadoop2默认 基于hadoop2.X版本
  • hive.metastore.uri Hive的URI(s)将使用Thrift协议连接到
  • hive.config.resources hadoop 核心配置文件路径,为了高可用HA
  • hive.metastore.authentication.type hive 元数据验证类型 KERBEROS or NONE
  • hive.metastore.service.principal hive元数据kerberos服务实体名
  • hive.metastore.client.principal hive_cli客户端kerberos服务实体名
  • hive.metastore.client.keytab hive_cli客户端kerberos服务实体的keytab路径
  • hive.hdfs.authentication.type HDFS身份验证类型。可能的值是NONE或KERBEROS
  • hive.hdfs.presto.principal Presto在连接到HDFS时将使用的Kerberos主体。
  • hive.hdfs.presto.keytab HDFS客户端keytab位置

3.重新启动presto服务

bin/launcher start

命令行接口(command line interface)

下载presto-cli-0.223-executable.jar

mv presto-cli-0.223-executable.jar presto

赋予执行权限

chmod 770 presto

运行presto,在ncmp247机器上,执行下面命令即可,或者history | grep presto去查找历史记录

presto --server ncmp247:8081 --catalog hive --schema default

[外链图片转存失败(img-c1IO1WUq-1565246366309)(presto基于kerberos访问hive的安装.assets/1565244507739.png)]

presto基于kerberos访问hive的安装

注意事项:

1.安装的presto0.223最新版是需要jdk1.8的,但是hadoop的jdk是1.7.所以新建presto的用户。安装jdk1.8到presto用户环境下。让presto在presto用户下执行。

2.presto的用户组需要添加hadoop,否则找不到presto服务的keytab文件。

3.ncmp安装hive_client会自动安装一次mysql,但是如果需要在主机运行指定的mysql.那么主机不能安装hive _client.但是presto的coordinator需要配置hive.client.所以不要在没有安装hive_client客户端主机下。将presto的coordinator安装到这台主机下。

安装presto过程:

1. 新建presto用户

1.1切换root权限/或者在有sudo权限的普通用户下新建presto

sudo useradd presto

1.2presto用户添加到hadoop组

sudo usermod -a -G hadoop presto

1.4查看用户是否添加成功

[外链图片转存失败(img-iROnor8E-1565246367492)(presto基于kerberos访问hive的安装.assets/1565165682227.png)]

1.3修改用户密码

[外链图片转存失败(img-vzPBi0G6-1565246367492)(presto基于kerberos访问hive的安装.assets/1565165575878.png)]

1.5添加sudo权限

[外链图片转存失败(img-Lqf7am2Q-1565246367493)(presto基于kerberos访问hive的安装.assets/1565165725158.png)]

root权限下,修改/etc/sudoers文件。

添加presto ALL=(ALL) NOPASSWD: ALL

2. 安装1.8jdk(切换到presto用户)

2.1上传jdk,解压tar包(),(这里我把jdk安装到了/home/presto。presto的家目录)

[外链图片转存失败(img-cREev4Nu-1565246367494)(presto基于kerberos访问hive的安装.assets/1565165809360.png)]

tar -xvzf jdk-8u221-linux-x64.tar.gz -C ~/

[外链图片转存失败(img-A5Z3WN4s-1565246367495)(presto基于kerberos访问hive的安装.assets/1565165881238.png)]

2.2配置用户的环境属性

vi .bashrc

[外链图片转存失败(img-KmBjyadJ-1565246367496)(presto基于kerberos访问hive的安装.assets/1565166013308.png)]

export JAVA_HOME=/home/presto/jdk1.8.0_221
export PATH=.: J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH

2.2.1使文件生效

source .bashrc

2.2.2查看jdk是否安装成功

[外链图片转存失败(img-pKmXVZU9-1565246367496)(presto基于kerberos访问hive的安装.assets/1565166176404.png)]

java -version

3. 安装presto

3.1下载presto-server-0.223.tar.gz上传到/home/presto

[外链图片转存失败(img-wcMa6FRF-1565246367497)(presto基于kerberos访问hive的安装.assets/1565167274597.png)]

3.2解压的路径(我是在/opt下创建module/目录,赋权chmod 777 /opt/module/,其实可以直接解压到/home/presto/目录下更好)

3.3解压完成

tar -xvzf ./presto-server-0.223.tar.gz -C /opt/module/

[外链图片转存失败(img-aFQYe6yH-1565246367497)(presto基于kerberos访问hive的安装.assets/1565167679930.png)]

3.4presto解压目录下,新建./etc/目录**。

mkdir ./etc

[外链图片转存失败(img-5yyr5UBt-1565246367498)(presto基于kerberos访问hive的安装.assets/1565168018469.png)]

注意(此文件夹下放置的是presto的配置文件。重要)

3.5***4大配置文件***


Node Properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data

新建etc/node.properties

  • node.environment=production presto的环境名,一个presto集群的所有的节点环境名需要相同
  • node.id=ffffffff-ffff-ffff-ffff-ffffffffffff 每个节点唯一标识符。每个运行presto节点的只要保证node.id不同就行
  • node.data-dir=/var/presto/data 日志和数据存储的位置。可以默认不变。

[外链图片转存失败(img-IPqrqHBF-1565246367498)(presto基于kerberos访问hive的安装.assets/1565168808723.png)]


JVM Config
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

etc/jvm.config文件是启动java虚拟机的命令行的选项,因为文件不能被shell解释,所有注意不能使用空格和其他特殊的字符


Config Properties

etc/config.properties文件是presto节点的配置信息,非常重要。由于一个presto的节点可以单纯作为coordinator或者作为worker又或者同时作为coordinator和worker

最小的coordinator的配置如下。可以直接copy

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080

最小的worker的配置如下。可以直接copy

coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery.uri=http://example.net:8080

只有单节点或者测试presto的可以采用下列的配置

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080
  • coordinator 允许这个节点作为presto的协调器coordinator.作用在于从客户端接受请求并执行查询

  • node-scheduler.include-coordinator 允许调度任务在这个协调器上。

  • http-server.http.port presto节点内外部的通讯的节点。这里这里需要查找8080端口是否被占用,这里我设置为8081

  • query.max-memory 查询可以用到的最大的分布式内存容量,默认就行。

  • query.max-memory-per-node 查询可以在任何一台机器上使用的最大用户内存默认

  • query.max-total-memory-per-node 查询可以在任何一台机器上使用的最大用户和系统内存,其中系统内存是在执行期间由读取器、写入器和网络缓冲区等使用的内存,默认

  • discovery.uri presto集群向coordinator 注册自己节点的信息


Log Levels

/etc/log.properties日志配置

com.facebook.presto=INFO

4. 运行presto命令

后台启动服务

bin/launcher start

前台启动服务

bin/launcher run

查看presto是否启动成功

[外链图片转存失败(img-VpHh1h9r-1565246367499)(presto基于kerberos访问hive的安装.assets/1565227602852.png)]

kerberos认证

1. Coordinator Kerberos Authentication

coordinator协调器认证目的是为了coordinator可以通过https能够进行kerberos认证

1.1 MIT Kerberos Configuration

无需对此项更改 /etc/krb5.conf,使用集群已经配置好的信息

[libdefaults]
  renew_lifetime = 7d
  forwardable = true
  default_realm = NEWLAND.COM
  ticket_lifetime = 24h
  dns_lookup_realm = false
  dns_lookup_kdc = false
  default_ccache_name = /tmp/krb5cc_%{uid}
  #default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
  #default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5

[domain_realm]
  NEWLAND.COM = NEWLAND.COM

[logging]
  default = FILE:/var/log/krb5kdc.log
  admin_server = FILE:/var/log/kadmind.log
  kdc = FILE:/var/log/krb5kdc.log

[realms]
  NEWLAND.COM = {
    admin_server = ncmp246
    kdc = ncmp246
  }


1.2 Kerberos Principals and Keytab Files

presto coordinator 协调器需要有kerberos实体,用于连接presto coordinator

sudo kadmin.local
addprinc -randkey presto/ncmp247@NEWLAND.COM
ktadd -k /etc/presto/presto.keytab presto/ncmp247@NEWLAND.COM

1.3 Java Cryptography Extension Policy Files

Java加密扩展策略文件Java运行时环境附带的策略文件限制了可以使用的加密密钥的强度。

US_export_policy.jar和local_policy.jar放置到$JAVA_HOME/jre/lib/security目录下

cd $JAVA_HOME/jre/lib/security 

[外链图片转存失败(img-iiNzpY2O-1565246367499)(presto基于kerberos访问hive的安装.assets/1565230133442.png)]

1.4 Java Keystore File for TLS

通过https访问presto coordinator使用kerberos认证的时候需要在coordinator 上创建一个Java keystore File

cd ~
keytool -genkeypair -alias presto -keyalg RSA -keystore keystore.jks
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  presto-coordinator.example.com
What is the name of your organizational unit?
  [Unknown]:
What is the name of your organization?
  [Unknown]:
What is the name of your City or Locality?
  [Unknown]:
What is the name of your State or Province?
  [Unknown]:
What is the two-letter country code for this unit?
  [Unknown]:
Is CN=presto-coordinator.example.com, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
  [no]:  yes

Enter key password for <presto>
        (RETURN if same as keystore password):


验证密钥存储文件的密码,并使用keytool查看其内容

 keytool -list -v -keystore ~/presto.jks

1.5 config.properties

Kerberos身份验证是在协调器节点的配置中配置的。属性文件。下面列出了需要添加的条目

http-server.authentication.type=KERBEROS

http.server.authentication.krb5.service-name=presto
http.server.authentication.krb5.service-hostname=presto.example.com
http.server.authentication.krb5.keytab=/etc/presto/presto.keytab
http.authentication.krb5.config=/etc/krb5.conf

http-server.https.enabled=true
http-server.https.port=7778

http-server.https.keystore.path=/etc/presto_keystore.jks
http-server.https.keystore.key=keystore_password

  • http-server.authentication.type Presto协调器的身份验证类型。必须设置为KERBEROS
  • http.server.authentication.krb5.service-name Presto协调器的Kerberos服务名称。必须匹配Kerberos主体
  • http.server.authentication.krb5.keytab 用于验证Kerberos主体的keytab的位置。
  • http.authentication.krb5.config Kerberos配置文件的位置。
  • http-server.https.enabled 为Presto协调器启用HTTPS访问。应该设置为true PRESTO-CLI是使用https访问的协调器
  • http-server.https.port HTTPS服务器端口
  • http-server.https.keystore.path 用于保护TLS的Java密钥存储文件的位置
  • http-server.https.keystore.key 密钥存储库的密码。这必须与创建密钥存储库时指定的密码匹配,刚才Java Keystore File for TLS步骤中配置的密码
1.6 Kerberos Verification
  $ kinit -kt /etc/presto/presto.keytab presto/ncmp247@NEWLAND.COM
  $ klist

2. hive security connector

etc/catalog/hive.config创建hive连接器

#基于hadoop2.x的配置
#连接器名/hive.metastore的地址/端口
connector.name=hive-hadoop2
hive.metastore.uri=thrift://10.1.8.247:9083
#namenode高可用
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml

#Hive Metastore Thrift Service Authentication
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/ncmp247@NEWLAND.COM
hive.metastore.client.principal=hive/ncmp247@NEWLAND.COM
hive.metastore.client.keytab=/etc/security/keytabs/hive.service.keytab

#Hdfs Authentication

hive.hdfs.authentication.type=KERBEROS
hive.hdfs.presto.principal=nn/ncmp247@NEWLAND.COM
hive.hdfs.presto.keytab=/etc/security/keytabs/nn.service.keytab

#hdfs导线加密
hive.hdfs.wire-encryption.enabled=true 

  • connector.name=hive-hadoop2默认 基于hadoop2.X版本
  • hive.metastore.uri Hive的URI(s)将使用Thrift协议连接到
  • hive.config.resources hadoop 核心配置文件路径,为了高可用HA
  • hive.metastore.authentication.type hive 元数据验证类型 KERBEROS or NONE
  • hive.metastore.service.principal hive元数据kerberos服务实体名
  • hive.metastore.client.principal hive_cli客户端kerberos服务实体名
  • hive.metastore.client.keytab hive_cli客户端kerberos服务实体的keytab路径
  • hive.hdfs.authentication.type HDFS身份验证类型。可能的值是NONE或KERBEROS
  • hive.hdfs.presto.principal Presto在连接到HDFS时将使用的Kerberos主体。
  • hive.hdfs.presto.keytab HDFS客户端keytab位置

3.重新启动presto服务

bin/launcher start

命令行接口(command line interface)

下载presto-cli-0.223-executable.jar

mv presto-cli-0.223-executable.jar presto

赋予执行权限

chmod 770 presto

运行presto,在ncmp247机器上,执行下面命令即可,或者history | grep presto去查找历史记录

presto --server ncmp247:8081 --catalog hive --schema default

[外链图片转存失败(img-OBR2qFBg-1565246367500)(presto基于kerberos访问hive的安装.assets/1565244507739.png)]

presto基于kerberos访问hive的安装

注意事项:

1.安装的presto0.223最新版是需要jdk1.8的,但是hadoop的jdk是1.7.所以新建presto的用户。安装jdk1.8到presto用户环境下。让presto在presto用户下执行。

2.presto的用户组需要添加hadoop,否则找不到presto服务的keytab文件。

3.ncmp安装hive_client会自动安装一次mysql,但是如果需要在主机运行指定的mysql.那么主机不能安装hive _client.但是presto的coordinator需要配置hive.client.所以不要在没有安装hive_client客户端主机下。将presto的coordinator安装到这台主机下。

安装presto过程:

1. 新建presto用户

1.1切换root权限/或者在有sudo权限的普通用户下新建presto

sudo useradd presto

1.2presto用户添加到hadoop组

sudo usermod -a -G hadoop presto

1.4查看用户是否添加成功

[外链图片转存失败(img-iaBXNepf-1565246367676)(presto基于kerberos访问hive的安装.assets/1565165682227.png)]

1.3修改用户密码

[外链图片转存失败(img-bdSKvJMu-1565246367677)(presto基于kerberos访问hive的安装.assets/1565165575878.png)]

1.5添加sudo权限

[外链图片转存失败(img-p5SsI9Md-1565246367678)(presto基于kerberos访问hive的安装.assets/1565165725158.png)]

root权限下,修改/etc/sudoers文件。

添加presto ALL=(ALL) NOPASSWD: ALL

2. 安装1.8jdk(切换到presto用户)

2.1上传jdk,解压tar包(),(这里我把jdk安装到了/home/presto。presto的家目录)

[外链图片转存失败(img-dLgpR4Ni-1565246367678)(presto基于kerberos访问hive的安装.assets/1565165809360.png)]

tar -xvzf jdk-8u221-linux-x64.tar.gz -C ~/

[外链图片转存失败(img-XL7kevno-1565246367679)(presto基于kerberos访问hive的安装.assets/1565165881238.png)]

2.2配置用户的环境属性

vi .bashrc

[外链图片转存失败(img-E6C4cP5t-1565246367679)(presto基于kerberos访问hive的安装.assets/1565166013308.png)]

export JAVA_HOME=/home/presto/jdk1.8.0_221
export PATH=.: J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH

2.2.1使文件生效

source .bashrc

2.2.2查看jdk是否安装成功

[外链图片转存失败(img-O1d96TdD-1565246367680)(presto基于kerberos访问hive的安装.assets/1565166176404.png)]

java -version

3. 安装presto

3.1下载presto-server-0.223.tar.gz上传到/home/presto

[外链图片转存失败(img-8FhkZSmE-1565246367680)(presto基于kerberos访问hive的安装.assets/1565167274597.png)]

3.2解压的路径(我是在/opt下创建module/目录,赋权chmod 777 /opt/module/,其实可以直接解压到/home/presto/目录下更好)

3.3解压完成

tar -xvzf ./presto-server-0.223.tar.gz -C /opt/module/

[外链图片转存失败(img-AYcZuR5l-1565246367681)(presto基于kerberos访问hive的安装.assets/1565167679930.png)]

3.4presto解压目录下,新建./etc/目录**。

mkdir ./etc

[外链图片转存失败(img-43zwbmaC-1565246367682)(presto基于kerberos访问hive的安装.assets/1565168018469.png)]

注意(此文件夹下放置的是presto的配置文件。重要)

3.5***4大配置文件***


Node Properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data

新建etc/node.properties

  • node.environment=production presto的环境名,一个presto集群的所有的节点环境名需要相同
  • node.id=ffffffff-ffff-ffff-ffff-ffffffffffff 每个节点唯一标识符。每个运行presto节点的只要保证node.id不同就行
  • node.data-dir=/var/presto/data 日志和数据存储的位置。可以默认不变。

[外链图片转存失败(img-bDUE32rX-1565246367682)(presto基于kerberos访问hive的安装.assets/1565168808723.png)]


JVM Config
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

etc/jvm.config文件是启动java虚拟机的命令行的选项,因为文件不能被shell解释,所有注意不能使用空格和其他特殊的字符


Config Properties

etc/config.properties文件是presto节点的配置信息,非常重要。由于一个presto的节点可以单纯作为coordinator或者作为worker又或者同时作为coordinator和worker

最小的coordinator的配置如下。可以直接copy

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080

最小的worker的配置如下。可以直接copy

coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery.uri=http://example.net:8080

只有单节点或者测试presto的可以采用下列的配置

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080
  • coordinator 允许这个节点作为presto的协调器coordinator.作用在于从客户端接受请求并执行查询

  • node-scheduler.include-coordinator 允许调度任务在这个协调器上。

  • http-server.http.port presto节点内外部的通讯的节点。这里这里需要查找8080端口是否被占用,这里我设置为8081

  • query.max-memory 查询可以用到的最大的分布式内存容量,默认就行。

  • query.max-memory-per-node 查询可以在任何一台机器上使用的最大用户内存默认

  • query.max-total-memory-per-node 查询可以在任何一台机器上使用的最大用户和系统内存,其中系统内存是在执行期间由读取器、写入器和网络缓冲区等使用的内存,默认

  • discovery.uri presto集群向coordinator 注册自己节点的信息


Log Levels

/etc/log.properties日志配置

com.facebook.presto=INFO

4. 运行presto命令

后台启动服务

bin/launcher start

前台启动服务

bin/launcher run

查看presto是否启动成功

[外链图片转存失败(img-dmSNd7hh-1565246367683)(presto基于kerberos访问hive的安装.assets/1565227602852.png)]

kerberos认证

1. Coordinator Kerberos Authentication

coordinator协调器认证目的是为了coordinator可以通过https能够进行kerberos认证

1.1 MIT Kerberos Configuration

无需对此项更改 /etc/krb5.conf,使用集群已经配置好的信息

[libdefaults]
  renew_lifetime = 7d
  forwardable = true
  default_realm = NEWLAND.COM
  ticket_lifetime = 24h
  dns_lookup_realm = false
  dns_lookup_kdc = false
  default_ccache_name = /tmp/krb5cc_%{uid}
  #default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
  #default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5

[domain_realm]
  NEWLAND.COM = NEWLAND.COM

[logging]
  default = FILE:/var/log/krb5kdc.log
  admin_server = FILE:/var/log/kadmind.log
  kdc = FILE:/var/log/krb5kdc.log

[realms]
  NEWLAND.COM = {
    admin_server = ncmp246
    kdc = ncmp246
  }


1.2 Kerberos Principals and Keytab Files

presto coordinator 协调器需要有kerberos实体,用于连接presto coordinator

sudo kadmin.local
addprinc -randkey presto/ncmp247@NEWLAND.COM
ktadd -k /etc/presto/presto.keytab presto/ncmp247@NEWLAND.COM

1.3 Java Cryptography Extension Policy Files

Java加密扩展策略文件Java运行时环境附带的策略文件限制了可以使用的加密密钥的强度。

US_export_policy.jar和local_policy.jar放置到$JAVA_HOME/jre/lib/security目录下

cd $JAVA_HOME/jre/lib/security 

[外链图片转存失败(img-eA9tkAa2-1565246367684)(presto基于kerberos访问hive的安装.assets/1565230133442.png)]

1.4 Java Keystore File for TLS

通过https访问presto coordinator使用kerberos认证的时候需要在coordinator 上创建一个Java keystore File

cd ~
keytool -genkeypair -alias presto -keyalg RSA -keystore keystore.jks
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  presto-coordinator.example.com
What is the name of your organizational unit?
  [Unknown]:
What is the name of your organization?
  [Unknown]:
What is the name of your City or Locality?
  [Unknown]:
What is the name of your State or Province?
  [Unknown]:
What is the two-letter country code for this unit?
  [Unknown]:
Is CN=presto-coordinator.example.com, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
  [no]:  yes

Enter key password for <presto>
        (RETURN if same as keystore password):


验证密钥存储文件的密码,并使用keytool查看其内容

 keytool -list -v -keystore ~/presto.jks

1.5 config.properties

Kerberos身份验证是在协调器节点的配置中配置的。属性文件。下面列出了需要添加的条目

http-server.authentication.type=KERBEROS

http.server.authentication.krb5.service-name=presto
http.server.authentication.krb5.service-hostname=presto.example.com
http.server.authentication.krb5.keytab=/etc/presto/presto.keytab
http.authentication.krb5.config=/etc/krb5.conf

http-server.https.enabled=true
http-server.https.port=7778

http-server.https.keystore.path=/etc/presto_keystore.jks
http-server.https.keystore.key=keystore_password

  • http-server.authentication.type Presto协调器的身份验证类型。必须设置为KERBEROS
  • http.server.authentication.krb5.service-name Presto协调器的Kerberos服务名称。必须匹配Kerberos主体
  • http.server.authentication.krb5.keytab 用于验证Kerberos主体的keytab的位置。
  • http.authentication.krb5.config Kerberos配置文件的位置。
  • http-server.https.enabled 为Presto协调器启用HTTPS访问。应该设置为true PRESTO-CLI是使用https访问的协调器
  • http-server.https.port HTTPS服务器端口
  • http-server.https.keystore.path 用于保护TLS的Java密钥存储文件的位置
  • http-server.https.keystore.key 密钥存储库的密码。这必须与创建密钥存储库时指定的密码匹配,刚才Java Keystore File for TLS步骤中配置的密码
1.6 Kerberos Verification
  $ kinit -kt /etc/presto/presto.keytab presto/ncmp247@NEWLAND.COM
  $ klist

2. hive security connector

etc/catalog/hive.config创建hive连接器

#基于hadoop2.x的配置
#连接器名/hive.metastore的地址/端口
connector.name=hive-hadoop2
hive.metastore.uri=thrift://10.1.8.247:9083
#namenode高可用
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml

#Hive Metastore Thrift Service Authentication
hive.metastore.authentication.type=KERBEROS
hive.metastore.service.principal=hive/ncmp247@NEWLAND.COM
hive.metastore.client.principal=hive/ncmp247@NEWLAND.COM
hive.metastore.client.keytab=/etc/security/keytabs/hive.service.keytab

#Hdfs Authentication

hive.hdfs.authentication.type=KERBEROS
hive.hdfs.presto.principal=nn/ncmp247@NEWLAND.COM
hive.hdfs.presto.keytab=/etc/security/keytabs/nn.service.keytab

#hdfs导线加密
hive.hdfs.wire-encryption.enabled=true 

  • connector.name=hive-hadoop2默认 基于hadoop2.X版本
  • hive.metastore.uri Hive的URI(s)将使用Thrift协议连接到
  • hive.config.resources hadoop 核心配置文件路径,为了高可用HA
  • hive.metastore.authentication.type hive 元数据验证类型 KERBEROS or NONE
  • hive.metastore.service.principal hive元数据kerberos服务实体名
  • hive.metastore.client.principal hive_cli客户端kerberos服务实体名
  • hive.metastore.client.keytab hive_cli客户端kerberos服务实体的keytab路径
  • hive.hdfs.authentication.type HDFS身份验证类型。可能的值是NONE或KERBEROS
  • hive.hdfs.presto.principal Presto在连接到HDFS时将使用的Kerberos主体。
  • hive.hdfs.presto.keytab HDFS客户端keytab位置

3.重新启动presto服务

bin/launcher start

命令行接口(command line interface)

下载presto-cli-0.223-executable.jar

mv presto-cli-0.223-executable.jar presto

赋予执行权限

chmod 770 presto

运行presto,在ncmp247机器上,执行下面命令即可,或者history | grep presto去查找历史记录

presto --server ncmp247:8081 --catalog hive --schema default

[外链图片转存失败(img-NAcE1zvs-1565246367684)(presto基于kerberos访问hive的安装.assets/1565244507739.png)]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值