【Hadoop 01】简介
目录
1 Hadoop 简介
2 下载并配置Hadoop
2.1 修改/etc/profile
2.2 修改hadoop-env.sh
2.3 修改core-site.xml
2.4 修改hdfs-site.xml
2.5 修改mapred-site.xml
2.6 修改yarn-site.xml
2.7 修改workers
2.8 修改start-dfs.sh、stop-dfs.sh
2.9 修改start-yarn.sh、stop-yarn.sh
2.10 启动集群
3 HDFS
3.1 HDFS常见shell操作
3.2 HDFS实操案例
3.3 HDFS体系结构
3.4 DataNode总结
3.5 NameNode总结
3.6 HDFS的回收站
3.7 HDFS的安全模式
3.8 案例:定时上传文件到HDFS
3.9 HDFS的高可用(HA)
3.10 HDFS的高扩展(Federation)
4 MapReduce
4.1 Map阶段
4.2 Redeuce阶段
4.3 MapRedeuce任务日志查看
4.4 Shuffle原理
4.5 Shuffle原理
4.6 InputSplit原理
4.7 RecodReader原理
1 Hadoop 简介
Hadoop适合海量数据分布式存储和分布式计算
Hadoop 3.x的细节优化:
- Java改为支持8及以上
- HDFS支持纠删码
- HDFS支持多NameNode
- MR任务级本地优化
- 多重服务默认端口变更

Hadoop主要包含三大组件:HDFS+MapReduce+YARN
- HDFS负责海量数据的
分布式存储 - MapReduce是一个计算模型,负责海量数据的
分布式计算 - YARN主要负责
集群资源的管理和调度
2 下载并配置Hadoop
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

把 公钥 的内容 附加到 authorized_keys 里:

修改hostname
su root
hostname bigdata01
第一次设置密码

更换主机名之后

2.1 修改/etc/profile
vim /etc/profile
添加
export HADOOP_HOME=/data/soft/hadoop-3.2.0
export PATH=.:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
需要root权限

等号前后不能有空格
java的环境也要有
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
source一下使得环境变量生效
source /etc/profile
检查一下环境是否装好

检查是否装好hadoop

以下文件在{HADOOP_HOME}/etc/hadoop/目录下
2.2 修改hadoop-env.sh
JAVA_HOME是ubuntu系统自带的 log日志是自己建立的
export JAVA_HOME=/home/gdan/data/jdk-8u131-linux-x64/jdk1.8.0_131
export HADOOP_LOG_DIR=/home/gdan/data/soft/hadoop_repo/logs/hadoop
(注意这里 等号附近 前往不能有空格)
2.3 修改core-site.xml
<configuration><property><name>fs.defaultFS</name><value>hdfs://bigdata01:9000</value></property><property><name>hadoop.tmp.dir</name><value>/data/hadoop_repo</value></property><property><name>hadoop.http.staticuser.user</name><value>root</value></property>
</configuration>
2.4 修改hdfs-site.xml
<configuration><property><name>dfs.replication</name><value>1</value></property>
</configuration>
2.5 修改mapred-site.xml
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>
2.6 修改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_MAPRED_HOME</value></property>
</configuration>
2.7 修改workers
bigdata01
2.8 修改start-dfs.sh、stop-dfs.sh
在文件开头添加
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
2.9 修改start-yarn.sh、stop-yarn.sh
在文件开头添加
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
2.10 启动集群
第一次启动时,先初始化datanode,执行如下命令:
hdfs namenode -format
格式化操作


启动集群:(这里可能有一堆问题 例如openssh没有安装等等)

访问界面
- HDFS webui界面:http://bigdata01:9870
- YARN webui界面:http://bigdata01:8088


3 HDFS
HDFS是一种允许文件通过网络在多台主机上分享的文件系统,可以让多台机器上的多个用户分享文件和存储空间
3.1 HDFS常见shell操作
hdfs dfs [-cmd]
- -ls:查询指定路径信息
- -put:从本地上传文件
- -cat:查看HDFS文件内容
- -get:下载文件到本地
- -mkdir [-p]:创建文件夹
- -rm [-r]:删除文件/文件夹

3.2 HDFS实操案例
hdfs dfs -ls / | grep / | wc -l
linux管道
在Linux中,管道(pipe)是一种特殊的机制,用于将一个命令的输出连接到另一个命令的输入。通过使用管道,可以将多个命令组合在一起,以实现更复杂的任务。
管道使用竖线符号(|)表示。它将前一个命令的输出作为后一个命令的输入。例如,下面的命令将列出当前目录中的文件,并将结果通过管道传递给grep命令进行过滤:
ls | grep keyword上述命令将列出包含关键字"keyword"的文件。
管道可以连接任意数量的命令。例如,下面的命令将列出当前目录中的文件,并按文件大小进行排序,然后显示前10个最大的文件:
ls -l | sort -nrk 5 | head -n 10上述命令首先使用ls -l命令列出文件和目录的详细信息,然后将结果通过管道传递给sort命令,按第5列(文件大小)进行逆序排序,最后将结果通过管道传递给head命令,只显示前10行。
通过使用管道,可以将简单的命令组合成更复杂的操作,提高命令行的灵活性和效率。管道是Linux中强大而常用的功能之一。
ls 指定/目录,grep 搜索 / 目录,wc显示行数
hdfs dfs -ls / | grep / | awk '{print $8,$5}'
| awk '{print $8,$5}': 这部分命令继续使用管道符号将前一个命令的输出传递给awk命令。awk '{print $8,$5}'用于打印每行的第8个字段(文件或目录名)和第5个字段(文件大小)。字段之间用空格分隔。
3.3 HDFS体系结构
- HDFS支持主从结构,主节点称为NameNode,支持多个;从节点称为DataNode,支持多个
- HDFS中还包含一个SecondaryNameNode进程
1. NameNode--大老板
- NameNode是整个文件系统的管理节点
- 它主要维护着整个文件系统的文件目录树,文件/目录的信息和每个文件对应的数据块列表,并且还负责接收用户的操作请求
2. SecondaryNameNode--秘书
- 主要负责定期的把edits中的内容合并到fsimage中
- 这个合并操作称为checkpoint,在合并的时候会对edits中的内容进行转换,生成新的内容保存到fsimage文件中
- 注意:在NameNode的HA(高可用)架构中没有SecondaryNameNode进程,文件合并操作会由standby NameNode负责实现
3. DataNode--小二
- 提供真实文件数据的存储服务
- HDFS会按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block,HDFS默认Block大小是128MB
- HDFS中,如果一个文件小于一个数据块的大小,那么并不会占用整个数据块的存储空间
- Replication:多副本机制,HDFS默认副本数量为3
- 通过dfs.replication属性控制
3.4 DataNode总结
注意:Block块存放在哪些DataNode上,只有DataNode自己知道,当集群启动的时候,DataNode会扫描自己节点上面的所有Block块信息,然后把节点和这个节点上的所有Block块信息告诉给NameNode。这个关系是每次重启集群都会动态加载的【这个其实就是集群为什么数据越多,启动越慢的原因】
3.5 NameNode总结
NameNode维护了两份关系:
- 第一份关系:File与Block list的关系,对应的关系信息存储在fsimage和edits文件中(当NameNode启动的时候会把文件中的元数据信息加载到内存中)
- 第二份关系:Datanode与Block的关系(当DataNode启动时,会把当前节点上的Block信息和节点信息上报给NameNode)
文件的元数据信息在NameNode里面都会占用150字节的存储空间。
1,fsimage文件其实是hadoop文件系统元数据的一个永久性的检查点,其中包含hadoop文件系统中的所有目录和文件idnode的序列化信息。
2,edits文件存放的是hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。

3.6 HDFS的回收站
在core-site.xml添加配置
<property><name>fs.trash.interval</name><value>1440</value>
</property>
重启hadoop
stop-all.sh
start-all.sh
忽略回收站删除文件的命令:
- HDFS为每个用户创建一个回收站目录:
/user/用户名/.Trash/ - 回收站中的数据都会有一个默认保存周期,过期未恢复则会被HDFS自动彻底删除
- 注意:HDFS的回收站默认是没有开启的,需要修改
core-site.xml中的fs.trash.interval属性
3.7 HDFS的安全模式
- 集群刚启动时,HDFS会进入安全模式,此时无法执行操作
- 查看安全模式:
hdfs dfsadmin -safemode get - 离开安全模式:
hdfs dfsadmin -safemode leave
3.8 案例:定时上传文件到HDFS
案例需求:例如日志文件为access_2020_01_01.log,每天上传到HDFS中
解决思路:
- 我们需要获取到昨天日志文件的名称
- 在HDFS上面使用昨天的日期创建目录
- 将昨天的日志文件上传到刚创建的HDFS目录中
- 要考虑到脚本重跑,补数据的情况
- 配置crontab任务
3.9 HDFS的高可用(HA)

- HDFS的HA,表示一个集群中存在多个NameNode,只有一个NameNode是处于Active状态,其它的是处于Standby状态
- Active NameNode(ANN)负责所有客户端的操作,Standby NameNode(SNN)用于同步ANN的状态信息,提供快速故障恢复能力
- 使用HA的时候,不能启动SecondaryNameNode
3.10 HDFS的高扩展(Federation)
- Federation可解决单一命名空间的一些问题,提供以下特性:HDFS集群扩展性、性能更高效、良好的隔离性
4 MapReduce
- MapReduce是一种分布式计算模型,主要用于搜索领域,解决海量数据的计算问题
- MapReduce有两个阶段组成:Map和Reduce

4.1 Map阶段
- 框架会把输入文件(夹)划分为很多InputSplit,默认每个HDFS的Block对应一个InputSplit。通过RecordReader类,把每个InputSplit解析成一个个<k1,v1>。默认每一行数据,会被解析成一个<k1,v1>
- 框架调用Mapper类中的map(...)函数,map函数的输入是<k1,v1>,输出是<k2,v2>。一个InputSplit对应一个Map Task
- 框架对map函数输出的<k2,v2>进行分区。不同分区中的<k2,v2>由不同的Reduce Task处理,默认只有1个分区
- 框架对每个分区中的数据,按照k2进行排序、分组。分组,指的是相同k2的v2分成一个组
- 在Map阶段,框架可以执行Combiner操作【可选】
- 框架会把Map Task输出的<k2,v2>写入Linux的磁盘文件中
4.2 Redeuce阶段
- 框架对多个Map Task的输出,按照不同的分区,通过网络Copy到不同的Reduce节点,这个过程称作Shuffle
- 框架对Reduce节点接收到的相同分区的<k2,v2>数据进行合并、排序、分组
- 框架调用Reducer类中的reduce方法,输入<k2,{v2...}>,输出<k3,v3>。一个<k2,{v2...}>调用一次reduce函数
- 框架把Reduce的输出结果保存到HDFS中
4.3 MapRedeuce任务日志查看
在yarn-site.xml添加配置,开启YARN的日志聚合功能,把散落在NodeManager节点上的日志统一收集管理,方便查看日志
<property> <name>yarn.log-aggregation-enable</name> <value>true</value>
</property>
<property><name>yarn.log.server.url</name><value>http://bigdata01:19888/jobhistory/logs/</value>
</property>
重启Hadoop,并启动HistoryServer
stop-all.sh
start-all.sh
mapred --daemon start historyserver
使用命令查看任务执行的日志:这里的id不一定,可以通过 hadoop job -list 来看看是否有任务
yarn logs -applicationId application_158771356
停止yarn任务:
yarn application -kill application_15877135678
4.4 Shuffle原理

- 在Map阶段中,通过InputSplit过程产生一个Map任务,该任务在执行的时候会把 <k1,v1>转化为<k2,v2>,这些数据会先临时存储到一个内存缓冲区中,这个内存缓冲区的大小默认是100M(io.sort.mb属性),
- 当达到内存缓冲区大小的80%(io.sort.spill.percent)即80M时,会把内 存中的数据溢写到本地磁盘中(mapred.local.dir),直到Map把所有的数据都计算完
- 最后会把内存缓冲区中的数据一次性全部刷新到本地磁盘文件上
- 数据会被shuffle线程分别拷贝到不同的reduce节点,不同Map任务中的相同分区的数据会在同一个reduce节点进行合并,合并以后会执行reduce的功能,最终产生结果数据。
注:shuffle其实是横跨Map端和Reduce端,主要是负责把Map端产生的数据通过网络拷贝到Reduce阶段进行统一聚合计算。
4.5 Shuffle原理
- 序列化:将内存中的对象信息转成二进制的形式,方便存储到文件中
- Hadoop实现了自己的序列化和反序列化机制,单独设计了一些
writable的实现,例如Longwritable、Text等
特点:
- 紧凑:高效使用存储空间
- 快速:读写数据的额外开销小
- 可扩展:可透明地读取老格式的数据
- 互操作:支持多语言的交互
4.6 InputSplit原理
- 当文件剩余大小bytesRemaining与splitSize的比值大于1.1的时候,就继续切分,否则,剩下的直接作为一个InputSize(即当bytesRemaining/splitSize <= 1.1时,会停止划分,将剩下的作为一个InputSplit)
- 把不支持切割的文件作为一个InputSplit,比如压缩文件
4.7 RecodReader原理
- 每一个InputSplit都有一个RecordReader,作用是把InputSplit中的数据解析成Record,即<k1,v1>
- 如果这个InputSplit不是第一个InputSplit,将会丢掉读取出来的第一行,因为总是通过next()方法多读取一行(会多读取下一个InputSplit的第一行)
相关文章:
【Hadoop 01】简介
目录 1 Hadoop 简介 2 下载并配置Hadoop 2.1 修改/etc/profile 2.2 修改hadoop-env.sh 2.3 修改core-site.xml 2.4 修改hdfs-site.xml 2.5 修改mapred-site.xml 2.6 修改yarn-site.xml 2.7 修改workers 2.8 修改start-dfs.sh、stop-dfs.sh 2.9 修改start-yarn.sh、s…...
【C++】开源:跨平台轻量日志库easyloggingpp
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍跨平台轻量日志库easyloggingpp。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&am…...
spring-websocket在SpringBoot(包含SpringSecurity)项目中的导入
✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 🥭本文内容:spring-websocket在SpringBoot(包含SpringSecurity…...
SpringBoot + Vue前后端分离项目实战 || 六:Jwt加密整合配置
文章目录 回顾添加依赖Jwt依赖Jwt配置定义Jwt拦截器注册Jwt拦截器,配置需要验证token的URL 测试Jwt修改登录等逻辑 回顾 在之前的系统中,我们利用UUID配合Redis以达到角色登录的功能。 当前整个系统存在一个问题:人为修改token值后…...
WPF 如何设置全局的订阅发布事件
文章目录 前言代码逻辑修改 总结 前言 我们需要一个全局事件订阅发布功能,实现页面通讯。使两个毫无关系的页面通过一个中间量进行通讯。 代码 IEventAggregator:消息订阅集合 这个是Prism提供的消息订阅功能。使用如下 设置订阅类型,即…...
STM32 USB使用记录:HID类设备(前篇)
文章目录 目的基础说明HID类演示代码分析总结 目的 USB是目前最流行的接口,现在很多个人用的电子设备也都是USB设备。目前大多数单片机都有USB接口,使用USB接口作为HID类设备来使用是非常常用的,比如USB鼠标、键盘都是这一类。这篇文章将简单…...
探索AI图像安全,助力可信AI发展
探索AI图像安全,助力可信AI发展 0. 前言1. 人工智能发展与安全挑战1.1 人工智能及其发展1.2 人工智能安全挑战 2. WAIC 2023 多模态基础大模型的可信 AI2.1 WAIC 2023 专题论坛2.2 走进合合信息 3. AI 图像安全3.1 图像篡改检测3.2 生成式图像鉴别3.3 OCR 对抗攻击技…...
vue 学习笔记 【ElementPlus】el-menu 折叠后图标不见了
项目当前版本 {"dependencies": {"element-plus/icons-vue": "^2.1.0","types/js-cookie": "^3.0.3","types/nprogress": "^0.2.0","axios": "^1.4.0","core-js": &quo…...
【JavaEE初阶】HTTP协议
文章目录 1. HTTP概述和fiddler的使用1.1 HTTP是什么1.2 抓包工具fiddler的使用1.2.1 注意事项1.2.2 fiddler的使用 2. HTTP协议格式2.1 HTTP请求格式2.1.1 基本格式2.1.2 认识URL2.1.3 方法 2.2 请求报头关键字段2.3 HTTP响应格式2.3.1 基本格式2.3.2状态码 1. HTTP概述和fidd…...
基于SaaS模式的Java基层卫生健康云HIS系统源码【运维管理+运营管理+综合监管】
云HIS综合管理平台 一、模板管理 模板分为两种:病历模板和报表模板。模板管理是运营管理的核心组成部分,是基层卫生健康云中各医疗机构定制电子病历和报表的地方,各医疗机构可根据自身特点特色定制电子病历和报表,制作的电子病历…...
effective c++ 条款2
条款2 常量(const)替换宏(#define)指针常量类成员常量 枚举(enum)替换宏(#define)模板函数(template inline)替换宏函数 尽量用const,enum,inline替换#define 总结就是: 常量(const)替换宏(#define) // uppercase names are usually for macros #define ASPECT_R…...
Python爬虫之Scrapy框架系列(23)——分布式爬虫scrapy_redis浅实战【XXTop250部分爬取】
目录: 1.实战讲解(XXTop250完整信息的爬取):1.1 使用之前做的完整的XXTOP250项目,但是设置为只爬取一页(共25个电影),便于观察1.2 配置settings文件中使用scrapy_redis的必要配置,并…...
html基于onmouse事件让元素变颜色
最近,在书写div块时,遇到一个小问题,这个小问题我搞了将近一个小时多才慢慢解决。问题是这样子的,有一个div块,我想让鼠标移上去变成蓝色,移开变成灰色,当鼠标按下去时让他变成深蓝色。于是就单…...
Linux环境PostgreSQL安装
今日一语:鲲鹏扶摇而直上九万里,雄鹰展翅高飞,这是因为鲲鹏一出世就得历劫,老鹰刚长出翅膀就会被扔下悬崖 下载安装包,解压到服务器中,然后 make && make install # 登录使用 ./psql # 切换数据库…...
Rust 数据类型 之 结构体(Struct)
目录 结构体(Struct) 定义与声明 结构体定义 结构体实例 结构体分类 单元结构体(Unit Struct) 元组结构体(Tuple Struct) 具名结构体(Named Struct) 结构体嵌套 结构体方法…...
数据结构之Queue的实现
Queue支持的方法 方法名参数功能返回Sizevoid返回链表规模(该方法由List< T>派生而来)emptyvoid返回链表是否为空(该方法由List< T>派生而来)frontvoid返回队首数据域的引用enqueueT const & e入队voiddequeuevoid出队出队的对象 code // Queue.h # pragma …...
rust声明式宏
宏 在 rust 中,我们一开始就在使用宏,例如 println!, vec!, assert_eq! 等。看起来宏和函数在使用时只是多了一个 !。实际上这些宏都是声明式宏(也叫示例宏或macro_rules!),rust 还支持过程宏,过程宏为我们…...
第二章:Learning Deep Features for Discriminative Localization ——学习用于判别定位的深度特征
0.摘要 在这项工作中,我们重新审视了在[13]中提出的全局平均池化层,并阐明了它如何明确地使卷积神经网络(CNN)具有出色的定位能力,尽管它是在图像级别标签上进行训练的。虽然这个技术之前被提出作为一种训练规范化的手…...
【CSS】box-shadow 属性
box-shadow 是 CSS 属性,用于为元素添加一个阴影效果,使元素看起来浮起或有层次感。 该属性允许设置一个或多个阴影效果,其语法如下: box-shadow: h-shadow v-shadow blur spread color inset;h-shadow:水平阴影的位…...
基于深度学习的高精度课堂人脸检测系统(PyTorch+Pyside6+YOLOv5模型)
摘要:基于深度学习的高精度课堂人脸检测系统可用于日常生活中或野外来检测与定位课堂人脸目标,利用深度学习算法可实现图片、视频、摄像头等方式的课堂人脸目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标…...
如何创建自定义编程连字符号:Hasklig字体开发终极指南
如何创建自定义编程连字符号:Hasklig字体开发终极指南 【免费下载链接】Hasklig Hasklig - a code font with monospaced ligatures 项目地址: https://gitcode.com/gh_mirrors/ha/Hasklig Hasklig是一款专为程序员设计的等宽字体,它通过创新的连…...
ASP.NET Core 认证鉴权实战:JWT、Policy 与权限边界怎么落地
实现场:一个后台退款接口原本只允许财务角色调用,但线上排查发现,普通运营账号只要拿到有效 token,也能调用成功。根因并不复杂:接口加了 [Authorize]系统只校验“是否登录”没有继续校验角色、权限和资源归属结果就是…...
在Windows 11上用Bochs调试Linux 0.00:从BIOS加载到保护模式切换的完整实战
在Windows 11上用Bochs调试Linux 0.00:从BIOS加载到保护模式切换的完整实战 如果你对操作系统的底层实现充满好奇,想亲手探索计算机从加电到运行第一个用户程序的完整过程,那么这次实验将是一次绝佳的实践机会。我们将使用Bochs模拟器&#x…...
别再让LVGL卡顿了!手把手教你用思澈SDK的menuconfig优化framebuffer配置,帧率翻倍
别再让LVGL卡顿了!手把手教你用思澈SDK的menuconfig优化framebuffer配置,帧率翻倍 嵌入式UI开发中,LVGL的流畅度直接影响用户体验。许多开发者在使用思澈SDK时,常遇到界面卡顿、帧率低的问题。本文将深入分析framebuffer配置对性能…...
从权重计分到算杀引擎:五子棋AI核心算法实战解析
1. 五子棋AI的算法演进:从基础评分到算杀引擎 五子棋作为一款经典策略游戏,其AI算法的核心在于如何评估棋盘局势并做出最优决策。早期AI主要依赖简单的评分机制,比如给不同的棋形(活二、活三、冲四等)赋予固定分值&…...
告别环境混乱:Python3.9镜像实战教程,独立环境管理如此简单
告别环境混乱:Python3.9镜像实战教程,独立环境管理如此简单 1. 为什么需要Python3.9镜像 在Python开发中,最令人头疼的问题莫过于环境冲突。想象一下这样的场景:你正在开发一个需要TensorFlow 2.4的项目,但同时还要维…...
Verilog握手信号实战:如何用valid/ready搭建高效数据流水线(附完整代码)
Verilog握手信号实战:如何用valid/ready搭建高效数据流水线(附完整代码) 在FPGA开发中,数据流水线是实现高性能计算的关键架构。但当我们面对不同处理速度的模块时,如何确保数据既不丢失又不阻塞?valid/rea…...
FMQL开发板实战:从Vivado到IAR的BOOT.bin生成全流程(附避坑指南)
FMQL开发板实战:从Vivado到IAR的BOOT.bin生成全流程(附避坑指南) 在嵌入式开发领域,复旦微电子FMQL系列开发板因其高性能和灵活性备受开发者青睐。然而,对于刚接触该平台的工程师来说,从零开始生成可启动的…...
128K上下文开源代码模型:DeepSeek-Coder-V2赋能开发者的技术解析
128K上下文开源代码模型:DeepSeek-Coder-V2赋能开发者的技术解析 【免费下载链接】DeepSeek-Coder-V2 项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder-V2 在软件开发效率日益成为竞争力核心指标的今天,开发者面临着代码生成质…...
Vite - vite.config.js 的一些配置(base、resolve、server)
一、base 1、基本介绍 base 用于设置开发或生产环境服务的公共基础路径 类型:string默认值:/2、演示 部署在根路径 base: /// 例如,https://example.com/<!-- 此时生成的 HTML 中的资源引用会变为如下 --><script src"/assets/…...
