使用VirtualBox虚拟机搭建hadoop运行环境,
最近学了一下大数据,包括hadoop环境的搭建,搭建工具:centos6.5,hadoop2.6.4,eclipse Mars.1 Release (4.5.1),jdk1.8
第一步、网络与ip地址的设置,安装virtualbox此处省略,接下来就是安装centos6.5,具体参照这篇博客http://www.2cto.com/os/201407/318477.html,安装好之后会重启,点击输入密码进入root用户,我将root用户的密码设置为123456,比较简单,接下来要在VirtualBox界面设置虚拟机的网络连接方式,如下图:
为了确保每个虚拟机都可以使用主机的网络,还要另外设置一块网卡为NAT模式(前提必须是虚拟机是关机状态的),如下图:
设置好之外还需要设置全局连接方式:VirtualBox主界面 管理->全局设定->网络->把第一个NatWork打钩,然后再设置仅Host-Only联网方式双击VirtualBox Host-Only Ethernet Adapter ,设置成如下图:
DHCP的设置,不启用DHCP服务器,开启虚拟机进入root用户设置ip地址,
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改成如下图所示:
NETMASK:
子网掩码 用来标识这个IP地址的网段,IP地址间能不能通信主要看属不属于同一网段,用子网掩码来区分网段,子网掩码为1的部分对应IP地址不可变,为0的部分可变,不可变的为网络位,可变的为主机位
IPADDR:
ip地址必须和GATEWAY在同一网关字段,
GATEWAY:
默认网关 ,就是上一张图片里的ip 192.168.18.1地址,这里是使用了一个虚拟的网卡VirtualBox Host-Only Ethernet Adapter来实现网关
将NM_CONTROLLED=yes改为no这条指令,不改报错了,改了之后,使用命令service network restart,如果没报错,再使用ifconfig出现如下所示界面,则证明修改成功:
·
接下来可以在主机中ping 192.168.18.110,如果ping通则证明主机与虚拟机连通了, 接着可以使用第三方软件在windows环境下连接虚拟机如Xshell,或者SecureCRT.exe之类的软件在windows下操作虚拟机,其他两台虚拟机操作同上,或者利用Virtualbox的虚拟机复制功能,复制两台一样的虚拟机,只需要修改一下ip地址和mac硬件地址,我采用的是重复第一台的操作,继续搭建了第二和第三台虚拟机,
二、hadoop集群安装
将192.168.18.110设置为主节点,其他两个节点的ip分别设置为192.168.18.111,192.168.112
1.配置hosts
接下来就是添加主机IP与主机名的映射关系
[root@localhost ~]# vi /etc/hosts
前两行注释掉:
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#添加映射关系:
192.168.18.110 master
192.168.18.111 slaver1
192.168.18.112 slaver2
保存之后,将主节点的hosts分别拷贝到其他两个子节点,在主节点上执行
[root@localhost ~]# scp /etc/hosts root@192.168.18.111:/etc/
[root@localhost ~]# scp /etc/hosts root@192.168.18.112:/etc/
[root@localhost ~]# source /etc/profile 在192.168.18.110上执行
[root@localhost ~]# source /etc/profile 在192.168.18.111上执行
[root@localhost ~]# source /etc/profile 在192.168.18.112上执行
2. 配置ssh无密码访问
生成公钥密钥对
在每个节点上分别执行:
[root@master ~]# ssh-keygen -t rsa
[root@slaver1 ~]# ssh-keygen -t rsa
[root@slaver2 ~]# ssh-keygen -t rsa
一直按回车直到生成结束
执行结束之后每个节点上的/root/.ssh/目录下生成了两个文件 id_rsa 和 id_rsa.pub
其中前者为私钥,后者为公钥
在主节点上执行:
[root@master ~]# cd /root/.ssh/
[root@master .ssh]# cp id_rsa.pub authorized_keys
将子节点的公钥拷贝到主节点并添加进authorized_keys
将两个子节点的公钥拷贝到主节点上,分别在两个子节点上执行:
[root@slaver1 ~]# scp /root/.ssh/id_rsa.pub root@master:/root/.ssh/id_rsa_slaver1.pub
[root@slaver2 ~]# scp /root/.ssh/id_rsa.pub root@master:/root/.ssh/id_rsa_slaver2.pub
然后在主节点上,将拷贝过来的两个公钥合并到authorized_keys文件中去
主节点上执行:
[root@master ~]# cd /root/.ssh/
[root@master .ssh]# cat id_rsa_slaver1.pub>>authorized_keys
[root@master .ssh]# cat id_rsa_slaver2.pub>>authorized_keys
cat id_rsa_slaver1.pub>>authorized_keys
将主节点的authorized_keys文件分别替换子节点的authorized_keys文件
主节点上执行用scp命令将authorized_keys文件拷贝到子节点的相应位置
[root@master ~]# cd /root/.ssh
[root@master .ssh]# scp authorized_keys root@slaver1:/root/.ssh/
[root@master .ssh]# scp authorized_keys root@slaver2:/root/.ssh/
最后测试是否配置成功
在主节点上分别执行
[root@master ~]# ssh slaver1
[root@master ~]# ssh slaver2
能正确跳转到两台子节点的操作界面即可,同样在每个子节点通过相同的方式登录主节点和其他子节点也能无密码正常登录就表示配置成功。
这里的配置方式可以有多种操作步骤,最终目的是每个节点上的/root/.ssh/authorized_keys文件中都包含所有的节点生成的公钥内容。
上面配置SSH切换服务器较繁琐,稍不小心就会出错,可以用下面的
安装ssh 证书
[root@master ~]$ ssh-keygen -t rsa
[root@slaver1 ~]$ ssh-keygen -t rsa
[root@slaver2 ~]$ ssh-keygen -t rsa
[root@master ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub master
[root@master ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver1
[root@master ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver2
[root@slaver1 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub master
[root@slaver1 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver1
[root@slaver1 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver2
[root@slaver2 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub master
[root@slaver2 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver1
[root@slaver2 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver2
3. 安装jdk
卸载jdk(三台机器上都要卸载)
查看系统已经装的jdk:
[root@master ~]# rpm -qa|grep jdk
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
卸载jdk:
[root@master ~]# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
[root@master ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
其他两个节点操作上边相同动作
安装JDK(三台机器都要安装)
安装在同一位置/opt/java/jdk1.7.0_76
下载JDK。这里如何将jdk从windows发送至虚拟机,使用的是FileZillaClient进行连接如下图,将文件发送到/opt/java/目录下(注java是在/opt目录下新建的):
解压JDK :
[root@master ~]# mkdir -p /opt/java/
[root@master ~]# tar -zxvf /opt/java/jdk-7u76-linux-x64.tar.gz -C /opt/java/
其他两个节点操作上边相同动作
配置环境变量, 编辑profile文件:
[root@master ~]# vi /etc/profile
在profile文件末尾添加以下代码:
export JAVA_HOME=/opt/java/jdk1.7.0_76
export JAVA_BIN=/opt/java/jdk1.7.0_76/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
拷贝profile到子节点
主节点上执行:
[root@master ~]# scp /etc/profile root@slaver1:/etc/
[root@master ~]# scp /etc/profile root@slaver2:/etc/
重启生效:
[root@master ~]# reboot
[root@slaver1 ~]# reboot
[root@slaver2 ~]# reboot
以下只在主节点上操作
4.安装hadoop
首先将hadoop-2.6.4.tar.gz放到三台机器的/usr目录下
在master主机上安装hadoop
安装位置自定,例如安装在/usr目录下面
下载hadoop包,放在/usr目录下,解压hadoop
[root@master ~]# tar -zxvf /usr/hadoop-2.6.4.tar.gz -C /usr/
在usr下面生成hadoop-2.6.4目录
配置环境变量:
[root@master ~]# vi .bash_profile
PATH=$PATH:$HOME/bin:/usr/hadoop-2.6.4/sbin
export PATH
export JAVA_HOME=/opt/java/jdk1.7.0_76
export JAVA_BIN=/opt/java/jdk1.7.0_76/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
HADOOP_HOME=/usr/hadoop-2.6.4
HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
PATH=$HADOOP_HOME/bin:$PATH
export HADOOP_HOME HADOOP_CONF_DIR PATH
[root@master ~]# source .bash_profile
5.配置hadoop
配置hadoop配置文件
需要配置的文件的位置为/hadoop-2.6.4/etc/hadoop,需要修改的有以下几个
hadoop-env.sh
yarn-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
slaves
其中
hadoop-env.sh和yarn-env.sh里面都要添加jdk的环境变量:
hadoop-env.sh中
[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop
[root@master hadoop]# vi hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/opt/java/jdk1.7.0_76
(红色为新添加的内容,其他的代码是文件中原有的)
# The jsvc implementation to use. Jsvc is required to run secure datanodes
# that bind to privileged ports to provide authentication of data transfer
# protocol. Jsvc is not required if SASL is configured for authentication of
# data transfer protocol using non-privileged ports.
#export JSVC_HOME=${JSVC_HOME}
yarn-env.sh中
[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop
[root@master hadoop]# vi yarn-env.sh
# User for YARN daemons
export HADOOP_YARN_USER=${HADOOP_YARN_USER:-yarn}
# resolve links - $0 may be a softlink
export YARN_CONF_DIR="${YARN_CONF_DIR:-$HADOOP_YARN_HOME/conf}"
# some Java parameters
export JAVA_HOME=/opt/java/jdk1.7.0_76
(红色为新添加的内容,其他的代码是文件中原有的)
[root@master ~]# mkdir -p /usr/temp
[root@master ~]# mkdir -p /usr/hadoop-2.6.4/dfs/data
[root@master ~]# mkdir -p /usr/hadoop-2.6.4/dfs/namesecondary
[root@master ~]# mkdir -p /usr/hadoop-2.6.4/dfs/name
注:下边配置参数时蓝色汉字为注释,不能拷贝进配置文件中
core-site.xml中
[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop
[root@master hadoop]# vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name> #相当于版本一的fs.default.name 默认端口号8020
<value>hdfs://master:9000</value>
<description>NameNode URI.</description>
</property>
<property>
<name>io.file.buffer.size</name> #流的缓冲区为128K
<value>131072</value>
<description>Size of read/write buffer used inSequenceFiles.</description>
</property>
<property>
<name>hadoop.tmp.dir</name> #HDFS与本地磁盘的临时文件路径,服务器多磁盘每个都配
<value>file:///usr/temp</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
#sqoop访问Hadoop的MapReduce使用的是代理的方式,必须在Hadoop中配置所接受的proxy(代理,委托)用户和组,找到Hadoop的core-site.xml配置文件
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
hdfs-site.xml中
[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop
[root@master hadoop]# vi hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
#hadoop 在NameNode所在机器里运行SecondaryNameNode,http监听端口50090,在浏览器输入NameNode的地址和50090端口号,就可看到其信息
<description>The secondary namenode http server address andport.</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/hadoop-2.6.4/dfs/name</value>
#存放 naname table 和 dfs.namenode.edits.dir,存放edit(编辑校订)文件
<description>Path on the local filesystem where the NameNodestores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.datanode.data.dir</name> #数据块的存放位置
<value>file:///usr/hadoop-2.6.4/dfs/data</value>
<description>Comma separated list of paths on the local filesystemof a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name> #检查点路径
<value>file:///usr/hadoop-2.6.4/dfs/namesecondary</value>
<description>Determines where on the local filesystem the DFSsecondary name node should store the temporary images to merge. If this is acomma-delimited list of directories then the image is replicated in all of thedirectories for redundancy.</description>
</property>
<property>
<name>dfs.replication</name> #副本镜像数
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
#1.配置
namenode必须将dfs.webhdfs.enabled设置为true,否则不能使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode来保存的。
2.使用说明
hdfs使用50070端口,访问datanode的webhdfs使用50075端口,访问文件、文件夹信息使用namenode的IP和50070端口,访问文件内容或者进行打开、上传、修改、下载等操作使用datanode的IP和50075端口,要想不区分端口,直接使用namenode的IP和端口进行所有的webhdfs操作,就需要在所有的datanode上都设置hefs-site.xml中的dfs.webhdfs.enabled为true
<value>true</value>
</property>
<property>
<name>dfs.permissions</name> #设置权限
<value>false</value>
</property>
<property>
<name>dfs.web.ugi</name> #Web接口访问的用户名和组的帐户设定
<value>supergroup</value>
</property>
</configuration>
[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop
[root@master hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@master hadoop]# vi mapred-site.xml
mapred-site.xml中
<configuration>
<property>
<name>mapreduce.framework.name</name> #mapreduce框架名称
<value>yarn</value>
<description>Theruntime framework for executing MapReduce jobs. Can be one of local, classic oryarn.</description>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
<description>MapReduce JobHistoryServer IPC host:port</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
<description>MapReduce JobHistoryServer Web UI host:port</description>
</property>
<property>
<name>mapred.remote.os</name>
<value>Linux</value>
</property>
<property>
<name>mapreduce.app-submission.cross-platform</name>
<value>true</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
/usr/hadoop-2.6.4/etc/hadoop,
/usr/hadoop-2.6.4/share/hadoop/common/*,
/usr/hadoop-2.6.4/share/hadoop/common/lib/*,
/usr/hadoop-2.6.4/share/hadoop/hdfs/*,
/usr/hadoop-2.6.4/share/hadoop/hdfs/lib/*,
/usr/hadoop-2.6.4/share/hadoop/mapreduce/*,
/usr/hadoop-2.6.4/share/hadoop/mapreduce/lib/*,
/usr/hadoop-2.6.4/share/hadoop/yarn/*,
/usr/hadoop-2.6.4/share/hadoop/yarn/lib/*
</value>
</property>
</configuration>
yarn-site.xml中
[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop
[root@master hadoop]# vi yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
<description>The hostname of theRM.</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>Shuffle service that needs to be set for Map Reduceapplications.</description>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>
/usr/hadoop-2.6.4/etc/hadoop,
/usr/hadoop-2.6.4/share/hadoop/common/*,
/usr/hadoop-2.6.4/share/hadoop/common/lib/*,
/usr/hadoop-2.6.4/share/hadoop/hdfs/*,
/usr/hadoop-2.6.4/share/hadoop/hdfs/lib/*,
/usr/hadoop-2.6.4/share/hadoop/mapreduce/*,
/usr/hadoop-2.6.4/share/hadoop/mapreduce/lib/*,
/usr/hadoop-2.6.4/share/hadoop/yarn/*,
/usr/hadoop-2.6.4/share/hadoop/yarn/lib/*
</value>
</property>
</configuration>
slaves中
[root@master hadoop]# vi slaves
slaver1
slaver2
拷贝hadoop安装文件到子节点
主节点上执行:
[root@master hadoop]# scp -r /usr/hadoop-2.6.4/ root@slaver1:/usr/
[root@master hadoop]# scp -r /usr/hadoop-2.6.4/ root@slaver2:/usr/
格式化主节点的namenode
主节点上进入hadoop目录
然后执行:
[root@master ~]#
[root@master hadoop-2.6.4]# ./bin/hadoop namenode -format
新版本用下面的语句不用hadoop命令了cd /usr/hadoop-2.6.4
[root@master ~]# cd /usr/hadoop-2.6.4
[root@master hadoop-2.6.4]# ./bin/hdfs namenode -format
启动hadoop
主节点上在hadoop-2.6.4目录下执行:
[root@master ~]# cd /usr/hadoop-2.6.4
[root@master hadoop-2.6.4]#./sbin/start-all.sh
主节点上jps进程有:
[root@master hadoop-2.6.4]# jps
NameNode
SecondaryNameNode
ResourceManager
jps
每个子节点上的jps进程有:
[root@slaver1 hadoop-2.6.4]# jps
DataNode
NodeManager
Jps
[root@slaver1 hadoop-2.6.4]# jps
DataNode
NodeManager
jps
如果这样表示hadoop集群配置成功
注:xml文件中的注释必须去掉,否则会报错。
使用VirtualBox虚拟机搭建hadoop运行环境,的更多相关文章
- virtualbox 虚拟3台虚拟机搭建hadoop集群
用了这么久的hadoop,只会使用streaming接口跑任务,各种调优还不熟练,自定义inputformat , outputformat, partitioner 还不会写,于是干脆从头开始,自己 ...
- Hadoop运行环境搭建
Hadoop运行环境搭建 更改为阿里的Centos7的yum源 #下载wget yum -y install wget #echo 下载阿里云的yum源配置 Centos-7.repo wget - ...
- 使用VirtualBox虚拟机搭建局域网(续)
最近家中Windows 10更新后抽风,最后不得不重装系统,原本配置好的开发环境全部要重装,也包括局域网搭建,但由于是家庭网络并非公司局域网,故旧文<使用VirtualBox虚拟机搭建局域网&g ...
- 使用VirtualBox虚拟机搭建局域网
参考资料: http://www.awaimai.com/995.html https://my.oschina.net/cofecafe1/blog/206535 最近公司局域网网络改造,在改造前已 ...
- 用三台虚拟机搭建Hadoop全分布集群
用三台虚拟机搭建Hadoop全分布集群 所有的软件都装在/home/software下 虚拟机系统:centos6.5 jdk版本:1.8.0_181 zookeeper版本:3.4.7 hadoop ...
- JDK+Tomcat搭建JSP运行环境--JSP基础
一.搭建JSP运行环境之前需要了解的基本知识 配置JSP运行环境之前,我们需要了解JSP的运行机制.只有了解JSP运行机制后,我们才能知道为什么要搭建JSP运行环境?如何去搭建JSP运行环境?为什么要 ...
- Ubuntu 12.04搭建hadoop单机版环境
前言: 本文章是转载的,自己又加上了一些自己的笔记整理的 详细地址请查看Ubuntu 12.04搭建hadoop单机版环境 Hadoop的三种运行模式 独立模式:无需任何守护进程,所有程序都在单个JV ...
- 【Hadoop】:Windows下使用IDEA搭建Hadoop开发环境
笔者鼓弄了两个星期,终于把所有有关hadoop的环境配置好了,一是虚拟机上的完全分布式集群,但是为了平时写代码的方便,则在windows上也配置了hadoop的伪分布式集群,同时在IDEA上就可以编写 ...
- 9款一键快速搭建PHP运行环境的好工具
9款一键快速搭建PHP运行环境的好工具 胡倡萌 2011/02/19 网络资源 77,063 1 内容提要: 建立一个PHP网站,首先需要搭建PHP的开发和运行环境,对于PHP初学者也是一个难 ...
随机推荐
- helm部署Redis哨兵集群
介绍 Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现.故障自动转移.配置中心和客户端通知. 如下图: Redis Sentinel 故障转移过程: 从这 ...
- poj 2777 Count Color(线段树(有点意思))
题目链接 http://poj.org/problem?id=2777 题意:题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位 ...
- poj 1062 昂贵的聘礼(floyd path的应用)
题目链接:http://poj.org/problem?id=1062 题意就不解释了中问题. 这题用dfs也行.但是感觉还是floyd比较好一点主要是他们交易是有条件的交易总的等级差不能超过m 所以 ...
- 【Offer】[58-2] 【左旋转字符串】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"a ...
- mysql之innodb存储引擎---数据存储结构
一.背景 1.1文件组织架构 首先看一下mysql数据系统涉及到的文件组织架构,如下图所示: msyql文件组织架构图 从图看出: 1.日志文件:slow.log(慢日志),error.log(错误日 ...
- MySQL中boolean类型设置
在用MySQL设置boolean的时候发现跟本就没有这种类型,后来查资料才知道: boolean类型用tinyint表示, MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,bool ...
- 基础知识:Mysql基本操作命令
启动mysql : mysql -hlocalhost -uroot -p 创建数据库:create database 数据库名字; 指定要操作的数据库:use 数据库名字; 查看数据表建表语句:s ...
- App 冷启动与热启动及启动白屏优化
介绍一下 app 冷启动和热启动方式来实现 app 秒开的效果.那么,先来看看什么叫冷启动和热启动. 冷启动:指 app 被后台杀死后,在这个状态打开 app,这种启动方式叫做冷启动. 热启动:指 a ...
- 【ThinkPHP】API控制器中加入析构函数
<?php namespace app\api\controller; use think\Controller; class User extends Controller { public ...
- Spring Boot 利用 nginx 实现生产环境的伪热更新
当我们在服务器部署Java程序,特别是使用了 Spring Boot 生成单一 Jar 文件部署的时候,单一文件为我们开发单来的极大的便利性,保障程序的完整性.但同时对我们修改程序中的任何一处都带来重 ...