当前位置: 首页 > news >正文

大数据处理从零开始————3.Hadoop伪分布式和分布式搭建

1.伪分布式搭建(不会用,了解就好不需要搭建)

        这里接上一节。

1.1 伪分布式集群概述

        伪分布式集群就是只有⼀个服务器节点的分布式集群。在这种模式中,我们也是只需要⼀台机器。 但与本地模式不同,伪分布式采⽤了分布式的思想,具有完整的分布式⽂件存储和分布式计算的特 点。在进⾏存储和计算时,将涉及到的相关守护进程都运⾏在同⼀台机器上,它们都是独⽴的 Java进程,因⽽称为“伪分布式集群”。 伪分布式集群模式,⽐本地模式多了代码调试功能,允许检查内存的使⽤、HDFS输⼊输出、以及 其他的守护进程交互情况。

1.2 关闭selinux

        把selinux关闭掉,这是Linux系统的⼀个安全机制,可以进⼊⽂件中将SELINUX设置为 disabled。

vim /etc/selinux/config

        把代码中SELINUX修改或添加为:

SELINUX=disabled

1.3 修改配置⽂件

cd /opt/module/hadoop/etc/hadoop/
ll   #查看目录文件

        下面这些文件都会有。

1.3.1 core-site.xml⽂件(记住修改下方主机名)

<configuration>  <!-- 设置namenode节点 -->  <!-- 注意: hadoop1.x时代默认端口是9000;hadoop2.x时代默认端口是8020;  hadoop3.x时代默认端口是9820 -->  <property>  <name>fs.defaultFS</name>  <value>hdfs://hadoop100:9820</value>  </property>  <!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->  <property>  <name>hadoop.tmp.dir</name>  <value>/opt/module/hadoop/tmp</value>  </property>  
</configuration>

1.3.2 hdfs-site.xml⽂件(记住修改下方主机名)

<configuration><property><name>dfs.replication</name><value>1</value></property><!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局 --><property><name>dfs.namenode.secondary.http-address</name><value>hadoop100:9868</value></property><!-- namenode守护进程的http地址:主机名和端口号。参考守护进程布局 --><property><name>dfs.namenode.http-address</name><value>hadoop100:9870</value></property>
</configuration>

1.3.3 hadoop-env.sh⽂件(记住修改下方主机名)

export JAVA_HOME=/opt/module/jdk# Hadoop3中,需要添加如下配置,设置启动集群⻆⾊的⽤户是哪个。
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root

1.4 格式化集群

        要注意,如果我们在core-site.xml中配置过hadoop.tmp.dir路径,在集群格式化时要保证这个路 径不存在!如果之前存在过数据,要先将其删除,再进⾏格式化!

hdfs namenode -format

        执⾏效果如下图所示:(注意对比下方点)

1.5 启动集群

 start-dfs.sh

        执⾏该命令后,⼀般会有如下提示:(这个一个不能少)!!!

Starting namenodes on [MyBigData]
Starting datanodes
Starting secondary namenodes [MyBigData]

1.6 查看进程

jps

执⾏该命令后,⼀般会有如下提示:(这个一个不能少)!!!

11090 Jps
10595 NameNode
10938 SecondaryNameNode
10763 DataNode

1.7 启动WebUI界⾯

        Hadoop伪集群模式给我们提供了⼀个WebUI界⾯,我们可以在浏览器中输⼊虚拟机的IP地址。如 果我们做过主机名映射,也可以直接使⽤主机名,⽐如http://192.168.10.100:9870。

1.8 演示案例-统计单词个数

1.8.1 准备数据

        接下来我们准备⼀些数据,在hadoop⽂件夹下创建⼀个myinput⽬录并进⼊。

mkdir myinput && cd myinput

        然后在该⽬录下创建两个file⽂件,并在其中输⼊⼀些内容:

echo "hello world hadoop linux hadoop" >> file1
echo "hadoop linux hadoop linux hello" >> file1
echo "hadoop linux mysql linux hadop" >> file1
echo "hadoop linux hadoop linux hello" >> file1
echo "linux hadoop good programmer" >> file2
echo "good programmer yyg good" >> file2

1.8.2 上传集群

        接下来我们需要将数据⽂件file1和file2上传到集群,以后我们再进⾏任务处理的数据就是HDFS数 据,不是Linux本地存储的了。

hdfs dfs -put ./myinput/ /
# 检查是否已经上传成功
hdfs dfs -ls -R /

        执⾏结果⼀般如下所示:

1.8.3 执⾏任务

        我们切换到⾃⼰的hadoop⽬录下,在该⽬录中执⾏如下命令:

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount ./myinput ./myoutput

        在运⾏该命令时,也可能会出现以下问题:

        以上问题则表明我们的Hadoop服务器虽然启动成功,但缺少了⼀个/user/root/input⽂件夹,我 们可以⼿动创建出来。

        解决过程如下:

# 确认该路径是否存在hdfs dfs -ls /user/root/input

        如果该路径确实不存在,则创建之:

# 创建input⽂件夹
hdfs dfs -mkdir -p /user/root/input
# 将file1和file2中的⽂件put到input中
[root@hd01 hadoop]# hdfs dfs -put ./input/file* /user/root/input

        接着我们重新执⾏如下命令即可:

# hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount ./input ./output

2.完全分布式搭建(需要做!!!)

2.1 完全分布式概述

        在真实的企业环境中,服务器集群会使⽤到多台机器共同配合,来构建⼀个完整的分布式⽂件系 统。⽽在这样的分布式⽂件系统中,HDFS相关的守护进程也会分布在不同的机器上,例如:

        ● NameNode守护进程,尽可能单独部署在⼀台硬件性能较好的机器中;

        ● 其他每台机器上都会部署⼀个DataNode守护进程,⼀般的硬件环境即可;

        ● SecondaryNameNode的守护进程最好不要和NameNode在同⼀台机器上。

2.2 集群规划部署

2.3 配置集群核⼼⽂件

2.3.1 core-site.xml⽂件

[root@hd01 ~]#  cd $HADOOP_HOME/etc/hadoop
[root@hd01 hadoop]# vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- 指定NameNode的地址 --><property><name>fs.defaultFS</name><value>hdfs://hd01:8020</value></property><!-- 指定hadoop数据的存储目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop/tmp</value></property><!-- 配置HDFS网页登录使用的静态用户为root --><property><name>hadoop.http.staticuser.user</name><value>root</value></property>
</configuration>

2.3.2 hdfs-site.xml⽂件

        打开该⽂件:

[root@hd01 hadoop]# vim hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>  
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
<configuration>  <!-- nn web端访问地址 -->  <property>  <name>dfs.namenode.http-address</name>  <value>hd01:9870</value>  </property>  <!-- 2nn web端访问地址,注意这的机器名称是hd03!!!-->  <property>  <name>dfs.namenode.secondary.http-address</name>  <value>hd03:9868</value>  </property>  
</configuration>  

2.3.3 yarn-site.xml⽂件

        打开yarn-site.xml:

[root@hd01 hadoop]# vim yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>  
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
<configuration>  <!-- 指定MR⾛shuffle -->  <property>  <name>yarn.nodemanager.aux-services</name>  <value>mapreduce_shuffle</value>  </property>  <!-- 指定ResourceManager的地址, 注意这⾥的机器名称是hd02!!!-->  <property>  <name>yarn.resourcemanager.hostname</name>  <value>hd02</value>  </property>  <!-- 环境变量的继承 -->  <property>  <name>yarn.nodemanager.env-whitelist</name>  <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>  </property>  <!-- 不验证虚拟内存⼤⼩ -->  <property>  <name>yarn.nodemanager.vmem-check-enabled</name>  <value>false</value>  <description>Whether virtual memory limits will be enforced for containers</description>  </property>  <property>  <name>yarn.nodemanager.vmem-pmem-ratio</name>  <value>4</value>  <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>  </property>  
</configuration>

2.3.4 mapred-site.xml⽂件

[root@hd01 hadoop]# vim mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- 指定MapReduce程序运行在Yarn上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>

2.3.5 hadoop-env.sh⽂件

[root@hd01 hadoop]# vim hadoop-env.sh

增加如下内容:!!!!这里是增加

export JAVA_HOME=/opt/module/jdk# Hadoop3中,需要添加如下配置,设置启动集群⻆⾊的⽤户是谁
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

2.3.6 works⽂件

        打开works⽂件:

root@hd01 hadoop]# vim /opt/module/hadoop/etc/hadoop/workers
hd01
hd02
hd03

        注意: 该⽂件中添加的内容,其结尾不允许有空格,⽂件中不允许有空⾏!

2.3.7 分发配置⽂件

        在配置好了以上核⼼⽂件之后,我们要在集群上分发配置好的这些Hadoop配置⽂件。

[root@hd01 hadoop]# xsync /opt/module/hadoop/etc/hadoop/

2.4 格式化集群

        如果集群是第⼀次启动,需要在hd01节点上格式化NameNode。

[root@hd01 hadoop]# hdfs namenode -format

2.5 集群启动⽅式

        在这⾥启动的⽅式有两种,⼀种是⼀个节点⼀个节点的启动,⼀种是 编写⼀个启动脚本

2.5.1 单节点启动/关闭⽅式

1 启动HDFS

[root@hd01 hadoop]# /opt/module/hadoop/sbin/start-dfs.sh

2. 启动YARN

        我们可以在在配置了ResourceManager的节点(hd02)上启动yarn:

[root@hd02 hadoop]# /opt/module/hadoop/sbin/start-yarn.sh

        启动节点后,我们就可以在Web端查看HDFS的NameNode了。我们在浏览器中输⼊: http://192.168.10.104:9870。然后我们查看Datanodes选项下,看看启动的个数是否为3,不为 3则说明环境配置有问题。

        我 们 也 可 以 在 Web 端 查 看 YARN 的 ResourceManager , 在 浏 览 器 中 输 ⼊ : http://192.168.10.105:8088。查看⾸⻚Active Nodes是否为3,不为3则说明环境配置有问题。

3. 关闭单节点

        我们可以将各个模块分开启动,也可以分开停⽌,前提是⼤家已经配置了ssh。

# 停⽌HDFS
[root@hd01 ~]# stop-dfs.sh
#停⽌YARN
start-yarn.sh/stop-yarn.sh

        或者我们将各个服务组件逐⼀启动/停⽌。

# 分别启动/停⽌HDFS组件
[root@hd01 ~]# hdfs --daemon start/stop namenode/datanode/secondarynamenode
# 启动/停⽌YARN
[root@hd01 ~]# yarn --daemon start/stop resourcemanager/nodemanager

2.5.2 脚本启动⽅式(重点)

        如果我们⼀个节点⼀个节点的启动,会很麻烦,后续进⾏关闭时更麻烦,所以⽐较好的启动与关闭 ⽅式是编写⼀个启动和关闭脚本。

1.编写脚本

        我们先编写⼀个Hadoop集群的启停脚本,包含HDFS、Yarn、Historyserver,脚本⽂件名为 myhadoop.sh。

[root@hd01 ~]# cd /root
[root@hd01 ~]# vim myhadoop.sh
#!/bin/bash  if [ $# -lt 1 ]; then  echo "No Args Input..."  exit  
fi  case $1 in  "start")  echo " =================== 启动 hadoop集群 ==================="  echo " --------------- 启动 hdfs ---------------"  ssh hd01 "/opt/module/hadoop/sbin/start-dfs.sh"  echo " --------------- 启动 yarn ---------------"  ssh hd02 "/opt/module/hadoop/sbin/start-yarn.sh"  ;;  "stop")  echo " =================== 关闭 hadoop集群 ==================="  echo " --------------- 关闭 yarn ---------------"  ssh hd02 "/opt/module/hadoop/sbin/stop-yarn.sh"  echo " --------------- 关闭 hdfs ---------------"  ssh hd01 "/opt/module/hadoop/sbin/stop-dfs.sh"  ;;  *)  echo "Input Args Error..."  ;;  
esac

2. 添加执⾏权限

chmod +x myhadoop.sh

3 关闭/开启所有hadoop进程

# 停⽌集群
[root@hd01 ~]# ./myhadoop.sh stop
# 开启集群
[root@hd01 ~]# ./myhadoop.sh start

2.6 编写查看集群进程的脚本

        我们通常是通过jps命令来查看hadoop的进程。

# 查看单个进程
[root@hd01 ~]#  jps

 1. 编写脚本

        这种⽅式只能查看单个节点上的进程,并不是很⽅便,我们可以编写⼀个⽤来查看集群进程的脚 本。我们先创建⼀个jpsall⽂件:

[root@hd01 ~]# vim jpsall
#!/bin/bash  for host in hd01 hd02 hd03; do  echo "=============== $host ==============="  ssh "$host" jps  
done

2. 添加执⾏权限

        保存后退出,然后赋予该脚本执⾏权限。

[root@hd01 bin]# chmod +x jpsall

3. 查看进程

[root@hd01 bin]# ./jpsall

2.7 分发脚本

        最后,我们把上⾯编写的脚本进⾏分发,以保证⾃定义的脚本可以在三台机器上都能使⽤。

[root@hd01 ~]# xsync /root/myhadoop.sh
[root@hd01 ~]# xsync /root/jpsall

2.8 集群测试

2.8.1 上传⽂件到集群

1.上传⼩⽂件

[root@hd01 ~]# hadoop fs -mkdir /input
[root@hd01 ~]# hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input

2. 上传⼤文件

[root@hd01 ~]# hadoop fs -put /opt/software/jdk-8u421-linux-x64.tar.gz /

2.8.2 查看结果

        上传⽂件后,我们可以来查看⽂件存放在什么位置。查看HDFS⽂件的存储路径,标红部分每台电 脑可能不同,需要根据实际情况修改。

[root@hd01 ~]# cd /opt/module/hadoop/tmp/dfs/data/current/BP-35375740-192.168.10.104-1726820702869

        这个文件:BP-35375740-192.168.10.104-1726820702869  每个机器不一样需要自己转到相应这个位置,进入后接着下一步。进入下放完整路径。

[root@hd01 subdir0]# pwd
/opt/module/hadoop/tmp/dfs/data/current/BP-35375740-192.168.10.104-1726820702869/current/finalized/subdir0/subdir0

2.8.3 拼接⽂件

        我们可以利⽤hadoop中的命令,将多个⽂件拼接在⼀起,⽐如:

# ⽐如现在有如下多个⽂件:
总用量 144424
-rw-r--r--. 1 root root        49 9月  20 17:13 blk_1073741825
-rw-r--r--. 1 root root        11 9月  20 17:13 blk_1073741825_1001.meta
-rw-r--r--. 1 root root 134217728 9月  20 17:15 blk_1073741826
-rw-r--r--. 1 root root   1048583 9月  20 17:15 blk_1073741826_1002.meta
-rw-r--r--. 1 root root  12512099 9月  20 17:15 blk_1073741827
-rw-r--r--. 1 root root     97759 9月  20 17:15 blk_1073741827_1003.meta
# 我们可以将其拼接在⼀起
[root@hd01 subdir0]# cat blk_1073741826>>tmp.tar.gz
[root@hd01 subdir0]# cat blk_1073741827>>tmp.tar.gz
[root@hd01 subdir0]# tar -zxvf tmp.tar.gz

2.8.4 下载⽂件

[root@hd01 ~]# hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./

2.8.5 执⾏wordcount程序

[root@hd01 ~]# cd /opt/module/hadoop
[root@hd01 hadoop]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /input /output
[root@hd01 hadoop]# cat wcoutput/part-r-00000

2.9 统计单词格式

2.9.1 准备数据

[root@hd01 hadoop]# cd /root
[root@hd01 ~]# mkdir input && cd input
[root@hd01 input]#  echo "hello world hadoop linux hadoop" >> file1
[root@hd01 input]# echo "hadoop linux hadoop linux hello" >> file1
[root@hd01 input]#  echo "hadoop linux mysql linux hadop" >> file1
[root@hd01 input]#  echo "hadoop linux hadoop linux hello" >> file1
[root@hd01 input]# echo "linux hadoop programmer" >> file2
[root@hd01 input]#  echo "programmer jiayadong good" >> file2

2.9.2 上传到集群

# 将数据上传到HDFS
[root@hd01 input]# hdfs dfs -put ~/input/ /
# 检查是否已经上传成功
[root@hd01 input]# hdfs dfs -ls -R /
drwxr-xr-x - root supergroup 0 2022-01-28 13:11 /input
-rw-r--r-- 1 root supergroup 127 2022-01-28 13:11 /input/file1
-rw-r--r-- 1 root supergroup 59 2022-01-28 13:11 /input/file2

2.9.3 执⾏任务

 hdfs dfs -rm -r /outputhadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /input /output

相关文章:

大数据处理从零开始————3.Hadoop伪分布式和分布式搭建

1.伪分布式搭建&#xff08;不会用&#xff0c;了解就好不需要搭建&#xff09; 这里接上一节。 1.1 伪分布式集群概述 伪分布式集群就是只有⼀个服务器节点的分布式集群。在这种模式中&#xff0c;我们也是只需要⼀台机器。 但与本地模式不同&#xff0c;伪分布式采⽤了分布式…...

跟着问题学12——GRU详解

1 GRU 1. 什么是GRU GRU&#xff08;Gate Recurrent Unit&#xff09;是循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;的一种。和LSTM&#xff08;Long-Short Term Memory&#xff09;一样&#xff0c;也是为了解决长期记忆 和反向传播中的梯度等问题…...

内核是如何接收网络包的

1、数据如何从网卡到网络协议栈 1.1内核收包的过程 1、数据帧从外部网络到达网卡 2、网卡把数据帧从自己的缓存DMA(拷贝到)和内核共有的RingBuffer上 3、网卡发出硬中断通知CPU 4、CPU响应硬中断&#xff0c;简单处理后发出软中断 5、k’softirqd线程处理软中断&#xff0c;调…...

计算机毕业设计之:基于微信小程序的电费缴费系统(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

【leetcode】环形链表、最长公共前缀

题目&#xff1a;环形链表 解法一&#xff1a;哈希表 创建一个哈希表&#xff0c;遍历链表先判断哈希表中是否含有要放入哈希表中的节点&#xff0c;如果该节点已在哈希表中出现那么说明该链表是环形的&#xff1b;如果链表节点出现nullptr那么就退出循环&#xff0c;该链表是…...

C#开发记录如何建立虚拟串口,进行串口通信,以及通信模板

记录时间;2024年4月 记录如何开启虚拟串口以及进行基础串口通信。 建立虚拟串口 使用的软件是vspd&#xff0c;建立虚拟串口之后就可以将他们当成实际物理连接的两个串口进行通信。 之后使用我们之前给出的通信模板&#xff0c;建立一个稍微规矩一点的界面。 界面建立 其中…...

电源设计的艺术:从底层逻辑到工程实践

在电子工程的世界里&#xff0c;电源设计是核心中的核心。它不仅是电子设备的能量源泉&#xff0c;更是整个系统稳定运行的基石。随着科技的不断进步&#xff0c;电源设计的要求也越来越高&#xff0c;从效率、稳定性到体积、成本&#xff0c;每一个维度都是工程师们不断追求的…...

软媒市场新探索:软文媒体自助发布,开启自助发稿新篇章

在繁华喧嚣的软媒市场中,每一个声音都在竭力呼喊,每一个品牌都在奋力展现。而软文,作为一种温柔而坚韧的营销力量,正逐渐崭露头角。特别是软文媒体自助发布平台的出现,更是为企业提供了一个全新的、高效的自助发稿渠道。 软媒市场自助发布平台,正如其名,是一个让企业能够自主发…...

【Kubernetes】常见面试题汇总(二十七)

目录 77.假设公司希望在不同的云基础架构上运行各种工作负载&#xff0c;从裸机到公共云。公司将如何在不同界面的存在下实现这一目标&#xff1f; 78.什么是 Google 容器引擎&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题。 题目 69-1…...

基于单片机巡迹避障智能小车系统

文章目录 前言资料获取设计介绍设计程序具体实现截图设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…...

Python163邮箱发送:提升发送效率的技巧?

python163邮箱发送邮件教程&#xff1f;python怎么使用163邮箱&#xff1f; Python163邮箱发送作为一种自动化邮件发送方式&#xff0c;越来越受到开发者和企业的青睐。AokSend将探讨如何通过多种技巧提升Python163邮箱发送的效率&#xff0c;从而更好地满足用户需求。 Pytho…...

springboot中的异步任务

在springboot项目中可以通过EnableAsyncAsync的方式简化异步操作&#xff0c;下文使用springboot:3.2.1 源码分析 若一个bean中的公共方法上标注了Async&#xff0c;在系统启动时&#xff0c;会给这个类创建一个代理对象&#xff0c;并将该代理对象作为bean注册到spring容器中 …...

Linux学习笔记8 理解Ubuntu网络管理,做自己网络的主人

本文讲解了Ubuntu下网络由什么管理&#xff0c;介绍了临时ip和路由的设置方法&#xff0c;介绍了静态持久化网络配置的方法以及各网络管理软件之间的关系。 来看看Ubuntu网络管理。 序言 原本学习ubuntu网络管理就是为了检查nginx安装过程中使用wget获取压缩包为什么解析不出…...

理解线程的三大特性:原子性、可见性和有序性

在并发编程中&#xff0c;保护线程安全是一个重要课题。要实现线程安全&#xff0c;我们必须理解并掌握三个核心概念&#xff1a;原子性、可见性和有序性。下面将详细介绍这三个特性及其解决方案。 一、原子性 原子性是指一个操作要么全部完成&#xff0c;要么完全不执行。在多…...

英特尔®以太网网络适配器E810-CQDA1 / E810-CQDA2 网卡 规格书 e810 网卡 规格书 Intel100G E810 网卡 白皮书

英特尔以太网800系列网络适配器 英特尔以太网网络适配器E810-CQDA1 / CQDA2 在10到100Gbps的以太网速度下实现高效的工作负载优化性能 关键特性 •单、双端口QSFP28 •应用设备队列(ADQ) •PCI Express (PCIe) 4.0 x16 •动态设备个性化(DDP) •以太网端口配置工具(EPC…...

好用的idea方法分隔符插件

好用的idea方法分隔符插件...

通过 Xshell 无法连接到 Ubuntu

无法通过 Xshell 连接到 Ubuntu 服务器&#xff0c;通常与 SSH 服务、网络连接、主机防火墙设置问题有关。以下是排查并解决这个问题的步骤&#xff1a; 1. 确保 SSH 服务正在运行 在 Ubuntu 上&#xff0c;SSH 服务必须启动才能连接。如果你有虚拟机或物理机的访问权限&…...

Java面试篇基础部分-Synchronized关键字详解

Synchronized关键字用于对Java对象、方法、代码块等提供线程安全操作。Synchronized属于独占式的悲观锁机制,同时也是可重入锁。我们在使用Synchronized关键字的时候,可以保证同一时刻只有一个线程对该对象进行访问;也就是说它在同一个JVM中是线程安全的。   Java中的每个…...

数据结构之线性表——LeetCode:67. 二进制求和,27. 移除元素,26. 删除有序数组中的重复项

67. 二进制求和 题目描述 67. 二进制求和 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 运行代码&#xff08;javaC) class Solution {public String addBinary(String a, String b) {StringBuilder ansnew StringBuilder();int ca0;for(i…...

SQL_HAVING小例子

例一 求众数的sql语句1&#xff1a; select income,count(*) as cnt from graduates group by income having count(*) > all(select count(*) from graduates group by income);这段SQL语句的作用是从一个名为graduates的表中找出income&#xff08;收入&#xff09;字段…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

Easy Excel

Easy Excel 一、依赖引入二、基本使用1. 定义实体类&#xff08;导入/导出共用&#xff09;2. 写 Excel3. 读 Excel 三、常用注解说明&#xff08;完整列表&#xff09;四、进阶&#xff1a;自定义转换器&#xff08;Converter&#xff09; 其它自定义转换器没生效 Easy Excel在…...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...

【Linux】使用1Panel 面板让服务器定时自动执行任务

服务器就是一台24小时开机的主机&#xff0c;相比自己家中不定时开关机的主机更适合完成定时任务&#xff0c;例如下载资源、备份上传&#xff0c;或者登录某个网站执行一些操作&#xff0c;只需要编写 脚本&#xff0c;然后让服务器定时来执行这个脚本就可以。 有很多方法实现…...

【NLP】 38. Agent

什么是 Agent&#xff1f; 一个 Agent 就是能够 理解、思考&#xff0c;并且进行世界交互 的模型系统&#xff0c;并不是纯粹的 prompt 返回器。 它可以&#xff1a; 读取外部数据&#xff08;文件/API&#xff09;使用记忆进行上下文维持用类Chain-of-Thought (CoT)方式进行…...