hive.server2.authentication.kerberos.keytab
/home/keytabs/hive.service.keytab
5) 修改Hadoop core-site.xml
修改core-site.xml中相关代理配置为hive代理用户,node1~node5节点core-site.xml中修改如下配置项:
<!-- 允许hive用户在任意主机节点代理任意用户和任意组 -->
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.users</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>*</value>
</property>
以上配置分发到Hadoop各个集群节点后,需要重新启动HDFS。
6) hive conf中准备hdfs-site.xml和core-site.xml
将hdfs配置文件hdfs-site.xml,core-site.xml 发送到客户端和服务端HIVE_HOME/conf/目录中。
2. Hive Cli使用Kerberos
使用Hive Client操作Kerberos需要首先启动HDFS,然后在Hive服务端启动Hive Metastore,操作如下:
#启动zookeeper及HDFS
[root@node3 ~]# zkServer.sh start
[root@node4 ~]# zkServer.sh start
[root@node5 ~]# zkServer.sh start
[root@node1 ~]# start-all.sh
#在Hive服务端node1节点启动Hive Metastore,这里可以切换成Hive用户,也可以不切换
[root@node1 ~]# su hive
[hive@node1 ~]$ hive --service metastore &
在Hive客户端node3节点上登录hive客户端:
#需要切换用户为hive,其他用户没有操作hql底层转换成mr操作的目录权限
[root@node3 ~]# su hive
[hive@node3 root]$ cd
#进行节点认证kerberos
[hive@node3 ~]$ kinit hive/node1
Password for hive/node1@EXAMPLE.COM:123456
#登录hive,建表、插入数据及查询
[hive@node3 ~]$ hive
hive> create table person (id int,name string,age int ) row format delimited fields terminated by '\t';
OK
Time taken: 0.236 seconds
hive> insert into person values (1,'zs',18);
...
hive> select * from person;
OK
1 zs 18
#在node3节点准备如下文件及数据
[hive@node3 ~]$ cat /home/hive/person.txt
2 ls 19
3 ww 20
#在hive客户端将以上文件数据加载到hive person表中,操作如下
hive> load data local inpath '/home/hive/person.txt' into table person;
hive> select * from person;
OK
1 zs 18
2 ls 19
3 ww 20
3. Hive beeline使用Kerberos
除了在hive客户端操作Hive外,还可以通过beeline方式操作Hive,具体步骤如下:
1) 在Hive服务端启动hiveserver2
#启动hiveserver2
[hive@node1 root]$ hiveserver2
2) 在Hive客户端执行beeline登录hive
#在hive 客户端通过beeline登录hive
[hive@node3 ~]$ beeline
beeline> !connect jdbc:hive2://node1:10000/default;principal=hive/node1@EXAMPLE.COM
0: jdbc:hive2://node1:10000/default> select * from person;
+------------+--------------+-------------+
| person.id | person.name | person.age |
+------------+--------------+-------------+
| 1 | zs | 18 |
| 2 | ls | 19 |
| 3 | ww | 20 |
+------------+--------------+-------------+
#也可以通过以下方式通过beeline直接操作hive
[hive@node3 ~]$ beeline -u "jdbc:hive2://node1:10000/default;principal=hive/node1@EXAMPLE.COM"
注意:无论使用哪种方式通过beeline连接hive,针对kerberos认证的hive都需要指定principal参数。
4. JDBC访问Kerberos认证Hive
在IDEA中使用JDBC方式读取Kerberos认证Hive时需要指定krb5.conf文件、Principal主体、keytab密钥文件,然后在代码中进行设置即可JDBC方式访问Kerberos认证的Hive。具体操作步骤如下:
1) 准备krb5.conf及keytab文件
在node1 kerberos服务端将/etc/krb5.conf文件放在window固定路径中,同时将hive主体对应的keytab密钥文件放在windows固定路径中。
2) 启动HiveServer2
需要在Hive服务端启动HiveServer2服务:
#在Hive服务端node1节点执行如下命令
[root@node1 ~]# su hive
[hive@node1 root]$ hiveserver2
3) 编写JDBC访问Hive代码
/**
* 通过JDBC方式读取Kerberos认证Hive的数据
*/
public class JDBCReadAuthHive {
// Kerberos主体
static final String principal = "hive/node1@EXAMPLE.COM";
// Kerberos配置文件路径
static final String krb5FilePath = "D:\\idea_space\\KerberosAuth\\KerberosAuthHive\\src\\main\\resources\\krb5.conf";
// Keytab文件路径
static final String keytabFilePath = "D:\\idea_space\\KerberosAuth\\KerberosAuthHive\\src\\main\\resources\\hive.service.keytab";
public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException {
// 1.加载Kerberos配置文件
System.setProperty("java.security.krb5.conf", krb5FilePath);
// 2.设置Kerberos认证
Configuration configuration = new Configuration();
configuration.set("hadoop.security.authentication", "kerberos");
UserGroupInformation.setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab(principal, keytabFilePath);
// 3.JDBC连接字符串
String jdbcURL = "jdbc:hive2://node1:10000/default;principal=hive/node1@EXAMPLE.COM";
Class.forName("org.apache.hive.jdbc.HiveDriver");
try {
// 4.创建Hive连接
Connection connection = DriverManager.getConnection(jdbcURL, "", "");
// 5.执行Hive查询
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("SELECT id,name,age FROM person");
// 6.处理查询结果
while (rs.next()) {
System.out.println(rs.getInt(1) + "," +
rs.getString(2)+ "," +
rs.getInt(3)) ;
}
// 7.关闭连接
rs.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
以上代码需要在项目maven pom.xml文件中加入如下依赖:
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>3.1.3</version>
</dependency>
以上代码运行结果如下:
1,zs,18
2,ls,19
3,ww,20
5. Spark访问Kerberos认证Hive
这里是通过SparkSQL来读取Kerberos认证Hive中的数据,按照如下步骤配置即可。
1) 准备krb5.conf及keytab文件
在node1 kerberos服务端将/etc/krb5.conf文件放在window固定路径中,同时将hive主体对应的keytab密钥文件放在windows固定路径中。这里项目中已经有了,可以忽略。
2) 准备访问Hive需要的资源文件
将HDFS中的core-site.xml 、hdfs-site.xml 、yarn-site.xml文件及Hive客户端配置hive-site.xml上传到项目resources资源目录中。
3) 准备Maven项目依赖
在IDEA项目中将hive-jdbc依赖进行注释,该包与SparkSQL读取Hive中的数据的包有冲突,向maven依赖中导入如下依赖包:
<!-- Spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.4.0</version>
</dependency>
<!-- SparkSQL -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.12</artifactId>
<version>3.4.0</version>
</dependency>
<!-- SparkSQL ON Hive-->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.12</artifactId>
<version>3.4.0</version>
</dependency>
4) 编写SparkSQL读取Hive代码
/**
* Spark 读取Kerberos认证Hive的数据
*/
public class SparkReadAuthHive {
public static void main(String[] args) throws IOException {
//进行kerberos认证
System.setProperty("java.security.krb5.conf", "D:\\idea_space\\KerberosAuth\\KerberosAuthHDFS\\src\\main\\resources\\krb5.conf");
String principal = "hive/node1@EXAMPLE.COM";
String keytabPath = "D:\\idea_space\\KerberosAuth\\KerberosAuthHive\\src\\main\\resources\\hive.service.keytab";
UserGroupInformation.loginUserFromKeytab(principal, keytabPath);
SparkSession spark = SparkSession.builder().appName("SparkReadAuthHive")
.master("local")
// .config("hive.metastore.uris", "thrift://node1:9083")
.enableHiveSupport()
.getOrCreate();
spark.sql("select * from person").show();
spark.stop();
}
}
以上代码编写完成后执行可以查询hive表中对应的数据。
6. Flink访问Kerberos认证Hive
Flink读取Kerberos认证Hive也需要进行认证,这里以FlinkSQL读取Hive中数据为例来演示,步骤如下。
1) 准备krb5.conf及keytab文件
在node1 kerberos服务端将/etc/krb5.conf文件放在window固定路径中,同时将hive主体对应的keytab密钥文件放在windows固定路径中。这里项目中已经有了,可以忽略。
2) 准备访问Hive需要的资源文件
将HDFS中的core-site.xml 、hdfs-site.xml 、yarn-site.xml文件及Hive客户端配置hive-site.xml上传到项目resources资源目录中。这里项目中已经有了,可以忽略。
3) 准备Maven项目依赖
在IDEA项目中引入如下Flink依赖包:
<!-- Flink 读取Hive表数据需要依赖 -->
<!-- Flink批和流开发依赖包 -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients</artifactId>
<version>1.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-common</artifactId>
<version>1.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-api-java</artifactId>
<version>1.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-planner_2.12</artifactId>
<version>1.16.0</version>
</dependency>
<!-- Flink Dependency -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-hive_2.12</artifactId>
<version>1.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-api-java-bridge</artifactId>
<version>1.16.0</version>
</dependency>
<!-- Hive Dependency -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>3.1.3</version>
</dependency>
注意:Spark操作Hive依赖与Flink操作Hive依赖也有冲突,这里由于把代码放在一个项目中,所以执行Spark或者Flink代码时把对方依赖注释掉即可。
4) 编写FlinkSQL读取Hive代码
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网络安全面试题
绿盟护网行动
还有大家最喜欢的黑客技术
网络安全源码合集+工具包
所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
nimg.cn/img_convert/5912337446dee53639406fead3d3f03c.jpeg)
网络安全源码合集+工具包
所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-bIzjspmV-1712839429664)]