hadoop 3.X 分布式HA集成Kerbos(保姆级教程)

前提:先安装Kerbos

1、创建keytab目录

在每台机器上上提前创建好对应的kertab目录

[hadoop@tv3-hadoop-01 ~]$ sudo mkdir -p /BigData/run/hadoop/keytab/

[hadoop@tv3-hadoop-01 ~]$ sudo mkdir -p /opt/security/

[hadoop@tv3-hadoop-01 ~]$ sudo chown hadoop:hadoop /BigData/run/hadoop/keytab/

[hadoop@tv3-hadoop-01 ~]$ ls -lrt /BigData/run/hadoop/

drwxr-xr-x 2 hadoop hadoop  4096 Jun 26 23:22 keytab

2、创建kerbos证书

进入管理机器,比如tv3-hadoop-01【本例中hadoop服务启动统一使用hadoop用户】

# 进入kadmin

[root@tv3-hadoop-01 ~]# kadmin.local

Authenticating as principal hadoop/admin@EXAMPLE.COM with password.

kadmin.local:  

# 查看用户

kadmin.local:  listprincs

# 创建用户

addprinc -randkey hadoop/tv3-hadoop-01@EXAMPLE.COM

3、证书添加

依次增加其他hdfs节点的验证,并导出到/BigData/run/hadoop/keytab/hadoop.keytab这个文件:

addprinc -randkey hadoop/tv3-hadoop-01@EXAMPLE.COM
addprinc -randkey hadoop/tv3-hadoop-02@EXAMPLE.COM
addprinc -randkey hadoop/tv3-hadoop-03@EXAMPLE.COM
addprinc -randkey hadoop/tv3-hadoop-04@EXAMPLE.COM
addprinc -randkey hadoop/tv3-hadoop-05@EXAMPLE.COM
addprinc -randkey hadoop/tv3-hadoop-06@EXAMPLE.COMaddprinc -randkey HTTP/tv3-hadoop-01@EXAMPLE.COM
addprinc -randkey HTTP/tv3-hadoop-02@EXAMPLE.COM
addprinc -randkey HTTP/tv3-hadoop-03@EXAMPLE.COM
addprinc -randkey HTTP/tv3-hadoop-04@EXAMPLE.COM
addprinc -randkey HTTP/tv3-hadoop-05@EXAMPLE.COM
addprinc -randkey HTTP/tv3-hadoop-06@EXAMPLE.COMktadd -k /BigData/run/hadoop/keytab/hadoop.keytab hadoop/tv3-hadoop-01@EXAMPLE.COM
ktadd -k /BigData/run/hadoop/keytab/hadoop.keytab hadoop/tv3-hadoop-02@EXAMPLE.COM
ktadd -k /BigData/run/hadoop/keytab/hadoop.keytab hadoop/tv3-hadoop-03@EXAMPLE.COM
ktadd -k /BigData/run/hadoop/keytab/hadoop.keytab hadoop/tv3-hadoop-04@EXAMPLE.COM
ktadd -k /BigData/run/hadoop/keytab/hadoop.keytab hadoop/tv3-hadoop-05@EXAMPLE.COM
ktadd -k /BigData/run/hadoop/keytab/hadoop.keytab hadoop/tv3-hadoop-06@EXAMPLE.COMktadd -k /BigData/run/hadoop/keytab/HTTP.keytab HTTP/tv3-hadoop-01@EXAMPLE.COM
ktadd -k /BigData/run/hadoop/keytab/HTTP.keytab HTTP/tv3-hadoop-02@EXAMPLE.COM
ktadd -k /BigData/run/hadoop/keytab/HTTP.keytab HTTP/tv3-hadoop-03@EXAMPLE.COM
ktadd -k /BigData/run/hadoop/keytab/HTTP.keytab HTTP/tv3-hadoop-04@EXAMPLE.COM
ktadd -k /BigData/run/hadoop/keytab/HTTP.keytab HTTP/tv3-hadoop-05@EXAMPLE.COM
ktadd -k /BigData/run/hadoop/keytab/HTTP.keytab HTTP/tv3-hadoop-06@EXAMPLE.COM

4、权限修改&kertab同步

修改权限到hadoop启动用户,否则会有权限访问问题,并同步到其他hdfs所有服务的节点上(JN,DN,NN,RM,NM)

su  - hadoopsudo chown hadoop:hadoop /BigData/run/hadoop/keytab/*.keytabscp /BigData/run/hadoop/keytab/hadoop.keytab  /BigData/run/hadoop/keytab/HTTP.keytab hadoop@tv3-hadoop-06:/BigData/run/hadoop/keytab

5、修改配置文件

5.1 hdfs-site.xml

    <property><name>dfs.block.access.token.enable</name><value>true</value><description>Enable HDFS block access tokens for secure operations</description></property><property><name>dfs.namenode.kerberos.principal</name><value>hadoop/_HOST@EXAMPLE.COM</value><description>namenode对应的kerberos账户为 nn/主机名@EXAMPLE.CPOM   _HOST会自动转换为主机名</description></property><property><name>dfs.namenode.keytab.file</name><value>/BigData/run/hadoop/keytab/hadoop.keytab</value><description>因为使用-randkey 创建的用户 密码随机不知道,所以需要用免密登录的keytab文件 指定namenode需要用的keytab文件在哪里</description></property><property><name>dfs.namenode.kerberos.internal.spnego.principal</name><value>HTTP/_HOST@EXAMPLE.COM</value><description>https 相关(如开启namenodeUI)使用的账户</description></property><property><name>dfs.namenode.kerberos.internal.spnego.keytab</name><value>/BigData/run/hadoop/keytab/HTTP.keytab</value></property><property><name>dfs.secondary.namenode.kerberos.principal</name><value>hadoop/_HOST@EXAMPLE.COM</value><description>secondarynamenode使用的账户</description></property><property><name>dfs.secondary.namenode.keytab.file</name><value>/BigData/run/hadoop/keytab/hadoop.keytab</value><description>sn对应的keytab文件</description></property><property><name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name><value>HTTP/_HOST@EXAMPLE.COM</value><description>sn需要开启http页面用到的账户</description></property><property><name>dfs.secondary.namenode.kerberos.internal.spnego.keytab</name><value>/BigData/run/hadoop/keytab/HTTP.keytab</value></property><property><name>dfs.journalnode.kerberos.principal</name><value>hadoop/_HOST@EXAMPLE.COM</value></property><property><name>dfs.journalnode.keytab.file</name><value>/BigData/run/hadoop/keytab/hadoop.keytab</value></property><property><name>dfs.journalnode.kerberos.internal.spnego.principal</name><value>HTTP/_HOST@EXAMPLE.COM</value></property><property><name>dfs.journalnode.kerberos.internal.spnego.keytab</name><value>/BigData/run/hadoop/keytab/HTTP.keytab</value></property><property><name>dfs.encrypt.data.transfer</name><value>true</value><description>数据传输协议激活数据加密</description></property><property><name>dfs.datanode.kerberos.principal</name><value>hadoop/_HOST@EXAMPLE.COM</value><description>datanode用到的账户</description></property><property><name>dfs.datanode.keytab.file</name><value>/BigData/run/hadoop/keytab/hadoop.keytab</value><description>datanode用到的keytab文件路径</description></property><property><name>dfs.data.transfer.protection</name><value>integrity</value></property><property><name>dfs.https.port</name><value>50470</value></property><!-- required if hdfs support https --><property><name>dfs.http.policy</name><value>HTTPS_ONLY</value></property><!-- WebHDFS security config --><property><name>dfs.web.authentication.kerberos.principal</name><value>HTTP/_HOST@EXAMPLE.COM</value><description>web hdfs 使用的账户</description></property><property><name>dfs.web.authentication.kerberos.keytab</name><value>/BigData/run/hadoop/keytab/HTTP.keytab</value><description>对应的keytab文件</description></property>

5.2 core-site.xml

    <property><name>dfs.block.access.token.enable</name><value>true</value><description>Enable HDFS block access tokens for secure operations</description></property><property><name>hadoop.security.authorization</name><value>true</value><description>是否开启hadoop的安全认证</description></property><property><name>hadoop.security.authentication</name><value>kerberos</value><description>使用kerberos作为hadoop的安全认证方案</description></property><property><name>hadoop.rpc.protection</name><value>authentication</value><description>authentication : authentication only (default); integrity : integrity check in addition to authentication; privacy : data encryption in addition to integrity</description></property><property><name>hadoop.security.auth_to_local</name><value>RULE:[2:$1@$0](hadoop@.*EXAMPLE.COM)s/.*/hadoop/RULE:[2:$1@$0](HTTP@.*EXAMPLE.COM)s/.*/hadoop/DEFAULT</value></property>

5.3 yarn-site.xml

    <property><name>hadoop.http.authentication.type</name><value>kerberos</value></property><property><name>hadoop.http.filter.initializers</name><value>org.apache.hadoop.security.AuthenticationFilterInitializer</value></property><property><name>yarn.resourcemanager.webapp.delegation-token-auth-filter.enabled</name><value>false</value><description>标记以启用使用RM身份验证筛选器覆盖默认kerberos身份验证筛选器以允许使用委派令牌进行身份验证(如果缺少令牌,则回退到kerberos)。仅适用于http身份验证类型为kerberos的情况。</description></property><property><name>hadoop.http.authentication.kerberos.principal</name><value>HTTP/_HOST@EXAMPLE.COM</value></property><property><name>hadoop.http.authentication.kerberos.keytab</name><value>/BigData/run/hadoop/keytab/HTTP.keytab</value></property><property><name>yarn.acl.enable</name><value>true</value></property><property><name>yarn.web-proxy.principal</name><value>HTTP/_HOST@EXAMPLE.COM</value></property><property><name>yarn.web-proxy.keytab</name><value>/BigData/run/hadoop/keytab/HTTP.keytab</value></property><property><name>yarn.resourcemanager.principal</name><value>hadoop/_HOST@EXAMPLE.COM</value></property><property><name>yarn.resourcemanager.keytab</name><value>/BigData/run/hadoop/keytab/hadoop.keytab</value></property><!-- nodemanager --><property><name>yarn.nodemanager.principal</name><value>hadoop/_HOST@EXAMPLE.COM</value></property><property><name>yarn.nodemanager.keytab</name><value>/BigData/run/hadoop/keytab/hadoop.keytab</value></property><property><name>yarn.nodemanager.container-executor.class</name><value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
</property><property><name>yarn.nodemanager.linux-container-executor.group</name><value>hadoop</value></property><property><name>yarn.nodemanager.linux-container-executor.path</name><value>/BigData/run/hadoop/bin/container-executor</value></property><!-- webapp webapp configs --><property><name>yarn.resourcemanager.webapp.spnego-principal</name><value>HTTP/_HOST@EXAMPLE.COM</value></property><property><name>yarn.resourcemanager.webapp.spnego-keytab-file</name><value>/BigData/run/hadoop/keytab/HTTP.keytab</value></property><property><name>yarn.timeline-service.http-authentication.type</name><value>kerberos</value><description>Defines authentication used for the timeline server HTTP endpoint. Supported values are: simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME#</description></property><property><name>yarn.timeline-service.principal</name><value>hadoop/_HOST@EXAMPLE.COM</value></property><property><name>yarn.timeline-service.keytab</name><value>/BigData/run/hadoop/keytab/hadoop.keytab</value></property><property><name>yarn.timeline-service.http-authentication.kerberos.principal</name><value>HTTP/_HOST@EXAMPLE.COM</value></property><property> <name>yarn.timeline-service.http-authentication.kerberos.keytab</name><value>/BigData/run/hadoop/keytab/HTTP.keytab</value></property><property><name>yarn.nodemanager.container-localizer.java.opts</name><value>-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=EXAMPLE.COM -Djava.security.krb5.kdc=tv3-hadoop-01:88</value></property><property><name>yarn.nodemanager.health-checker.script.opts</name><value>-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=EXAMPLE.COM -Djava.security.krb5.kdc=tv3-hadoop-01:88</value></property><property><name>yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user</name><value>hadoop</value></property><property><name>yarn.nodemanager.linux-container-executor.group</name><value>hadoop</value></property>

5.4 mapred-site.xml


<property><name>mapreduce.map.java.opts</name><value>-Xmx1638M -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=EXAMPLE.COM -Djava.security.krb5.kdc=tv3-hadoop-01:88</value>
</property><property><name>mapreduce.reduce.java.opts</name><value>-Xmx3276M -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=EXAMPLE.COM -Djava.security.krb5.kdc=tv3-hadoop-01:88</value>
</property><property><name>mapreduce.jobhistory.keytab</name><value>/BigData/run/hadoop/keytab/hadoop.keytab</value>
</property><property><name>mapreduce.jobhistory.principal</name><value>hadoop/_HOST@EXAMPLE.COM</value>
</property><property><name>mapreduce.jobhistory.webapp.spnego-keytab-file</name><value>/BigData/run/hadoop/keytab/HTTP.keytab</value>
</property><property><name>mapreduce.jobhistory.webapp.spnego-principal</name><value>HTTP/_HOST@EXAMPLE.COM</value>
</property>

5.5 配置文件同步到各个节点

cd /BigData/run/hadoop/etc/hadoop
scp hdfs-site.xml  yarn-site.xml core-site.xml mapred-site.xml hadoop@tv3-hadoop-06:/BigData/run/hadoop/etc/hadoop/

6、配置SSL(开启https)

6.1 创建https证书(需要在每台机器上执行)
 

[hadoop@tv3-hadoop-01 hadoop]# mkdir -p /opt/security/kerberos_https

[hadoop@tv3-hadoop-01 hadoop]# cd /opt/security/kerberos_https

6.2 在任意一个hadoop节点生成CA证书

[root@tv3-hadoop-01 kerberos_https]# openssl req -new -x509 -keyout hdfs_ca_key -out hdfs_ca_cert -days 9999 -subj /C=CN/ST=shanxi/L=xian/O=hlk/OU=hlk/CN=tv3-hadoop01
Generating a 2048 bit RSA private key
...........................................................................................+++
.................................................................................+++
writing new private key to 'hdfs_ca_key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
[root@tv3-hadoop-01 kerberos_https]# ls -lrt 
total 8
-rw-r--r-- 1 root root 1834 Jun 29 09:45 hdfs_ca_key
-rw-r--r-- 1 root root 1302 Jun 29 09:45 hdfs_ca_cert

6.3 将上面生成的CA 证书发送到每个节点上


scp -r /opt/security/kerberos_https root@tv3-hadoop-06:/opt/security/

 6.4 在每个hadoop节点上制作证书

cd /opt/security/kerberos_https# 所有需要输入密码的地方全部输入123456(方便起见,如果你对密码有要求请自行修改)# 1  输入密码和确认密码:123456,此命令成功后输出keystore文件name="CN=$HOSTNAME, OU=hlk, O=hlk, L=xian, ST=shanxi, C=CN"#需要输入第一步输入的密码四次keytool -keystore keystore -alias localhost -validity 9999 -genkey -keyalg RSA -keysize 2048 -dname "$name"# 2 输入密码和确认密码:123456,提示是否信任证书:输入yes,此命令成功后输出truststore文件keytool -keystore truststore -alias CARoot -import -file hdfs_ca_cert# 3 输入密码和确认密码:123456,此命令成功后输出cert文件keytool -certreq -alias localhost -keystore keystore -file cert# 4 此命令成功后输出cert_signed文件openssl x509 -req -CA hdfs_ca_cert -CAkey hdfs_ca_key -in cert -out cert_signed -days 9999 -CAcreateserial# 5 输入密码和确认密码:123456,是否信任证书,输入yes,此命令成功后更新keystore文件keytool -keystore keystore -alias CARoot -import -file hdfs_ca_certkeytool -keystore keystore -alias localhost -import -file cert_signed[root@tv3-hadoop-06 kerberos_https]# ls -lrt
total 28
-rw-r--r-- 1 root root 1302 Jun 29 09:57 hdfs_ca_cert
-rw-r--r-- 1 root root 1834 Jun 29 09:57 hdfs_ca_key
-rw-r--r-- 1 root root  984 Jun 29 10:03 truststore
-rw-r--r-- 1 root root 1085 Jun 29 10:03 cert
-rw-r--r-- 1 root root   17 Jun 29 10:04 hdfs_ca_cert.srl
-rw-r--r-- 1 root root 1188 Jun 29 10:04 cert_signed
-rw-r--r-- 1 root root 4074 Jun 29 10:04 keystore

6.5 修改SSL server文件

在${HADOOP_HOME}/etc/hadoop目录构建ssl-server.xml文件

<configuration><property><name>ssl.server.truststore.location</name><value>/opt/security/kerberos_https/truststore</value><description>Truststore to be used by NN and DN. Must be specified.</description></property><property><name>ssl.server.truststore.password</name><value>123456</value><description>Optional. Default value is "". </description></property><property><name>ssl.server.truststore.type</name><value>jks</value><description>Optional. The keystore file format, default value is "jks".</description></property><property><name>ssl.server.truststore.reload.interval</name><value>10000</value><description>Truststore reload check interval, in milliseconds. Default value is 10000 (10 seconds). </description></property><property><name>ssl.server.keystore.location</name><value>/opt/security/kerberos_https/keystore</value><description>Keystore to be used by NN and DN. Must be specified.</description></property><property><name>ssl.server.keystore.password</name><value>123456</value><description>Must be specified.</description></property><property><name>ssl.server.keystore.keypassword</name><value>123456</value><description>Must be specified.</description></property><property><name>ssl.server.keystore.type</name><value>jks</value><description>Optional. The keystore file format, default value is "jks".</description></property><property><name>ssl.server.exclude.cipher.list</name><value>TLS_ECDHE_RSA_WITH_RC4_128_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_RSA_WITH_RC4_128_MD5</value><description>Optional. The weak security cipher suites that you want excludedfrom SSL communication.</description></property></configuration>

6.6 修改SSL-client文件

<configuration><property><name>ssl.client.truststore.location</name><value>/opt/security/kerberos_https/truststore</value><description>Truststore to be used by clients like distcp. Must be specified.  </description></property><property><name>ssl.client.truststore.password</name><value>123456</value><description>Optional. Default value is "". </description></property><property><name>ssl.client.truststore.type</name><value>jks</value><description>Optional. The keystore file format, default value is "jks".</description></property><property><name>ssl.client.truststore.reload.interval</name><value>10000</value><description>Truststore reload check interval, in milliseconds. Default value is 10000 (10 seconds). </description></property><property><name>ssl.client.keystore.location</name><value>/opt/security/kerberos_https/keystore</value><description>Keystore to be used by clients like distcp. Must be   specified.   </description></property><property><name>ssl.client.keystore.password</name><value>123456</value><description>Optional. Default value is "". </description></property><property><name>ssl.client.keystore.keypassword</name><value>123456</value><description>Optional. Default value is "". </description></property><property><name>ssl.client.keystore.type</name><value>jks</value><description>Optional. The keystore file format, default value is "jks". </description></property></configuration>

6.7 hdfs配置HTTPS(修改后需要同步到每个节点)

  <property><name>dfs.http.policy</name><value>HTTPS_ONLY</value><description>所有开启的web页面均使用https, 细节在ssl server 和client那个配置文件内配置</description></property>

7、启动hadoop基础测试

7.1 HA模式启动顺序

建议依次启动JN、NN、ZKFC、DN、RM、NM服务

7.2 启动JN(每个服务启动之前需要init单独的节点)

kinit -kt /BigData/run/hadoop/keytab/hadoop.keytab hadoop/$HOSTNAME@EXAMPLE.COM
##重启JournalNodehadoop-daemon.sh stop journalnode && hadoop-daemon.sh start journalnode##启动JournalNodehadoop-daemon.sh start journalnode##停止JournalNodehadoop-daemon.sh stop journalnode

7.3 启动NameNode和ZKFC服务

如果是新集群,需要提前format

hadoop namenode -format
kinit -kt /BigData/run/hadoop/keytab/hadoop.keytab hadoop/$HOSTNAME@EXAMPLE.COM
##重启nnhadoop-daemon.sh stop namenode && hadoop-daemon.sh start namenode##启动nnhadoop-daemon.sh start namenode##停止nnhadoop-daemon.sh stop namenode##重启zkfchadoop-daemon.sh stop zkfc && hadoop-daemon.sh start zkfc##启动zkfchadoop-daemon.sh start zkfc##停止zkfchadoop-daemon.sh stop zkfc

7.4 启动DatanNode服务

kinit -kt /BigData/run/hadoop/keytab/hadoop.keytab hadoop/$HOSTNAME@EXAMPLE.COM
##重启dnhadoop-daemon.sh stop datanode && hadoop-daemon.sh start datanode##启动dnhadoop-daemon.sh start datanode##停止dnhadoop-daemon.sh stop datanode

7.5 验证HA功能(多NameNode)

[hadoop@tv3-hadoop-01 hadoop]$ hdfs haadmin -failover nn2 nn1

7.6 验证HDFS文件读写

[hadoop@tv3-hadoop-01 ~]$ echo '123' > b
[hadoop@tv3-hadoop-01 ~]$ hdfs dfs -put -f b /tmp/
[hadoop@tv3-hadoop-01 ~]$ hdfs dfs -cat /tmp/b
123
[hadoop@tv3-hadoop-01 ~]$ 

7.7 启动HTTPS后 webui无法访问UI状态

7.8 启动Resoucemanager服务

kinit -kt /BigData/run/hadoop/keytab/hadoop.keytab hadoop/$HOSTNAME@EXAMPLE.COM
##重启rmyarn --daemon stop resourcemanager && yarn --daemon start resourcemanager##启动rmyarn --daemon start resourcemanager##停止rmyarn --daemon stop resourcemanager

7.9. 启动Nodemanager服务

kinit -kt /BigData/run/hadoop/keytab/hadoop.keytab hadoop/$HOSTNAME@EXAMPLE.COM
##重启rmyarn --daemon stop nodemanager && yarn --daemon start nodemanager
##启动rmyarn --daemon start nodemanager##停止rmyarn --daemon stop nodemanager

7.10 验证Mapreduce job

hadoop jar /BigData/run/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar pi 5 10

看到下面结果代表YARN已经部署ok

Job Finished in 66.573 seconds
Estimated value of Pi is 3.28000000000000000000
[hadoop@tv3-hadoop-01 hadoop]$ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/38426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python从入门到进阶】59、Pandas库中Series对象的操作(二)

接上篇《58、Pandas库中Series对象的操作(一)》 上一篇我们讲解了Pandas库中Series对象的基本概念、对象创建和操作&#xff0c;本篇我们来继续学习Series对象的运算、函数应用、时间序列操作&#xff0c;以及Series的案例实践。 一、Series对象的运算 1. 数值型数据的算术运…

1、音视频解封装流程---解复用

对于一个视频文件(mp4格式/flv格式)&#xff0c;audio_pkt或者video_pkt是其最基本的数据单元&#xff0c;即视频文件是由独立的视频编码包或者音频编码包组成的。 解复用就是从视频文件中把视频包/音频包单独读取出来保存成独立文件&#xff0c;那么如何得知packet是视频包还是…

指针赋值与引用传递:C语言的基础知识与实践技巧

指针赋值与引用传递&#xff1a;C语言的基础知识与实践技巧 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; **1. **引言 在C语言中&#xff0c;指针是一种强…

Vue CLI VS Vite

Vue CLI与Vite区别&#xff1a; Vue CLI与Vite之间存在明显的区别&#xff0c;这些区别主要体现在实现原理、优化策略、开发环境速度、构建速度、依赖关系分析和插件系统等方面。以下是关于Vue CLI和Vite区别的详细分析&#xff1a; 实现原理&#xff1a; Vue CLI&#xff1a…

【Spring Boot】Spring Boot简介

1、概述 Spring Boot是一个用于创建独立、生产级别的基于Spring的应用程序的开发框架。旨在简化Spring应用的初始搭建和开发过程。它通过自动配置和大量默认配置&#xff0c;使得开发者能够快速搭建一个独立的Spring应用&#xff0c;无需进行大量的手动配置。 2、主要特点 快…

【一篇搞懂】操作系统期末大题:进程同步与互斥 PV操作

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️题型一&#xff1a;利用信号量实现前驱关系题型二&#xff1a;利用信号量实现资源同步与互斥 一、前言&#x1f680;&#x1f680;&#x1f680; 本文简介&#xff1a;这是一篇基于b…

无人机远程控制:北斗短报文技术详解

无人机&#xff08;UAV&#xff09;技术的快速发展和应用&#xff0c;使得远程控制成为了一项关键技术。无人机远程控制涉及无线通信、数据处理等多个方面&#xff0c;其中北斗短报文技术以其独特的优势&#xff0c;在无人机远程控制领域发挥着重要作用。本文将详细解析无人机远…

2024-06-26 base SAS programming 学习笔记6(proc report)

proc report可以生成报表&#xff0c;基本格式&#xff1a; proc report data options; (options 可以是windows/WD表示将结果输出至单独的报表窗口&#xff0c;或者nowindows/nowd将结果输出至HTML结果窗口) column variables ;(筛选待输出的变量&#xff0c;变量名与变量名之…

09_计算机网络模型

目录 OSI/RM七层模型 OSI/RM七层模型 各层介绍及硬件设备 传输介质 TCP/IP协议簇 网络层协议 传输层协议 应用层协议 完整URL的组成 IP地址表示与计算 分类地址格式 子网划分和超网聚合 无分类编址 特殊含义的IP地址 IPv6协议 过渡技术 OSI/RM七层模型 OSI/RM七…

区间动态规划——最长回文子序列长度(C++)

把夜熬成粥&#xff0c;然后喝了它。 ——2024年7月1日 书接上回&#xff1a;区间动态规划——最长回文子串&#xff08;C&#xff09;-CSDN博客&#xff0c;大家有想到解决办法吗&#xff1f; 题目描述 给定一个字符串s&#xff08;s仅由数字和英文大小写字母组成&#xff0…

微积分-导数3(微分法则)

常见函数的导数 常量函数的导数 d d x ( c ) 0 \frac{d}{dx}(c) 0 dxd​(c)0 常量函数的图像是一条水平线 y c y c yc&#xff0c;它的斜率为0&#xff0c;所以我们必须有 f ′ ( x ) 0 f(x) 0 f′(x)0。从导数的定义来看&#xff0c;证明也很简单&#xff1a; f ′ …

在node.js环境中使用web服务器http-server运行html静态文件

http-server http-server是一个超轻量级web服务器&#xff0c;它可以将任何一个文件夹当作服务器的目录供自己使用。 当我们想要在服务器运行一些代码&#xff0c;但是又不会配置服务器的时候&#xff0c;就可以使用http-server就可以搞定了。 使用方法 因为http-server需要…

Linux Vim 进阶教程

Linux Vim 进阶教程 1. 简介 Vim&#xff08;Vi IMproved&#xff09;是一款功能强大的文本编辑器&#xff0c;广泛应用于Linux和Unix系统中。本教程将深入探讨Vim的高级功能和技巧&#xff0c;帮助您提升编辑效率和使用体验。 2. Vim 配置和插件管理 2.1 配置文件 .vimrc …

QT拖放事件之三:自定义拖放操作-利用QDrag来拖动完成数据的传输

1、运行效果 1)Qt::MoveAction 2)Qt::CopyAction 2、源码 #include "Widget.h" #include "ui_Widget.h" #include "common.h"

二级建造师(建筑工程专业)考试题库,高效备考!!!

16.在施工合同履行期间发生的变更事项中&#xff0c;属于工程变更的是&#xff08;&#xff09;。 A.质量要求变更 B.分包单位变更 C.合同价款变更 D.相关法规变更 答案&#xff1a;A 解析&#xff1a;工程变更一般是指在工程施工过程中&#xff0c;根据合同约定对施工的…

练习 String翻转 注册处理 字符串统计

p493 将字符串中指定部分进行翻转 package chapter;public class reverse {public static void main(String[] args) {String str "abcdef";str reverseMethod(str,0,3);System.out.println(str);}public static String reverseMethod(String str, int start, in…

恭贺甘露海首届道教南宗养生论坛暨天台山第十届道医大会圆满成功

6月13日&#xff0c;首届中国道教南宗养生论坛暨天台山第十届道医学术交流大会在浙江新昌重阳宫千人会场隆重开幕。 本次大会主办单位&#xff1a;天台山桐柏宫 中国民间中医医药研究开发协会道医学分会&#xff0c; 承办单位&#xff1a;新昌县重阳宫 &#xff0c;协办单位&…

网络基础:静态路由

静态路由是一种由网络管理员手动配置的路由方式&#xff0c;用于在网络设备&#xff08;如路由器或交换机&#xff09;之间传递数据包。与动态路由不同&#xff0c;静态路由不会根据网络状态的变化自动调整。 不同厂商的网络设备在静态路由的配置上有些许差异&#xff1b;下面…

什么是以太坊合约ABI(Application Binary Interface)

文章目录 什么是以太坊合约ABI一、背景二、ABI&#xff08;Application Binary Interface&#xff09;三、怎么生成ABIsolc命令 四、abi内容FunctionEvent函数选择器 五、参考 什么是以太坊合约ABI 一、背景 以太坊的智能合约程序&#xff0c;是在以太坊虚拟机&#xff08;Et…

网络构建关键技术_2.IPv4与IPv6融合组网技术

互联网数字分配机构&#xff08;IANA&#xff09;在2016年已向国际互联网工程任务组&#xff08;IETF&#xff09;提出建议&#xff0c;要求新制定的国际互联网标准只支持IPv6&#xff0c;不再兼容IPv4。目前&#xff0c;IPv6已经成为唯一公认的下一代互联网商用解决方案&#…