Hadoop 安装教程——单节点模式和分布式模式配置
文章目录
- 一、预备知识
- 1.1 Hadoop 发行版本
- 1.2 部署方式
- 二、预备条件
- 2.1 环境准备
- 2.2 创建新用户(可选)
- 2.3 配置 SSH 无密码登录
- 2.4 下载 Hadoop
- 2.5 编辑 hadoop-env.sh 脚本
- 2.6 编辑 dfs 和 yarn 脚本
- 三、单节点模式部署
- 3.1 官方使用案例
- 3.2 查看运行结果
- 四、伪分布模式部署
- 4.1 修改配置文件
- 4.2 格式化 Hadoop(首次)
- 4.3 启动 Hadoop
- 4.4 检查 Hadoop 状态
- 4.5 停止 Hadoop
- 五、常见问题
- 5.1 启动 start-dfs.sh 脚本报错
- 5.2 启动脚本时拒绝访问
- 参考资料
一、预备知识
1.1 Hadoop 发行版本
Hadoop 的发行版本有:
- Apache Hadoop:官方版本,由 Apache 软件基金会维护。
- Hortonworks Data Platform (HDP):基于 Apache Hadoop 的企业级发行版,提供了额外的工具和组件(如 Hive、HBase、Spark 等),适合企业用户。
- Cloudera Data Platform (CDP):Cloudera 的企业级解决方案,整合了 Hortonworks 和 Cloudera 的产品,提供更全面的功能和支持。
其中,Apache Hadoop 最适合新手入门学习。
1.2 部署方式
部署方式主要有以下三种:
-
单节点模式:所有 Hadoop 组件运行在同一台机器上。这比较适合适合开发和测试。
-
伪分布模式:在单台机器上模拟分布式环境,Hadoop 各组件在不同的进程中运行。这比较适合适合小规模测试和开发。
-
完全分布式模式:在多台机器上部署 Hadoop 集群,每个节点上运行不同的 Hadoop 组件。这适合生产环境,要求对集群进行详细配置。
二、预备条件
2.1 环境准备
-
安装 JDK。在 Hadoop Java Versions - Hadoop - Apache Software Foundation 查看Hadhoop 推荐的 Java 版本,最佳版本为 JDK 8 。
-
配置 SSH 免密登录。如果要使用可选的启动和停止脚本,则必须安装 ssh 并且运行 sshd 才 能使用管理远程 Hadoop 守护进程的 Hadoop 脚本。此外,建议还安装 pdsh 以更好地管理ssh资源。
$ sudo apt-get install ssh $ sudo apt-get install pdsh注意,pdsh 的远程命令类型为 rsh, 建议修改成 ssh。
2.2 创建新用户(可选)
创建一个新用户,用户名和密码设置为 hadoop
$ sudo useradd -m hadoop -s /bin/bash
$ sudo passwd hadoop
为了避免权限造成的问题,为 hadoop 用户增加管理员权限。
$ sudo adduser hadoop sudo
2.3 配置 SSH 无密码登录
Hadoop 在启动时需要通过 SSH 连接到各个节点(包括本地主机)。因此,我们需要配置无密码登录。
简单地介绍已下 SSH 登录原理:
- 密钥对生成:用户在本地生成一对密钥:一个私钥和一个公钥。私钥保留在本地,公钥可以共享给任何希望访问的服务器。
- 公钥复制:用户将公钥添加到目标服务器的
~/.ssh/authorized_keys文件中。 - 身份验证过程:当用户尝试通过 SSH 连接到服务器时,服务器会发送一条随机消息给用户。用户使用自己的私钥对该消息进行加密,然后将其返回给服务器。服务器使用存储在
authorized_keys文件中的相应公钥来解密收到的消息。如果解密成功且消息匹配,身份验证通过,用户被允许访问。
(1) 确保 SSH 服务正在运行
首先,确保 SSH 服务在您的 Ubuntu 系统上运行。
# 检查 SSH 服务的状态
$ sudo systemctl status ssh# 如果服务未运行, 启动 SSH 服务
$ sudo systemctl start ssh
(2) 生成 SSH 密钥对
使用 ssh-keygen 在 ~/.ssh 目录下生成 SSH 密钥对。
# 输入密码 hadoop 才能登录。因此,我们需要实现无密登录
ssh localhost# 若没有该目录,执行一次 ssh localhost 后会自动生成
$ cd ~/.ssh/ # 生成密钥对
$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hadoop/.ssh/id_rsa
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:HGuMfZmVK09WBr0fPJ3Kj5xYnUuChwl08TlaSq5HN0k hadoop@ubuntu
The key's randomart image is:
+---[RSA 2048]----+
| .o. |
| . ..oo |
| o ..oE+.o|
| = +o+=++=.|
| . S *=O+o.+|
| . .oO.*.+.|
| . .* * .|
| .. + o |
| |
+----[SHA256]-----+
其中,id_rsa 为 私钥, id_rsa.pub 为公钥。
(3) 将公钥添加到目标服务器的authorized_keys
使用 ssh-copy-id 命令可以方便地将公钥复制到目标主机的 authorized_keys 文件中
# 方式一
$ ssh-copy-id -i ~/.ssh/id_rsa.pub localhost# 方式二
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
authorized_keys 是一个文本文件,位于用户的 ~/.ssh/ 目录下。它用于存储被授权可以无密码访问该用户帐户的 SSH 公钥。将公钥添加到 authorized_keys 文件中,以允许无密码访问。
确保 ~/.ssh/authorized_keys 的权限设置正确:
chmod 0600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
(4) 测试 SSH 连接
在终端中尝试通过 SSH 连接到 localhost 和主机名:
$ ssh ubuntu
The authenticity of host 'ubuntu (127.0.1.1)' can't be established.
ECDSA key fingerprint is SHA256:Joilwgpgx1Mc2K3XnL1iszZ+Y/EK+GltbMG6B28luBY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ubuntu' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.15.0-107-generic x86_64)* Documentation: https://help.ubuntu.com* Management: https://landscape.canonical.com* Support: https://ubuntu.com/advantage240 updates can be applied immediately.
123 of these updates are standard security updates.
To see these additional updates run: apt list --upgradableYour Hardware Enablement Stack (HWE) is supported until April 2025.The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
其中, ubuntu 是为特定计算机设置的主机名,用于标识这台机器。
2.4 下载 Hadoop
在 Apache Download Mirrors 下载合适的 Hadoop 版本。如果官网下载太慢,可以考虑 hadoop/common (huaweicloud.com) 网站。
执行以下命令,下载 Hadoop 安装包。
# 下载安装包
$ wget --no-check-certificate https://repo.huaweicloud.com/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz# 解压安装包到指定目录
$ sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/# 将文件夹名改为hadoop
$ cd /usr/local
$ sudo mv ./hadoop-3.3.6/ ./hadoop # 修改文件权限
$ sudo chown -R hadoop ./hadoop
输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
$ cd /usr/local/hadoop
$ ./bin/hadoop version
2.5 编辑 hadoop-env.sh 脚本
编辑 hadoop-env.sh 脚本, 设置必要的一些参数。
# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_421
查看 Hadoop 脚本的使用文档
$/usr/local/hadoop-3.3.6/bin/hadoop
2.6 编辑 dfs 和 yarn 脚本
在 sbin/start-dfs.sh 和 sbin/stop-dfs.sh 脚本中,添加以下参数:
HDFS_DATANODE_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
在 sbin/start-yarn.sh 和 sbin/stop-yarn.sh 脚本中,添加以下参数:
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
三、单节点模式部署
默认情况下,Hadoop配置为以非分布式模式运行,作为单个Java进程。这对于调试很有用。
3.1 官方使用案例
将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中
$ cd /usr/local/hadoop$ mkdir input$ cp etc/hadoop/*.xml input$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
3.2 查看运行结果
查看运行结果:
$ cat output/*
1 dfsadmin
1 dfs.replication
1 dfs.permissions
四、伪分布模式部署
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行。
在 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。
4.1 修改配置文件
etc/hadoop/core-site.xml:
<configuration><!-- 指定 Hadoop 文件系统的默认文件系统 URI --><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property><!-- 指定 Hadoop 运行时生成的临时文件的存储目录 --><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description></property>
</configuration>
etc/hadoop/hdfs-site.xml:
<configuration><!-- 指定了 HDFS NameNode 存储其元数据的目录 --><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/tmp/dfs/name</value></property><!-- 指定了 HDFS DataNode 存储实际数据块的目录 --><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/tmp/dfs/data</value></property><!-- 定义 HDFS 文件的默认副本数量 --><property><name>dfs.replication</name><value>1</value></property><!-- 定义 HDFS 是否启用权限检查 --><property><name>dfs.permissions</name><value>false</value></property><!-- 控制 Secondary NameNode(次要 NameNode)执行 HDFS 检查点(checkpoint)的周期 --><property><name>fs.checkpoint.period</name><value>3000</value></property>
</configuration>
etc/hadoop/mapred-site.xml:
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.application.classpath</name><value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value></property>
</configuration>
etc/hadoop/yarn-site.xml:
<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</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_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value></property>
</configuration>
4.2 格式化 Hadoop(首次)
在第一次启动的时候,格式化 HDFS(Hadoop 分布式文件系统)。
# 进入 Hadoop 安装目录
$ cd /usr/local/hadoop# 格式化 HDFS
$ bin/hdfs namenode -format
后面启动的时候,无需格式化。
4.3 启动 Hadoop
(1) 启动 HDFS
$ sbin/start-dfs.sh
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [ubuntu]
在成功启动后,我们还可以访问 Hadoop Web 界面 http://localhost:9870。

(2) 启动 YARN
启动 YARN。
$ sbin/start-yarn.sh
Starting resourcemanager
Starting nodemanagers
在成功启动后,我们还可以访问 YARN 界面 http://localhost:8088 。

4.4 检查 Hadoop 状态
使用以下命令检查 Hadoop 服务的状态:
# 查看运行 Java 进程
$ jps
5079 ResourceManager
4508 DataNode
4348 NameNode
4782 SecondaryNameNode
5615 Jps
5231 NodeManager
此命令将显示当前正在运行的 Java 进程。您应该能够看到如下进程:
4.5 停止 Hadoop
$ sbin/stop-dfs.sh
Stopping namenodes on [localhost]
Stopping datanodes
Stopping secondary namenodes [ubuntu]$ sbin/stop-yarn.sh
Stopping nodemanagers
Stopping resourcemanager
五、常见问题
5.1 启动 start-dfs.sh 脚本报错
问题描述:
$ sudo sbin/start-dfs.sh
Starting namenodes on [ubuntu]
pdsh@ubuntu: ubuntu: rcmd: socket: Permission denied
Starting datanodes
pdsh@ubuntu: localhost: rcmd: socket: Permission denied
Starting secondary namenodes [ubuntu]
pdsh@ubuntu: ubuntu: rcmd: socket: Permission denied
解决方案:
(1) 查看 SSH 配置
检查 /etc/ssh/sshd_config 配置文件,确保以下基本配置
#
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
如果有更改,记得重启 SSH 服务
$ sudo systemctl restart ssh
(2)pdsh 执行命令
pdsh(并行分布式 Shell)执行远程命令时的默认远程命令类型为 rsh 时, 会出现该问题。
# 检查 pdsh 的远程命令类型
$ pdsh -q -w localhost
更改为使用 ssh :
# 1. 临时设置
$ export PDSH_RCMD_TYPE=ssh# 2. 永久设置
$ echo 'export PDSH_RCMD_TYPE=ssh' >> ~/.bashrc
最后,重新加载 ~/.bashrc:
$ source ~/.bashrc
(3)不建议的方案
在尝试以上方案后,依旧无法启动,建议删除 pdsh。
apt-get remove pdsh
5.2 启动脚本时拒绝访问
报错信息:
$ sudo sbin/start-dfs.sh
Starting namenodes on [ubuntu]
ubuntu: root@ubuntu: Permission denied (publickey,password).
Starting datanodes
localhost: root@localhost: Permission denied (publickey,password).
Starting secondary namenodes [ubuntu]
ubuntu: root@ubuntu: Permission denied (publickey,password).
解决方案:
不要使用 sudo。事实上,在没有使用 sudo 的情况下依旧可以运行,我们可以考虑直接为用户增加管理员权限。
参考资料
Apache Hadoop 3.3.6 – Hadoop: Setting up a Single Node Cluster.
hadoop - HDFS_NAMENODE_USER, HDFS_DATANODE_USER & HDFS_SECONDARYNAMENODE_USER not defined - Stack Overflow
Hadoop安装教程——单机 / 伪分布式配置-阿里云开发者社区 (aliyun.com)
相关文章:
Hadoop 安装教程——单节点模式和分布式模式配置
文章目录 一、预备知识1.1 Hadoop 发行版本1.2 部署方式 二、预备条件2.1 环境准备2.2 创建新用户(可选)2.3 配置 SSH 无密码登录2.4 下载 Hadoop2.5 编辑 hadoop-env.sh 脚本2.6 编辑 dfs 和 yarn 脚本 三、单节点模式部署3.1 官方使用案例3.2 查看运行结果 四、伪分布模式部署…...
给c++小白的教程10:一维数组
好久不见!我又来更教程了。 升到初二,由于学业原因,更新速度减慢了,十分抱歉! 以后将恢复到一周一次的频率 作者只是个普通学生,做的教程多有不足,希望大家批评指正! 赫炎今天在一…...
【排序】3.希尔排序法
希尔排序(直接插入排序的优化) 1.分组思想 上图中gap为5,说明要分成5组。 这5组分别用了五种颜色的线条连接起来了。 第1组:9、4 第2组:1、8 第3组:2、6 第4组:5、3 第5组:7、5 2.缩…...
商品详情数据API接口概述(json数据格式返回参考)
商品详情数据API接口是指一种编程接口(API,Application Programming Interface),它允许开发者或系统以编程方式获取商品的详细信息。这些信息包括但不限于SKU的详细信息、商品图片、商品属性、价格、库存状态、用户评价等。当调用…...
Jmeter简介
基础介绍 Jmeter录制脚本的原始是配置一个HTTP代理,然后浏览器通过这个代理访问测试页面从而完成脚本录制。 一、下载安装 jmeter本身不需要安装,需要配置环境变量JDK,然后打开bin文件夹中的jmeter.vbs即可。建议jdk 1.7及以上版本。 基本祖…...
网页前端开发之HTML入门篇:标题标签 heading
标题标签 heading <h1>-<h6>是HTML的标题标签,其标签内容会呈现六个不同级别的字号, <h1>字号最大,<h6>字号最小。 示例 <html><body><h1>一级标题</h1><h2>二级标题</h2>&l…...
医院信息化与智能化系统(3)
医院信息化与智能化系统(3) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应的…...
数据结构(线性表)
1线性表的定义与操作 1.1线性表的定义 线性表是一种基础的数据结构,其主要特点是:数据元素之间存在一种线性关系(一对一)。线性表的每一个数据元素都有一个唯一的前驱和后继,除了第一个元素没有前驱,最后…...
ArcGIS Pro SDK (十八)栅格
ArcGIS Pro SDK (十八)栅格 环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0 栅格 1 在文件夹中打开栅格数据集 // 使用文件夹路径创建 FileSystemConnectionPath 对象。 FileSystemConnectionPath connectionPath = new FileSystemConnectionPath(new System...
c++ 对象作用域
在 C 中,对象的作用域(scope)指的是对象的生命周期以及对象在程序中可以访问的范围。作用域影响对象的创建、使用和销毁,主要有以下几种类型: 1. 局部作用域(Local Scope) 局部作用域的对象是…...
【无标题】海尔AI英语面试
1.自我介绍 Good morning. I am delighted to have this English interview. My name is fu guilin. I graduated from CDUT with a degree in Information engineering. During my university years, I have laid a solid foundation in my professional knowledge. I posses…...
软件设计模式------概述
一:简述 目的:为了可重用代码,代码更容易被他人理解,提高代码的可靠性。 定义:是一套被反复使用,多数人知晓,经过分类编目的,代码设计经验的总结。 (通俗来说…...
刷题/学习网站推荐
前言: 最近没怎么学习,荒芜生活,学不进去,太累了,就喜欢翻翻网站有没有好用的东西分享给大家,正好看到一些刷题的网站(其实也是学习的网站吧),相比学程序的很多都是力扣…...
OQE-OPTICAL AND QUANTUM ELECTRONICS
文章目录 一、征稿简介二、重要信息三、服务简述四、投稿须知五、联系咨询 一、征稿简介 二、重要信息 期刊官网:https://ais.cn/u/3eEJNv 三、服务简述 四、投稿须知 1.在线投稿:由艾思科蓝支持在线投稿,请将文章全文投稿至艾思科蓝投稿系…...
在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?
大家好,我是锋哥。今天分享关于【在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?】面试题?希望对大家有帮助; 在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处? 1000道 互联网大厂Java工程师 精选…...
Chromium html<textarea>c++接口定义
<textarea>:文本区域元素 <textarea> HTML 元素是一个多行纯文本编辑控件,适用于允许用户输入大量自由格式文本的场景。 例子: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> &l…...
OpenCV高级图形用户界面(13)选择图像中的一个矩形区域的函数selectROI()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 允许用户在给定的图像上选择一个感兴趣区域(ROI)。 该功能创建一个窗口,并允许用户使用鼠标来选择一个 ROI。…...
《计算机视觉》—— 基于dlib库的人检检测
文章目录 一、dlib库的安装1. 通过PyCharm的Settings安装2. 通过Anaconda安装(适用于Windows等操作系统)3. 通过命令行安装4.懒人安装 二、基于dlib库的人检测1.对图像进行人脸检测2.打开电脑摄像头,检测人脸 一、dlib库的安装 在PyCharm中&…...
分布式数据库安全可靠测评名录之平凯数据库(TiDB企业版)
作者: 数据源的TiDB学习之路 原文来源: https://tidb.net/blog/d052ee0b 2024 年 9 月 30 日,中国信息安全测评中心公布安全可靠测评结果公告(2024年第2号),其中包含 6 款集中式数据库和 11 款分布式数据…...
动态规划之打家劫舍
大纲 题目思路第一步:确定下标含义第二步:确定递推公式第二步:dp数组如何初始化第三步:确定遍历顺序第四步:举例推导dp数组 总结 最近有人询问我 LeetCode 「打家劫舍」系列问题(英文版叫 House Robber&…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...
CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?
在现代前端开发中,Utility-First (功能优先) CSS 框架已经成为主流。其中,Tailwind CSS 无疑是市场的领导者和标杆。然而,一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...
