Kerberos安全认证-连载10-Hive Kerberos 安全配置及访问_idea连接 kerberos 认证的hiveserver2(1)


**4) 修改hive-site.xml配置文件**


在hive服务端和客户端配置hive-site.xml,向该配置中追加如下配置:



hive.server2.authentication KERBEROS hive.server2.authentication.kerberos.principal hive/node1@EXAMPLE.COM hive.server2.authentication.kerberos.keytab /home/keytabs/hive.service.keytab hive.metastore.sasl.enabled true hive.metastore.kerberos.principal hive/node1@EXAMPLE.COM hive.metastore.kerberos.keytab.file /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>



本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。


最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。


最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。


![](https://img-blog.csdnimg.cn/img_convert/311903982dea1d8a5d2c98fc271b5b41.jpeg)



### 学习路线图


 其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。


相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。


![](https://img-blog.csdnimg.cn/img_convert/1ddfaf7dc5879b1120e31fafa1ad4dc7.jpeg)


#### 网络安全工具箱


当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份**我自己整理的网络安全入门工具以及使用教程和实战。**


![](https://img-blog.csdnimg.cn/img_convert/bcd1787ce996787388468bb227d8f959.jpeg)


#### 项目实战


最后就是项目实战,这里带来的是**SRC资料&HW资料**,毕竟实战是检验真理的唯一标准嘛~


![](https://img-blog.csdnimg.cn/img_convert/35fc46df24091ce3c9a5032a9919b755.jpeg)


#### 面试题


归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值