HDFS
1.选择自定义。
2.选择HDFS ZK YARN然后点继续。
3.选择安装的主机。
4.审核更改默认就行,点继续。
5.配置HDFS的HA。
安装好以后点击hdfs进入实例就能够看到启动了高可用。
6.启动YARN的高可用。
KAFKA
更具需求修改资源
一直点继续就行了
FlUME
HIVE
在/usr/share/java下面有mysql的驱动才行,不然就连接失败,最好所有机器都分发下驱动。
连通成功以后一直点击继续。
SPARK
然后一直点继续就行了。
然后一直点下一步就行。
OOZIE
下面的操作一直点继续安装就行了。
HUE
修改完配置以后记得重启,也就是修改了指定的namenode以后要重启才会生效。
配置负责均衡
然后一直下一步就行了。
FLINK
编译Flink的准备工作
mkdir /opt/software && cd /opt/softwarecd /opt/software/# 下载相关的包wget https://archive.apache.org/dist/flink/flink-1.13.6/flink-1.13.6-bin-scala_2.11.tgzwget https://archive.apache.org/dist/flink/flink-1.13.6/flink-1.13.6-src.tgzwget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz#安装配置maventar -zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/modulevi /etc/profile.d/my_env.sh##添加以下变量 #MAVEN_HOME export MAVEN_HOME=/opt/module/apache-maven-3.6.3export PATH=$PATH:$MAVEN_HOME/binsource /etc/profile.d/my_env.shmvn -vcd /opt/module/apache-maven-3.6.3/conf/rm -rf settings.xmlwget https://cdh6-3-2.oss-cn-hangzhou.aliyuncs.com/cdh/settings.xml
修改Flink源码配置文件
tar -zxvf /opt/software/flink-1.13.6-src.tgz -C /opt/modulecd /opt/modulemv flink-1.13.6/ flink-1.13.6-srccd /opt/software/tar -zxvf flink-1.13.6-bin-scala_2.11.tgz -C /opt/modulecd /opt/module/flink-1.13.6-src/vi /opt/module/flink-1.13.6-src/pom.xml<!-- 修改hadoop版本 96行 --> <hadoop.version>3.0.0-cdh6.3.2</hadoop.version> <!-- 修改hive版本 149行 --> <hive.version>2.1.1-cdh6.3.2</hive.version> <!-- 156行 --> <hivemetastore.hadoop.version>3.0.0-cdh6.3.2</hivemetastore.hadoop.version> <!-- </build>标签之后 </project>之前 添加--> <repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> </repository> <repository> <id>confluent-repo</id> <url>https://packages.confluent.io/maven/</url> </repository> </repositories>
下面加到第一个一个build后面就行了
vi /opt/module/flink-1.13.6-src/flink-connectors/flink-sql-connector-hive-2.2.0/pom.xml<!-- 修改hive-exec版本 48行--> <artifactId>hive-exec</artifactId> <version>2.1.1-cdh6.3.2</version>
配置MAVEN仓库
cd /opt/module/apache-maven-3.6.3#选用地址wget https://vauolab39lsdutji7q2p.oss-cn-zhangjiakou-internal.aliyuncs.com/apache/flink/repository.zip#备用地址wget https://cdh6-3-2.oss-cn-hangzhou.aliyuncs.com/cdh/repository.zipyum -y install unzipunzip repository.zipvi /opt/module/apache-maven-3.6.3/conf/settings.xml<localRepository>/opt/module/apache-maven-3.6.3/repository</localRepository>
编译Flink源码
cd /opt/module/flink-1.13.6-srcmvn clean install -DskipTests -Dfast -Drat.skip=true -Dhaoop.version=3.0.0-cdh6.3.2 -Dinclude-hadoop -Dscala-2.11 -T10C
稍等半个小时以后编译成功了。
考备编译好的包到下载的正式包的lib下面。
cp /opt/module/flink-1.13.6-src/flink-connectors/flink-sql-connector-hive-2.2.0/target/flink-sql-connector-hive-2.2.0_2.11-1.13.6.jar /opt/module/flink-1.13.6/lib/cp /opt/cloudera/parcels/CDH/jars/hive-exec-2.1.1-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/ cp /opt/cloudera/parcels/CDH/jars/libfb303-0.9.3.jar /opt/module/flink-1.13.6/lib/ cp /opt/cloudera/parcels/CDH/jars/hadoop-common-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/ cp /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-client-common-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/ cp /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-client-core-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/cp /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-client-hs-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/ cp /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/cd /opt/module/flink-1.13.6/lib/
制作parcel包和csd文件
#制作parcel包和csd文件cd /opt/moduletar -zcvf flink-1.13.6-cdh6.3.2.tgz flink-1.13.6yum install -y gitcd /opt/modulegit clone https://github.com/YUjichang/flink-parcel.git#加速地址git clone https://gitclone.com/github.com/YUjichang/flink-parcel.gitcd /opt/module/flink-parcel/#修改配置文件如下vi flink-parcel.properties放目录地址 FLINK_URL= /opt/module/flink-1.13.6-cdh6.3.2.tgz #flink版本号 FLINK_VERSION=1.13.6 #扩展版本号 EXTENS_VERSION=CDH6.3.2 #操作系统版本,以centos为例 OS_VERSION=7 #CDH 小版本 CDH_MIN_FULL=6.0 CDH_MAX_FULL=6.4#CDH大版本 CDH_MIN=5 CDH_MAX=6./build.sh parcel./build.sh csd
CM安装Flink
cd /opt/cloudera/parcel-reposz manifest.json#然后在下载上面生成的manifest.json# 在hadoop102执行scp FLINK-1.13.6-CDH6.3.2-el7.parcel* hadoop101:/opt/cloudera/parcel-repo# 在hadoop101上面的包如下-rw-r--r-- 1 root root 2082186246 May 1 17:26 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel-rw-r--r-- 1 root root 40 May 1 17:20 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha-rw-r----- 1 cloudera-scm cloudera-scm 79610 May 2 00:09 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.torrent-rw-r--r-- 1 root root 395609370 May 2 12:43 FLINK-1.13.6-CDH6.3.2-el7.parcel-rw-r--r-- 1 root root 40 May 2 12:43 FLINK-1.13.6-CDH6.3.2-el7.parcel.sha-rw-r--r-- 1 root root 33892 May 1 17:19 manifest.jsonsz manifest.json#拷贝FLINK_ON_YARNcd /opt/module/flink-parcelscp FLINK_ON_YARN-1.13.6.jar hadoop101:/opt/cloudera/csd/ [root@hadoop101 csd]# lsFLINK_ON_YARN-1.13.6.jar#重启服务systemctl restart cloudera-scm-server#查看启动日志tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
把hadoop102生成的manfest.json放在hadoop101的 manfest.json最下面就行
下面分配完以后点击激活
添加服务
下面就出现了flink
然后一直点继续就行了
由于没有监控到Flink服务,重启下CM
直接点击下面的重启不用修改任何配置。
刷新下就行了,或者点进去退出刷新下。
验证Flink是否成功
跑一个per-job
chmod 777 /opt/cloudera/parcels/FLINK/bin/flinksudo -u hdfs /opt/cloudera/parcels/FLINK/bin/flink run -t yarn-per-job /opt/cloudera/parcels/FLINK/lib/flink/examples/batch/WordCount.jar
验证Flink SQL
#验证flink sql/opt/cloudera/parcels/FLINK/bin/flink-sql-client
Kerberos
概念
Kerberos中有以下一些概念需要了解:
(1)KDC:密钥分发中心,负责管理发放票据,记录授权。
(2)Realm:Kerberos管理领域的标识。(领域名)
(3)principal:当每添加一个用户或服务的时候都需要向kdc添加一条principal,principl的形式为:主名称(用户|服务名)/实例名(组|实例名)@领域名。(账户)
(4)主名称:主名称可以是用户名或服务名,表示是用于提供各种网络服务(如hdfs,yarn,hive)的主体。
(5)实例名:实例名简单理解为主机名。
使用的时候不光用户要注册,所使用的服务也要注册。
认证原理
上面的KDS包含AS认证服务器,Database数据库,TGS授权票据服务器。
zhangsan/atguigu是用户主体,hdfs/hadoop102是服务主体。
kinit带有用户主体,他会在Database找有没有对应的用户zhangsan/atguigu.
如果找到了那么就返回一个TGT。得到TGT以后缓存到客户端,这个时候用户认证通过。
用户发送hadoop fs -ls / 就会携带TGT到TGS里面去授权,TGS更具TGT的信息查看是否对应的服务有注册,如果服务有注册,那么就会返回给客户端一个Server Ticket服务票据。这个时候才能够访问HDFS,这个时候结果才能够返回给客户端。
Apache : 1.用户认证。2.用户主体的注册&服务主体的注册。3. 用户的认证。
CDH:1.用户主体的注册。2.用户的认证。服务主体CDH会自动的创建。
安装
安装
################安装##############server安装(hadoop101)yum install -y krb5-server krb5-workstation krb5-libsrpm -qa | grep krb5[root@hadoop101 bin]# rpm -qa | grep krb5krb5-workstation-1.15.1-55.el7_9.x86_64krb5-devel-1.15.1-55.el7_9.x86_64krb5-server-1.15.1-55.el7_9.x86_64krb5-libs-1.15.1-55.el7_9.x86_64#client安装(hadoop102,hadoop103,hadoop104,hadoop105)yum install -y krb5-workstation krb5-libsrpm -qa | grep krb5[root@hadoop105 ~]# rpm -qa | grep krb5krb5-devel-1.15.1-55.el7_9.x86_64krb5-libs-1.15.1-55.el7_9.x86_64krb5-workstation-1.15.1-55.el7_9.x86_64
修改kdc配置
##############修改配置############hadoop101vi /var/kerberos/krb5kdc/kdc.conf[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88[realms] HADOOP.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab max_life = 1d max_renewable_life = 7d supported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }HADOOP.COM:realm名称,Kerberos支持多个realm,一般全用大写。max_life = 1d: 保存到客户端的TGT的时间。max_renewable_life = 7d :自动刷新TGT时间,这里配置最多刷新7天。supported_enctypes:这些是认证的算法,这里配置比原来的少了一个最前面的算法,因为加的话要有对应的依赖包。
krb5文件配置
##############修改配置############hadoop101vi /etc/krb5.confincludedir /etc/krb5.conf.d/[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log[libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt default_realm = HADOOP.COM #default_ccache_name = KEYRING:persistent:%{uid} udp_preference_limit = 1[realms] HADOOP.COM = { kdc = hadoop101 admin_server = hadoop101}[domain_realm]# .example.com = EXAMPLE.COM# example.com = EXAMPLE.COMudp_preference_limit :禁止使用udp防止返回Hadoop的时候有错误。default_realm:配置默认域。ticket_lifetime = 24h 这两个和上面的配置一样的TGT时间。renew_lifetime = 7d 这两个和上面的配置一样的TGT时间。
分发配置文件
/opt/shell/bin/xsync /etc/krb5.conf
生成Kerberos数据库
##############生成Kerberos数据库############hadoop101kdb5_util create -s #后面我输入了123,密码随意记住就行ls /var/kerberos/krb5kdc/[root@hadoop101 bin]# ls /var/kerberos/krb5kdc/kadm5.acl kdc.conf principal principal.kadm5 principal.kadm5.lock principal.ok# 赋予Kerberos管理员所有权限vi /var/kerberos/krb5kdc/kadm5.acl#修改为以下内容:*/admin@HADOOP.COM *说明:*/admin:admin实例的全部主体@HADOOP.COM:realm*:全部权限这个授权的意思:就是授予admin实例的全部主体对应HADOOP.COM领域的全部权限。也就是创建Kerberos主体的时候如果实例为admin,就具有HADOOP.COM领域的全部权限,比如创建如下的主体user1/admin就拥有全部的HADOOP.COM领域的权限。
启动Kerberos服务
#########启动Kerberos服务########## hadoop101systemctl start krb5kdcsystemctl start kadminsystemctl enable krb5kdcsystemctl is-enabled krb5kdcsystemctl enable kadminsystemctl is-enabled kadmin
登录Kerberos数据库
##############登录Kerberos数据库################## 1)本地登录(无需认证),按两下tab键就能够打印所有的命令kadmin.local # 2)远程登录(需进行主体认证)kadmin# 3)退出输入:exit#创建一个admin主体在admin组,输入密码的时候就是刚才初始化Kerberos数据库的123addprinc admin/adminkadmin.local: addprinc admin/adminWARNING: no policy specified for admin/admin@HADOOP.COM; defaulting to no policyEnter password for principal "admin/admin@HADOOP.COM": Re-enter password for principal "admin/admin@HADOOP.COM": Principal "admin/admin@HADOOP.COM" created.########查看所有的主体#############listprincskadmin.local: listprincsK/M@HADOOP.COMadmin/admin@HADOOP.COMkadmin/admin@HADOOP.COMkadmin/changepw@HADOOP.COMkadmin/hadoop101@HADOOP.COMkiprop/hadoop101@HADOOP.COMkrbtgt/HADOOP.COM@HADOOP.COM#############为刚才的admin/admin修改密码########### 123 密码随意cpw admin/admin##########使用命令行配置###########kadmin.local -q "addprinc zhangsan/test"kadmin.local -q "listprincs"[root@hadoop101 bin]# kadmin.local -q "listprincs"Authenticating as principal root/admin@HADOOP.COM with password.K/M@HADOOP.COMadmin/admin@HADOOP.COMkadmin/admin@HADOOP.COMkadmin/changepw@HADOOP.COMkadmin/hadoop101@HADOOP.COMkiprop/hadoop101@HADOOP.COMkrbtgt/HADOOP.COM@HADOOP.COMzhangsan/test@HADOOP.COM
Kerberos主体认证
Kerberos提供了两种认证方式,一种是通过输入密码认证,另一种是通过keytab密钥文件认证,但两种方式不可同时使用。
#########################密码认证######################### 1)使用kinit进行主体认证kinit admin/admin# 2)查看认证凭证klist [root@hadoop101 bin]# klistTicket cache: FILE:/tmp/krb5cc_0Default principal: admin/admin@HADOOP.COMValid starting Expires Service principal05/02/2023 14:32:48 05/03/2023 14:32:48 krbtgt/HADOOP.COM@HADOOP.COMrenew until 05/09/2023 14:32:48# 3)销毁认证凭证kdestroy[root@hadoop101 bin]# kdestroy[root@hadoop101 bin]# klistklist: No credentials cache found (filename: /tmp/krb5cc_0)#################秘钥认证################################# 由于认证过程中都需要输入密码。所以我们需要为user用户生成keytab文件,便于后续免密登录,不指定路径的话默认放在当前工作目录,我们指定到“/etc/ security/”下。# 注意:在生成keytab文件时需要加参数”-norandkey”,否则CDH平台的kerberos密码会重置,会导致直接使用kinit admin/admin初始化时会提示密码错误。# kadmin.local -q "xst -k /root/admin.keytab admin/admin@HADOOP.COM" #这种会对于密码进行修改kadmin.local -q "xst -norandkey -k /root/admin.keytab admin/admin@HADOOP.COM"kinit -kt /root/admin.keytab admin/adminklist[root@hadoop101 bin]# klistTicket cache: FILE:/tmp/krb5cc_0Default principal: admin/admin@HADOOP.COMValid starting Expires Service principal05/02/2023 14:37:51 05/03/2023 14:37:51 krbtgt/HADOOP.COM@HADOOP.COMrenew until 05/09/2023 14:37:51 kdestroy
CDH启用Kerberos安全认证
#############创建一个cm的用户#########密码随意,我设置了123456kadmin.local -q "addprinc cloudera-scm/admin"
Kerberos 加密类型:aes128-cts、des3-hmac-sha1、arcfour-hmac。
因为上面已经配置了
后面的就一直继续就行了。
实操
使用hive和hdfs
###############Kerberos安全环境实操####################### [root@hadoop101 bin]# kdestroy# [root@hadoop101 bin]# klist#登录# kinit admin/admin@HADOOP.COM#添加主体# kadmin.local -q "addprinc hive/test@HADOOP.COM" ,kinit hive/test@HADOOP.COM,hadoop fs -ls /(hive/test@HADOOP.COM这个用户也能够访问)#删除主体# kadmin.local -q "delprinc hive/test@HADOOP.COM"# 在启用Kerberos之后,系统与系统(flume-kafka)之间的通讯,以及用户与系统(user-hdfs)之间的通讯都需要先进行安全认证,认证通过之后方可进行通讯。# 故在启用Kerberos后,数仓中使用的脚本等,均需要加入一步安全认证的操作,才能正常工作。# 1)在Kerberos数据库中创建用户主体/实例kadmin.local -q "addprinc hive/hive@HADOOP.COM"# 2)进行用户认证kinit hive/hive@HADOOP.COM# 3)访问HDFShadoop fs -ls /Found 2 itemsdrwxrwxrwt - hdfs supergroup 0 2023-01-04 11:26 /tmpdrwxr-xr-x - hdfs supergroup 0 2023-01-04 11:29 /user# 4)hive查询hive hive> show databases;OKdefault
使用kafka
# 修改Kafka配置# 在Kafka的配置项搜索“security.inter.broker.protocol”,设置为SALS_PLAINTEXTvi /var/lib/hive/jaas.confKafkaClient {com.sun.security.auth.module.Krb5LoginModule requireduseTicketCache=true;};vi /etc/kafka/conf/consumer.propertiessecurity.protocol=SASL_PLAINTEXTsasl.kerberos.service.name=kafkaexport KAFKA_OPTS="-Djava.security.auth.login.config=/var/lib/hive/jaas.conf"#消费数据kafka-console-consumer --bootstrap-server hadoop103:9092 --topic topic_start --from-beginning --consumer.config /etc/kafka/conf/consumer.propertiesCaused by: javax.security.auth.login.LoginException: Could not login: the client is being asked for a password, but the Kafka client code does not currently support obtaining a password from the user. not available to garner authentication information from the userat com.sun.security.auth.module.Krb5LoginModule.promptForPass(Krb5LoginModule.java:940)at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:760)at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:617)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)at javax.security.auth.login.LoginContext.login(LoginContext.java:587)at org.apache.kafka.common.security.authenticator.AbstractLogin.login(AbstractLogin.java:60)at org.apache.kafka.common.security.kerberos.KerberosLogin.login(KerberosLogin.java:103)at org.apache.kafka.common.security.authenticator.LoginManager.<init>(LoginManager.java:61)at org.apache.kafka.common.security.authenticator.LoginManager.acquireLoginManager(LoginManager.java:111)at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:149)... 8 more#如果没有进行认证,那么就会报错kadmin.local -q "addprinc kafka/kafka@HADOOP.COM" , kinit kafka/kafka@HADOOP.COM ,klist , kdestroykafka-console-consumer --bootstrap-server hadoop103:9092 --topic topic_start --from-beginning --consumer.config /etc/kafka/conf/consumer.propertiesvi /etc/profile.d/my_env.shexport KAFKA_OPTS="-Djava.security.auth.login.config=/var/lib/hive/jaas.conf"source /etc/profile.d/my_env.sh
HDFS WebUI浏览器认证
这个要安装火狐,配置东西才能用,用处不太大Hue也能够看,就不配置了。
安全之Sentry权限管理
Apache Sentry是Cloudera公司发布的一个Hadoop开源组件,它提供了细粒度级、基于角色的授权以及多租户的管理模式。
Sentry提供了对Hadoop集群上经过身份验证的用户和应用程序的数据控制和强制执行精确级别权限的功能。Sentry目前可以与Apache Hive,Hive Metastore / HCatalog,Apache Solr,Impala和HDFS(仅限于Hive表数据)一起使用。
Sentry旨在成为Hadoop组件的可插拔授权引擎。它允许自定义授权规则以验证用户或应用程序对Hadoop资源的访问请求。Sentry是高度模块化的,可以支持Hadoop中各种数据模型的授权。
Sentry中的角色
安装
集成HIVE,YARN,HDFS
配置好以后记得重启相关服务。
#与hive集成(hive)# 在hive配置项中搜索“HiveServer2 启用模拟”,取消勾选# 在Hive配置项中搜索“启用数据库中的存储通知”,勾选。# 在Hive配置项中搜索“Sentry”,勾选Sentry。#确保hive用户能够提交MR任务(yarn)# 在yarn配置项中搜索“允许的系统用户”,确保包含“hive”。#在HDFS配置项中搜索“启用访问控制列表”,勾选。(hdfs)
实战HUE
##############实战################HUE(配置完以后重启)# 在HUE配置项中搜索“Sentry”,勾选Sentry。#Sentry# 在Sentry的配置项中搜索“管理员组”,其中包括hive、impala,只有当某用户所属组位于其中时,才可为其他用户授予权限。#######添加linux用户########## 在Hive集群所有节点创建两个用户reader,writer,为权限测试做准备。useradd readerpasswd readeruseradd writerpasswd writer# 使用hive用户登录HUE,创建两个用户组reader、writer,并在两个用户组下创建两个用户reader、writer,为权限测试做准备,并且需要创建hive组,将hive用户添加进hive组。##########################hadoop101操作#######################如果不用hive登录FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:User kafka does not have privileges for CREATETABLE)#先用hive相关用户登录kdestroykadmin.local -q "addprinc hive/hive@HADOOP.COM"kinit hive/hive@HADOOP.COM#创建hive表hive create table student(id string comment '学号',name string comment '姓名',sex string comment '性别',age string comment '年龄') comment '学生表';insert into student values('1','孙悟空','男','100');insert into student values('2','明世隐','男','101');insert into student values('3','高渐离','男','102');insert into student values('4','孙尚香','女','103');insert into student values('5','安琪拉','女','104');##########创建表以后只有hive用户可以看到##############
添加角色
由于上面只配置了只能查询student的name,那么查询的时候就只能查询name。
useradd buzhidao
passwd buzhidao
密码buzhidao
hive用户登录,创建 buzhidao 组权限全部和 buzhidao 用户添加到buzhidao组里面然后给表权限
##############linux的密码和HUE的密码相同才行第一次使用的时候##################
Sentry实战之命令行
# 1)在所有节点创建两个用户reader_cmd,writer_cmduseradd reader_cmdpasswd reader_cmduseradd writer_cmdpasswd writer_cmd# 密码都是123456# 2)使用Sentry管理员用户hive通过beeline客户端连接HiveServer2kinit hive/hive@HADOOP.COMbeeline -u "jdbc:hive2://hadoop102:10000/;principal=hive/hadoop102@HADOOP.COM"# 3)创建Role(reader_role_cmd,writer_role_cmd)create role reader_role_cmd;create role writer_role_cmd;# 4)为role赋予privilegeGRANT select ON DATABASE default TO ROLE reader_role_cmd;GRANT insert ON DATABASE default TO ROLE writer_role_cmd;# 5)将role授予用户组GRANT ROLE reader_role_cmd TO GROUP reader_cmd;GRANT ROLE writer_role_cmd TO GROUP writer_cmd;# 6)查看权限授予情况# (1)查看所有role(管理员)SHOW ROLES;+------------------+| role |+------------------+| buzhidao || fasdf || fasdffadsf || reader_role || reader_role_cmd || teset || testetset || writer_role_cmd |+------------------+# (2)查看指定用户组的role(管理员)SHOW ROLE GRANT GROUP reader_cmd;+------------------+---------------+-------------+----------+| role | grant_option | grant_time | grantor |+------------------+---------------+-------------+----------+| reader_role_cmd | false | 0 | -- |+------------------+---------------+-------------+----------+# (3)查看当前认证用户的roleSHOW CURRENT ROLES;# (4)查看指定ROLE的具体权限(管理员)SHOW GRANT ROLE reader_role_cmd;+-----------+--------+------------+---------+------------------+-----------------+------------+---------------+----------------+----------+| database | table | partition | column | principal_name | principal_type | privilege | grant_option | grant_time | grantor |+-----------+--------+------------+---------+------------------+-----------------+------------+---------------+----------------+----------+| default | | | | reader_role_cmd | ROLE | SELECT | false | 1683019307000 | -- |+-----------+--------+------------+---------+------------------+-----------------+------------+---------------+----------------+----------+# 7)权限测试# (1)为reader_cmd、writer_cmd创建Kerberos主体kadmin.local -q "addprinc reader_cmd/reader_cmd@HADOOP.COM"kadmin.local -q "addprinc writer_cmd/writer_cmd@HADOOP.COM"# (2)使用reader_cmd登录HiveServer2,查询default库下的任意一张表kinit reader_cmd/reader_cmd@HADOOP.COMbeeline -u "jdbc:hive2://hadoop102:10000/;principal=hive/hadoop102@HADOOP.COM"+-----------+| tab_name |+-----------+| student |+-----------+1 row selected (0.417 seconds)select * from student;+-------------+---------------+--------------+--------------+| student.id | student.name | student.sex | student.age |+-------------+---------------+--------------+--------------+| 1 | 孙悟空 | 男 | 100 || 2 | 明世隐 | 男 | 101 || 3 | 高渐离 | 男 | 102 || 4 | 孙尚香 | 女 | 103 |+-------------+---------------+--------------+--------------+insert into student values('5','安琪拉','女','104');0: jdbc:hive2://hadoop102:10000/> insert into student values('5','安琪拉','女','104');Error: Error while compiling statement: FAILED: SemanticException No valid privileges User reader_cmd does not have privileges for QUERY The required privileges: Server=server1->Db=default->Table=student->action=insert->grantOption=false; (state=42000,code=40000)# (3)使用writer_cmd登录HiveServer2,查询gmall库下的任意一张表kinit writer_cmd/writer_cmd@HADOOP.COMbeeline -u "jdbc:hive2://hadoop102:10000/;principal=hive/hadoop102@HADOOP.COM"insert into student values('5','你好','女','104');select * from student;0: jdbc:hive2://hadoop102:10000/> select * from student;Error: Error while compiling statement: FAILED: SemanticException No valid privileges User writer_cmd does not have privileges for QUERY The required privileges: Server=server1->Db=default->Table=student->Column=id->action=select->grantOption=false; (state=42000,code=40000)
上面创建的用户类似于下面,这里只是命令行能用,如果现在HUE上面使用,用hive用户直接创建用户和对应的linux密码就行了,因为上面配置了权限和组,所以就不用配置就直接创建用户就可以用了。
useradd reader_cmdpasswd reader_cmduseradd writer_cmdpasswd writer_cmd