换了台机器 又要给自己新建用户了
需要准备:
Linux系统 (本文使用的是Ubuntu 18.04)
一个拥有sudo权限的账号user
- 创建账号
1 | sudo adduser zsx |
同时会创建用户主目录/home/zsx/
- 为用户增加sudo权限
1 | sudo vim /etc/sudoers |
增加权限
1 | # User privilege specification |
需要准备:
Linux系统 (本文使用的是Ubuntu 18.04)
一个拥有sudo权限的账号user
1 | sudo adduser zsx |
同时会创建用户主目录/home/zsx/
1 | sudo vim /etc/sudoers |
增加权限
1 | # User privilege specification |
写在前: 本小白使用的是Hexo和NexT主题搭建的博客 版本说明:hexo 5.4.0、hexo-theme-next 8.6.1
🔗 https://github.com/next-theme/hexo-theme-next
1 | cd hexo-site |
🔗 https://theme-next.js.org/docs/getting-started/configuration
1 | # 通过 npm 安装 |
在站点配置文件中, 1
2
3# Site
author: Christy
language: zh-CN
参考: https://blog.csdn.net/carfge/article/details/79691360
首先,进入本地仓库
1 | git remote add origin [email protected]:user/repo.git |
1 | git fetch origin dev-op(远程分支名称) |
1 | git checkout -b dev-op(本地分支名称) origin/dev-op(远程分支名称) |
1 | git pull origin dev-op(远程分支名称) |
记录专业实践过程中踩的坑
在订单表里添加记录的时候,显示报错如下:
1 | cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order (order_no, `uid`, addr_id, |
经过排查,发现order
是sql
的保留字段(在排序的时候用到);
由于订单表的名字也为order
,再加上mapper是由mybatis自动生成的,所以这个冲突需要手动解决一下。
在OrderMapper.xml
文件中,找到 1
2
3
4
5insert into order (order_no, `uid`, addr_id,
amount, `type`, freight,
`status`, payment_time, delivery_time,
finish_time, close_time, updated,
created)order
加上 `即可 即
1
2
3
4
5insert into `order` (order_no, `uid`, addr_id,
amount, `type`, freight,
`status`, payment_time, delivery_time,
finish_time, close_time, updated,
created)
记录一次Anaconda+VSCode+PyTorch的配置
操作系统为macOS Catalina 10.15.7
更新:
由于需要GPU,在下载Anaconda和PyTorch中,也会附带说明了在windows10的操作。
其他地方都是按照MacOS来记录的。
https://www.anaconda.com/products/individual#Downloads
有win、mac、linux的版本选择,操作系统是什么就选择对应的就好啦~
例如 Windows10:
我直接在官网上下载的,也可以去清华镜像站找对应的版本。
注意:在安装过程中,有一步需要将“添加到PATH”勾选上!
一定要勾选上(尽管勾选之后说明文字会标红),不然后面配置稍有些麻烦。
如果在官网的下载速度较慢,可以去清华镜像站下载。下面以anaconda的安装为例。(安装miniconda也是同样操作) https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 找自己对应的操作系统,和需要的版本,进行下载。
例如 Mac OS: 我用到的是Anaconda3-2020.11-MacOSX-x86_64.pkg,https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2020.11-MacOSX-x86_64.pkg(点击即可下载)。也推荐下载miniconda。
macOS上安装没有什么需要注意的地方。下载好之后,双击进行安装,一直点“继续”,直到完成。
输入conda -V
,查看版本号,出现conda版本号就是安装好了。
macOS里遇到的问题
新版的Anaconda会在每一个新开的terminal里面自动进入虚拟环境base。看着有些强迫症犯了。 使用如下命令就能把默认进入base虚拟环境关掉了。 1
conda config --set auto_activate_base false
另外,如果需要进入base虚拟环境
1 | conda activate |
退出当前虚拟环境
1 | conda deactivate |
1 | conda create --name pytorch python=3.6 |
1 | conda activate pytorch |
在pytorch虚拟环境中安装PyTorch。要注意,先进入pytorch虚拟环境。 附上官网的链接:
根据官网,安装PyTorch。
1 | conda install pytorch torchvision torchaudio -c pytorch |
要选择对应的cuda版本的,如果没有GPU就要选择None
1 | conda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch |
参考官方链接 https://code.visualstudio.com/docs/python/python-tutorial#_prerequisites
官网下载,附上链接 https://code.visualstudio.com
在VSCode的应用商店中搜索Python,并下载 
这里的python解释器使用pytorch虚拟环境中的,见上文中“为PyTorch新建虚拟环境”。
验证python是否安装
python3 --version
由于我使用pytorch环境下的python,需要先进入该环境。
conda activate pytorch

后来换了一台电脑下载的是miniconda,无所谓啦~
使用快捷键shift + command + P ,或者点击菜单栏中的查看里的命令面板, 打开命令面板。 输入python:select interpreter
选择python解释器。这里选择我要用的pytorch里的python3.6.2就好了。 
Note:代码补全要用IntelliCode,不要用Pylance(要卸掉)
下载插件:Visual Studio IntelliCode 注意:VS Code会在右下角推荐Pylance,不要下载
在全局的setting.json中,找到以下有关editor.suggest设置为false的代码删掉
"editor.acceptSuggestionOnCommitCharacter": false,
"editor.suggest.showClasses": false,
"editor.suggest.showConstructors": false,
"editor.suggest.showEvents": false,
"editor.suggest.showFields": false,
"editor.suggest.showFunctions": false,
"editor.suggest.showVariables": false,
"editor.suggest.showValues": false,
"editor.suggest.showUnits": false,
"editor.suggest.showTypeParameters": false,
"editor.suggest.showSnippets": false,
"editor.suggest.showReferences": false,
"editor.suggest.showOperators": false,
"editor.suggest.showModules": false,
"editor.suggest.showProperties": false,
"editor.suggest.showIssues": false,
"editor.suggest.showMethods": false,
"editor.suggest.showIcons": false,
"editor.suggest.showInterfaces": false,
"editor.suggest.showFolders": false,
"editor.suggest.showFiles": false,
"editor.suggest.snippetsPreventQuickSuggestions": false,
"editor.suggest.showWords": false,
"editor.suggest.showKeywords": false,
"editor.suggest.showEnums": false,
"editor.suggest.showEnumMembers": false,
"editor.suggest.showConstants": false,
"editor.suggest.filterGraceful": false,
"editor.suggest.showStructs": false,
"editor.suggest.showUsers": false,
将下面这行的null改为true,即将
"editor.quickSuggestions": null,
改为
"editor.quickSuggestions": true,
点击 code => 首选项 => 设置,随便找一项设置,点击在setting.json中编辑,(再删掉新加的代码就好了),不知道有什么其他的好方法。
当然啦,PyCharm也是很好的选择~也推荐~
1 | conda install opencv3 -c anaconda |
c是channel的意思,要指定anaconda或者menpo做channel才行。
记录专业实践使用SpringBoot后端开发遇到的问题
报错显示
1 | Description: |
首先检查,@Mapper注解
1 | @Mapper |
考虑缺少依赖,发现pom.xml文件中没有写如下部分
1 | <dependency> |
用的是mybatis不是mybatisplus,要用mybatis的依赖而不是mybatisplus的依赖
为专业课复习用
Amazon Web Service(AWS)
IaaS:将硬件设备等基础资源封装成服务供用户使用
🌿Amazon平台基础存储架构:Dynamo
Amazon平台的架构是完全的分布式、去中心化
需求——Amazon平台中有很多服务对存储的需求只是读取、写入,(满足简单的键/值式存储)
问题 | 采取的相关技术 |
---|---|
数据均衡分布 | 改进的一致性哈希算法 |
数据备份 | 参数可调的quorum机制 |
数据冲突处理 | 向量时钟Vector Clock |
成员资格及错误检测 | 基于Gossip协议的成员资格和错误检测 |
临时故障处理 | Hinted handoff(数据回传机制) |
永久故障处理 | Merkle哈希树 |
Dynamo中的存储节点呈无中心的环状分布。
preference list
存储与某个特定键值相对应的数据的节点列表
coordinator
执行一次读或写操作的节点
通常,coordinator 是 preference list 上的第一个节点
Dynamo采用了分布式的数据存储架构,均衡的数据分布可以保证负载平衡和系统良好的扩展性。
因此,各个节点上数据的均衡性是影响Dynamo性能的关键问题。
取模分配方式:如果增加一台主机,会有大量的数据进行迁移
一致性哈希算法是目前主流的分布式哈希表(Distributed Hash Table,DHT)协议之一
一致性哈希算法除了能够保证哈希运算结果充分分散到整个环上外,还能保证在添加或删除设备节点时只会影响到其在哈希环中的前驱设备节点,而不会对其他设备节点产生影响。
一致性哈希算法可以大大降低在添加或删除节点时引起的节点间的数据传输开销
Dynamo中引入了虚拟节点的概念
每个虚拟节点都隶属于某一个实际的物理节点,一个物理节点根据其性能的差异被分为一个或多个虚拟节点。
各个虚拟节点的能力基本相当,并随机分布在哈希环上。
Dynamo将整个哈希环划分成Q等份,每个等份称为一个数据分区(Partition)
在存储数据时,每个数据会被先分配到某个数据分区,再根据负责该数据分区的虚拟节点,最终确定其所存储的物理节点。
可以参照上面的数据分区的图来看
读写参数W、R、N
N:系统中每条记录的副本数
W:每次记录成功写操作需要写入的副本数
R:每次记录读请求最少需要读取的副本数。
满足R+W>N,用户即可自行配置R和W
采用向量时钟技术。
Dynamo中的向量时钟通过[node, counter]
对 来表示。
node表示操作节点 counter是其对应的计数器,初始值为 0节点每进行一次更新操作则计数器加 1
由于Dynamo采用了无中心的架构,每个成员节点都需要保存其他节点的路由信息。
为了保证每个节点都能拥有最新的成员节点信息,Dynamo中采用了一种类似于Gossip(闲聊)协议的技术
Dynamo中还通过Gossip来实现错误检测。任何节点向其他节点发起通信后,如果对方没有回应,则认为对方节点失效
为了避免新加入的节点之间不能及时发现其他节点的存在,Dynamo中设置了一些种子节点(Seed Node)。种子节点和所有的节点都有联系。当新节点加入时,它扮演一个中介的角色,使新加入节点之间互相感知。
为了处理临时失效的节点,Dynamo中采用了一种带有监听的数据回传机制(Hinted Handoff) 当虚拟节点A失效后,会将数据临时存放在节点D的临时空间中,并在节点A重新可用后,由节点D将数据回传给节点A。
Dynamo采用Merkle哈希树技术来加快检测和减少数据传输量
为专业课复习用
用来管理大规模结构化数据的分布式存储系统
⚠️Client与Master之间只有控制信息,无数据信息,减少主服务器的负载。
Client 客户端
Master 主服务器
Chunk Server 数据块服务器
可以通过系统架构图来理解
当Master发生故障时,在磁盘数据保存完好的情况下,可以迅速恢复以上元数据
为了防止Master彻底死机的情况,GFS还提供了Master远程的实时备份
GFS中的每一个文件被划分成多个Chunk,Chunk的默认大小是64MB
对一部分原始数据进行指定的操作。每个Map操作都针对不同的原始数据,因此Map与Map之间是互相独立的,这使得它们可以充分并行化。
对每个Map所产生的一部分中间结果进行合并操作,每个Reduce所处理的Map中间结果是互不交叉的,所有Reduce产生的最终结果经过简单连接就形成了完整的结果集.
两个主要的函数🌿🌿🌿
Map: (in_key, in_value) -> {(keyj, valuej) | j = 1…k}
Reduce: (key, [value1,…,valuem]) -> (key, final_value)
in_key, in_value
,指明了Map需要处理的原始数据k-v
对,中间结果key, [value1,…,valuem]
(key, final_value)
,所有Reduce的结果并在一起就是最终结果MapReduce通过重新执行失效的地方来实现容错。
Master会周期性地设置检查点(checkpoint),并导出Master的数据。一旦某个任务失效,系统就从最近的一个检查点恢复并重新执行。
由于只有一个Master在运行,如果Master失效了,则只能终止整个MapReduce程序的运行并重新开始。
Master会周期性地给Worker发送ping命令,如果没有Worker的应答,则Master认为Worker失效,终止对这个Worker的任务调度,把失效Worker的任务调度到其他Worker上重新执行。
怎样通过MapReduce完成排序工作,使其有序(字典序)呢?
步骤
对每一个数据分块都启动一个Map进行处理。
采用桶排序的方法,每个Map中按照首字母将字符串分配到26个不同的桶中。对于Map之后得到的中间结果,启动26个Reduce。
按照首字母将Map中不同桶中的字符串集合放置到相应的Reduce中进行处理。
给定一个巨大的文本(如1TB),如何计算单词出现的数目?
步骤
定义Map和Reduce函数
Map(K, V){
For each word w in V
Collect(w, 1);
}
Reduce(K, V[]){
int count = 0;
For each v in V
count += v
Collect(K, count);
}
Bigtable是一个分布式多维映射表,表中的数据通过一个行关键字(Row Key)、一个列关键字(Column Key)以及一个时间戳(Time Stamp)进行索引🌿🌿🌿🌿🌿
🐰Bigtable可以看成
key-value
的形式,其中的key
是行关键字+列关键字+时间戳
Bigtable的存储逻辑可以表示为:
(row:string, column:string, time:int64)→string
int64
,两种生成方式:
数据的有效性校验由构建于其上的应用系统完成
🐰BigTable不进行数据的有效性校验
子表服务器
**_SSTable_是Google为Bigtable设计的内部数据存储格式。**🌿🌿🌿🌿🌿
所有的SSTable文件都存储在GFS上,用户可以通过键来查询相应的值。
每个子表服务器上仅保存一个日志文件
🐰共享日志,每个子表服务器上的日志是共享日志的一个片段
每个子表服务器上保存的子表数量可以从几十到上千不等,通常情况下是100个左右
Bigtable系统的内部采用的是一种类似B+树的三层查询体系
🐰元数据表:
根子表(保存其他子表的位置) + 其他元数据子表(保存用户子表的位置信息)
较新的数据存储在内存中一个称为内存表(Memtable)的有序缓冲里,
较早的数据则以SSTable格式保存在GFS中。
🐰内存表(SSTable的缓存),达到阈值后冻结,经过次压缩变成SSTable,Bigtable再创建一个新的内存表
🐰
内存表的空间有限,达到阈值后 ---- 次压缩
合并压缩 --- 定期进行
主压缩 --- 定期进行
主压缩成一个SSTable后,前面被压缩的都会被删除
Bigtable允许用户将原本并不存储在一起的数据以列族为单位,根据需要组织在一个单独的SSTable中,以构成一个局部性群组。
用户可以只看自己感兴趣的内容。 对于一些较小的且会被经常读取的局部性群组,明显地改善读取效率。
压缩可以有效地节省空间,Bigtable中的压缩被应用于很多场合。
压缩可以被用在构成局部性群组的SSTable中,可以选择是否对个人的局部性群组的SSTable进行压缩。
两步压缩
压缩的本质:寻找重复数据,用少的字节代替
一个很长的二进制向量和一系列随机映射函数
存储BigTable的子表文件
子表:SSTable和日志文件
为Google云计算应用(或第三方应用)提供数据结构化存储功能
结构化 --- 字符串的形式存储
类似于数据库
没有事务处理的能力
为MapReduce提供数据源或数据结果存储
海量数据 --- 需要存储海量的用户行为数据(如点击时间、位置等) 海量用户 --- 需要为任意多的网站提供流量分析
使用BigTable存储和检索数据,使用MapReduce统计数据
原始点击数据表
行键:点击时间
列键:网站URL、网站名称、用户IP地址、来源URL、目标URL…… 目前尺寸约200TB
统计数据表
行键:网站URL(倒排)
列键:点击次数(如记录最近一个月每日的访问次数等)、页面关注度(如记录网站页面的访问比率)、来源网站(如记录TOP10)、目标网站(如记录TOP10)…
每个列中记录的内容是字符串,Analytics在查询后需要解析字符串获得统计结果
可根据统计内容的增多来增加新的列
目前尺寸约20TB
数据存储流程
数据处理流程
Map操作
假设过去一周查询结果文件在GFS中包含M个Chunk,那么Master寻找M个空闲的Worker,分别处理这M个Chunk,得到每个网站中页面的访问次数自动排序
对M个中间结果进行排序Reduce操作
假设含N个网站,那么可以分配N台Worker分别处理单个网站的数据应用程序将分析结果写入统计数据表
从数据统计表中查询xxx.com行 获取对应列的数据,解析,得到并展示最终结果
如何获取论文统计数据(如论文引用次数)
步骤为专业课复习用
海量数据或巨量数据,其规模巨大到无法通过目前主流的计算机系统在合理时间内获取、存储、管理、处理并提炼以帮助使用者决策。
图灵奖获得者、著名数据库专家Jim Gray博士观察并总结人类自古以来,在科学研究上,先后历经了实验、理论、计算和数据四种范式
在思维方式方面,大数据完全颠覆了传统的思维方式:
全样而非抽样
效率而非精确
相关而非因果
为专业课复习用
Wikipedia上对云计算的定义
云计算是一种能够将动态伸缩的虚拟化资源通过互联网以服务的方式提供给用户的计算模式,用户不需要知道如何管理那些支持云计算的基础设施。
Amazon、Google、Microsoft
🌿Google发表学术论文的形式公开其云计算三大法宝:GFS、MapReduce和Bigtable。
针对性更强,它将某些特定应用软件功能封装成服务
🌰Gmail对资源的抽象层次更进一步,提供用户应用程序运行环境
🌰Google App Engine 、Microsoft Windows Azure将硬件设备等基础资源封装成服务供用户使用
🌰 Amazon EC2/S3
从SaaS到PaaS到IaaS,依次:专用性减弱、通用性增强
假设系统的实现如下图:
基础设施是指包括服务器、网络、数据中心
平台是指包括支撑软件及以下的
软件是指全部的部分