声明:作者原创,转载注明出处。

作者:帅气陈吃苹果

一、服务器环境

主机名 IP 用户名 密码 安装目录
master188 192.168.29.188 hadoop hadoop /home/hadoop/
master189 192.168.29.189 hadoop hadoop /home/hadoop/
slave190 192.168.29.190 hadoop hadoop /home/hadoop/

二、集群规划

master188 master189 slave190
NameNode NameNode
DataNode DataNode DataNode
Zookeeper Zookeeper Zookeeper
ResourceManager ResourceManager
NodeManager NodeManager NodeManager
HMaster HMasetr
RegionServer RegionServer RegionServer

JDK、Hadoop、HBase版本兼容性(NS:不兼容;NT:未测试;Y:兼容):

HBase Version JDK 6 JDK 7 JDK 8
2.0 X X Y
1.3 X Y Y
1.2 X Y Y
1.1 X Y NT
1.0 X Y NT
0.98 Y Y NT
0.94 Y Y N
Hadoop\HBase HBase-1.1.x HBase-1.2.x HBase-1.3.x HBase-2.0.x
Hadoop-2.0.x-alpha X X X X
Hadoop-2.1.0-beta X X X X
Hadoop-2.2.0 NT X X X
Hadoop-2.3.x NT X X X
Hadoop-2.4.x S S S X
Hadoop-2.5.x S S S X
Hadoop-2.6.0 X X X X
Hadoop-2.6.1+ NT S S S
Hadoop-2.7.0 X X X X
Hadoop-2.7.1+ NT S S S
Hadoop-2.8.0 X X X X
Hadoop-2.8.1 X X X
Hadoop-3.0.0-alphax NT NT NT NT

考虑到HBase与JDK、Hadoop各版本兼容性,我们采用的组件版本如下:

组件 版本
JDK 1.8
Hadoop 2.6.5
Zookeeper 3.4.11
HBase 1.3.1

三、安装配置Zookeeper

1、下载及安装

下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz

在master188机器上,下载后解压到/home/hadoop/目录下:

tar -zxvf zookeeper-3.4.11.tar.gz -C /home/hadoop/

2、拷贝 zoo_sample.cfg

进入zookeeper的conf目录,拷贝zoo_sample.cfg并重命名为zoo.cfg

cd zookeeper-3.4.11/conf/

cp zoo_sample.cfg zoo.cfg

3、修改 zoo.cfg

vi zoo.cfg

修改如下,若原文件没有dataDir则直接添加:

dataDir=/home/hadoop/zookeeper-3.4.11/data/zkData

//在最后添加,指定zookeeper集群主机及端口,机器数必须为奇数
server.1=master188:2888:3888
server.2=master189:2888:3888
server.3=slave190:2888:3888

4、创建并编辑myid

//在zookeeper根目录下创建zoo.cfg中配置的目录
mkdir data/zkData/ -p //创建并编辑文件
vi myid //输入1,即表示当前机器为在zoo.cfg中指定的server.1
1 //保存退出
:wq

5、拷贝zookeeper到其他机器

上述操作是在master188机器上进行的,要将zookeeper拷贝到其他zookeeper集群机器上:

cd /home/hadoop

scp -r zookeeper-3.4.11/ hadoop@master189:/home/hadoop/

scp -r zookeeper-3.4.11/ hadoop@slave190:/home/hadoop/

集群中各组件的安装目录最好保持一致。

6、修改其他机器的myid文件

myid文件是作为当前机器在zookeeper集群的标识,这些标识在zoo.cfg文件中已经配置好了,但是之前在master188这台机器上配置的myid为1,所以还需要修改其他机器的myid文件:

//在master189机器上
echo 2 > /home/hadoop/zookeeper-3.4.11/data/zkData/myid
//在slave190机器上
echo 3 > /home/hadoop/zookeeper-3.4.11/data/zkData/myid

7、启动zookeeper集群

cd zookeeper-3.4.11/bin/
//分别在master188、master189、slave190上启动
./zkServer.sh start //查看状态
./zkServer.sh status

三台机器的zookeeper状态必须只有一个leader,其他都是follower

//查看进程,若有QuorumpeerMain,则启动成功
jps

四、安装配置Hadoop

1、下载及安装

下载地址:http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz

在master88机器上,解压到/home/hadoop/目录下:

tar -zxcf hadoop-2.6.5.tar.gz -C /home/hadoop/

2、配置

进入配置文件目录,修改配置文件

cd hadoop-2.6.5/etc/hadoop/

1)vi hadoop-env.sh

配置JDK安装路径:

JAVA_HOME=/opt/jdk

2)vi core-site.xml
<configuration>
<!-- hdfs地址,ha模式中是连接到nameservice -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录,也可以单独指定 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.6.5/tmp</value>
</property> <!-- 指定ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
<property>
<name>ha.zookeeper.quorum</name>
<value>master188:2181,master189:2181,slave190:2181</value>
</property> </configuration>
3)vi hdfs-site.xml
<configuration>
<!-- 指定副本数,不能超过机器节点数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property> <!-- 为namenode集群定义一个services name -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property> <!-- nameservice 包含哪些namenode,为各个namenode起名 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>master188,master189</value>
</property> <!-- 名为master188的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
<property>
<name>dfs.namenode.rpc-address.ns1.master188</name>
<value>master188:9000</value>
</property> <!-- 名为master189的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
<property>
<name>dfs.namenode.rpc-address.ns1.master189</name>
<value>master189:9000</value>
</property> <!--名为master188的namenode的http地址和端口号,用来和web客户端通讯 -->
<property>
<name>dfs.namenode.http-address.ns1.master188</name>
<value>master188:50070</value>
</property> <!-- 名为master189的namenode的http地址和端口号,用来和web客户端通讯 -->
<property>
<name>dfs.namenode.http-address.ns1.master189</name>
<value>master189:50070</value>
</property> <!-- namenode间用于共享编辑日志的journal节点列表 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master188:8485;master189:8485;slave190:8485/ns1</value>
</property> <!-- 指定该集群出现故障时,是否自动切换到另一台namenode -->
<property>
<name>dfs.ha.automatic-failover.enabled.ns1</name>
<value>true</value>
</property> <!-- journalnode 上用于存放edits日志的目录 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/hadoop-2.6.5/tmp/data/dfs/journalnode</value>
</property> <!-- 客户端连接可用状态的NameNode所用的代理类 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property> <!-- 一旦需要NameNode切换,使用ssh方式进行操作 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property> <!-- 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property> <!-- connect-timeout超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
4)vi mapred-site.xml
<!-- 采用yarn作为mapreduce的资源调度框架 -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5)vi yarn-site.xml
<configuration>

  <!-- 启用HA高可用性 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property> <!-- 指定resourcemanager的名字 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property> <!-- 使用了2个resourcemanager,分别指定Resourcemanager的地址 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property> <!-- 指定rm1的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master188</value>
</property> <!-- 指定rm2的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master189</value>
</property> <!-- 指定当前机器master188作为rm1 -->
<property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm1</value>
</property> <!-- 指定zookeeper集群机器 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master188:2181,master189:2181,slave190:2181</value>
</property> <!-- NodeManager上运行的附属服务,默认是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property> </configuration>
6)vi slaves
master188
master189
slave190

3、拷贝hadoop到其他机器

1)拷贝
scp -r hadoop-2.6.5 hadoop@master189:/home/hadoop/

scp -r hadoop-2.6.5 hadoop@slave190:/home/hadoop/

2)修改yarn-site.xml

在master189机器,即ResourceManager备用主节点上修改如下属性,表示当前机器作为rm2::

  <property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm2</value>
</property>

同时删除slave190机器上的该属性对,因为slave190机器并不作为ResourceManager。

3、启动Hadoop

1)启动Journalnode
cd hadoop-2.6.5/sbin/

./hadoop-daemon.sh start 

//查看进程JouralNode是否启动
jps
2)格式化 NameNode和ZKFC

在master188机器上,执行格式化操作:

cd hadoop-2.6.5/bin

./hdfs namenode -format

./hdfs zkfc -formatZK

3)备用主节点同步主节点元数据

在master189(备用主节点)机器上,执行同步操作:

cd hadoop-2.6.5/bin

./hdfs namenode -bootstrapStanby

4)安装fuster

若服务器是最小化安装centeros时,有可能系统没有fuster程序,那么跳过这个安装步骤直接进行后面的操作时,将有可能出现以下问题:

master188作为主节点时,kill掉master188上的NameNode和ResourceManager进程时,可以实现故障转移,master189将从stanby状态自动变成active状态;但是当master189作为主节点时,若kill掉master189上的进程,master188上的进程状态却还是stanby,并不能实现故障自动转移。原因是我们在 hdfs-site.xml中配置了当集群需要故障自动转移时采用SSH方式进行,而因为缺少fuster程序,将在zkfc的日志文件中发现如下错误:

PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 9000 via ssh: bash: fuser: 未找到命令
Unable to fence service by any configured method
java.lang.RuntimeException: Unable to fence NameNode at master189/192.168.29.189:9000

提示未找到fuster程序,导致无法进行fence,所以可以通过如下命令来安装,Psmisc软件包中包含了fuster程序:

//分别在master188、master189、slave190上执行
sudo yum install psmisc
5)启动HDFS、YARN、ZookeeperFailoverController

在master188机器上:

cd hadoop-2.6.5/sbin

./start-dfs.sh

//验证,显示NameNode和DataNode
jps ./start-yarn.sh //验证,显示ResourceManager和NodeManager
jps ./hadoop-daemon.sh start zkfc //验证,显示ZookeeperFailoverController
jps

在master189机器上,启动ResourceManager,备用主节点的ResourceManager需要手动启动:

cd hadoop-2.6.5/sbin

yarn-daemon.sh start resourcemanager

6)查看Namenode、ResourceManager状态

在master188机器上执行:

hdfs haadmin -getServiceState master188
yarn rmadmin -getServiceState rm1 hdfs haadmin -getServiceState master189
yarn rmadmin -getServiceState rm2

也可以通过Web界面来查看,浏览器中输入 ip:50070 查看HDFS,输入 ip:8088/cluster/cluster 查看YARN。

7)测试高可用
a.主节点--->备用主节点

kill掉主节点的namenode,查看备用主节点的namenode状态是否切换为active;

kill掉主节点的ResourceManager,查看备用主节点的ResourceManager是否切换为active;

b.备用主节点--->主节点

若上述操作执行成功,那么再测试反向故障自动转移

先启动被杀死的原主节点的namenode和ResourceManager

hadoop-daemon.sh start namenode 

yarn-daemon.sh start resourcemanager

再kill备用主节点的namenode和ResourceManager,查看主节点的状态,若能切换为active,那么Hadoop HA高可用集群搭建完成。

五、安装配置HBase

1、下载及安装

下载地址:http://mirrors.hust.edu.cn/apache/hbase/1.3.1/hbase-1.3.1-bin.tar.gz

在master188机器上,解压到/home/hadoop/目录下:

tar -zxvf hbase-1.3.1-bin.tar.gz 

2、配置

进入hbase-1.3.1/conf/目录,修改配置文件:

cd hbase-1.3.1/conf/

1)vi hbase-env.sh
//配置JDK
export JAVA_HOME=/opt/jdk //保存pid文件
export HBASE_PID_DIR=/home/hadoop/data/hbase/pids //修改HBASE_MANAGES_ZK,禁用HBase自带的Zookeeper,因为我们是使用独立的Zookeeper
export HBASE_MANAGES_ZK=false
2)vi hbase-site.xml
<configuration>
<!-- 设置HRegionServers共享目录,请加上端口号 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://master188:9000/hbase</value>
</property> <!-- 指定HMaster主机 -->
<property>
<name>hbase.master</name>
<value>hdfs://master188:60000</value>
</property> <!-- 启用分布式模式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property> <!-- 指定Zookeeper集群位置 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>master188:2181,master189:2181,slave190:2181</value>
</property> <!-- 指定独立Zookeeper安装路径 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/zookeeper-3.4.11</value>
</property> <!-- 指定ZooKeeper集群端口 -->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
</configuration>
3)vi regionservers

修改regionservers文件,因为当前是使用独立的Zookeeper集群,所以要指定RegionServers所在机器:

master188
master189
slave190
4)创建pid文件保存目录

在/home/hadoop/目录下:

mkdir data/hbase/pids -p

3、拷贝HBase到其他机器

cd /home/hadoop/

scp -r hbase-1.3.1 hadoop@master189:/home/hadoop/

scp -r  hbase-1.3.1 hadoop@slave190:/home/hadoop/

4、启动HBase

在主节点上启动HBase(这里的主节点是指NameNode状态为active的节点,而非指文中对本实验的机器声明):

cd hbase-1.3.1/bin

./start-hbase.sh

//查看HMaster、Regionserver进程是否启动
jps

注意:此时Hadoop集群应处于启动状态,并且是在主节点执行start-hbase.sh启动HBase集群,否则HMaster进程将在启动几秒后消失,而备用的HMaster进程需要在备用主节点单独启动,命令是:./hbase-daemon.sh start master

在备用主节点启动HMaster进程,作为备用HMaster:

cd hbase-1.3.1/bin

./hbase-daemon.sh start master

5、HA高可用测试

在浏览器中输入 ip:16010 ,查看主节点和备用主节点上的HMaster的状态,在备用主节点的web界面中,可以看到“Current Active Master: master188”,表示当前HBase主节点是master188机器;

主节点--->备用主节点

这里的主节点指使用start-hbase.sh命令启动HBase集群的机器

kill掉主节点的HMaster进程,在浏览器中查看备用主节点的HBase是否切换为active;

若上述操作成功,则在主节点启动被杀死的HMaster进程:

cd hbase-1.3.1/bin/

./hbase-daemon.sh start master

然后,kill掉备用主节点的HMaster进程,在浏览器中查看主节点的HBase是否切换为active,若操作成功,则HBase高可用集群搭建完成;

6、HBase基本操作

//启动HBase
[root@vnet ~] start-hbase.sh //进入HBase Shell
[root@vnet ~] hbase shell //查看当前HBase有哪些表
hbase(main):> list //创建表t_user,cf1和cf2是列族,列族一般不超过3个
hbase(main):> create 't_user','cf1','cf2' //获得表t_user的描述信息
hbase(main):> describe 't_user' //禁用表
hbase(main):> disable 't_user' //删除表,删除表之前要先把表禁用掉
hbase(main):> drop 't_user' //查询表是否存在
hbase(main):> exists 't_user' //查看全表数据
hbase(main):> scan 't_user' //插入数据,分别是表名、key、列(列族:具体列)、值。HBase是面向列的数据库,列可无限扩充
hbase(main):> put 't_user' ,'001','cf1:name','chenxj'
hbase(main):> put 't_user' ,'001','cf1:age','18'
hbase(main):> put 't_user' ,'001','cf2:sex','man'
hbase(main):> put 't_user' ,'002','cf1:name','chenxj'
hbase(main):> put 't_user' ,'002','cf1:address','fuzhou'
hbase(main):> put 't_user' ,'002','cf2:sex','man' //获取数据,可根据key、key和列族等进行查询
hbase(main):> get 't_user','001'
hbase(main):> get 't_user','002','cf1'
hbase(main):> get 't_user','001','cf1:age'

六、集群启动结果

Hadoop + Zookeeper + HBase 高可用集群启动后,进程状态如下:

描述 master188 master189 slave190
HDFS主 NameNode NameNode
HDFS从 DataNode DataNode DataNode
YARN主 ResourceManager ResourceManager
YARN从 NodeManager NodeManager NodeManager
HBase主 HMaster HMaster
HBase从 HRegionServer HRegionServer HRegionServer
Zookeeper独立进程 QuorumPeerMain QuorumPeerMain QuorumPeerMain
NameNodes数据同步 JournalNode JournalNode JournalNode
主备故障切换 DFSZKFailoverController DFSZKFailoverController

七、总结

需要注意的地方:

1)备用节点上的NameNode、ResourceManager、HMaster均需单独启动;

hadoop-daemon.sh start namenode

yarn-daemon.sh start resourcemanager

hbase-daemon.sh start master 

2)可以使用-forcemanual参数强制切换主节点与备用主节点,但强制切换后集群的自动故障转移将会失效,需要重新格式化zkfc:hdfs zdfc -formatZK;

hdfs haadmin -transitionToActive/transitionToStandby  -forcemanual  master189
yarn rmadmin -transitionToActive/transitionToStandby -forcemanual rm2

3)在备用主节点同步主节点的元数据时,主节点的HDFS必须已经启动;

4)无法查看standby状态的节点上的hdfs;

5)格式化namenode时要先启动各个JournalNode机器上的journalnode进程:hadoop-daemon.sh start journalnode

6)若遇到问题,可以先考虑是哪个组件出现问题,然后查看该组件或与该组件相关的组件的日志信息;若各组件web页面无法访问,或存在其他连接问题,可以从「防火墙是否关闭」、「端口是否被占用」、「SSH」、「集群机器是否处于同一网段」内等角度考虑;

Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)的更多相关文章

  1. Hadoop HA高可用集群搭建(2.7.2)

    1.集群规划: 主机名        IP                安装的软件                            执行的进程 drguo1  192.168.80.149 j ...

  2. Zookeeper(四)Hadoop HA高可用集群搭建

    一.高可就集群搭建 1.集群规划 2.集群服务器准备 (1) 修改主机名(2) 修改 IP 地址(3) 添加主机名和 IP 映射(4) 同步服务器时间(5) 关闭防火墙(6) 配置免密登录(7) 安装 ...

  3. Hadoop HA 高可用集群搭建

    一.首先配置集群信息 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 .tar.gz -C /usr/hadoop/ 2.进入/usr/hadoop/zo ...

  4. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  5. Hadoop HA 高可用集群的搭建

    hadoop部署服务器 系统 主机名 IP centos6.9 hadoop01 192.168.72.21 centos6.9 hadoop02 192.168.72.22 centos6.9 ha ...

  6. HDFS-HA高可用集群搭建

    HA高可用集群搭建 1.总体集群规划 在hadoop102.hadoop103和hadoop104三个节点上部署Zookeeper. hadoop102 hadoop103 hadoop104 Nam ...

  7. hadoop高可用集群搭建小结

    hadoop高可用集群搭建小结1.Zookeeper集群搭建2.格式化Zookeeper集群 (注:在Zookeeper集群建立hadoop-ha,amenode的元数据)3.开启Journalmno ...

  8. linux -- 基于zookeeper搭建yarn的HA高可用集群

    linux -- 基于zookeeper搭建yarn的HA高可用集群 实现方式:配置yarn-site.xml配置文件 <configuration> <property> & ...

  9. centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

    centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课 heartbeat是Linu ...

随机推荐

  1. [ Java面试题 ] 集合篇

    1.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的 ...

  2. Ubuntu编译安装crtmp-server

    下载源码 从GitHub上下载:https://github.com/j0sh/crtmpserver.git 编译安装 apt-get install cmake apt-get install l ...

  3. Postgresql中临时表(temporary table)的特性和用法

    熟悉Oracle的人,相比对临时表(temporary table)并不陌生,很多场景对解决问题起到不错的作用,开源库Postgresql中,也有临时表的概念,虽然和Oracle中临时表名字相同,使用 ...

  4. 循环中else的用法

    name = 'hello' for x in name: print(x) if x == 'l': break #退出for循环 else: print("==for循环过程中,如果没有 ...

  5. .NET开发微信小程序-上传图片到服务器

    1.上传图片分为几种: a:上传图片到本地(永久保存) b:上传图片到本地(临时保存) c:上传图片到服务器 a和b在小程序的api文档里面有.直接说C:上传图片到服务器 前端代码: /* 上传图片到 ...

  6. Oracle 服务启动关闭

    有没有感觉到,自从装上Oracle之后,电脑变卡了?卡是正常的,oracle作为大型数据库软件,运行起来是非常吃内存的. 所以对于自用的电脑来说,不使用Oracle的时候,应该把Oracle的一系列服 ...

  7. Java 8 基础API的一些小的该进

    Java8是一个较大改变的版本,包含了API和库方面的修正,它还对我们常用的API进行很多微小的调整, 下面我会带你了解字符串.集合.注解等新方法. 字符串 经常会遇到这样一种情况, 需要将一组字符串 ...

  8. 对混合数值,字符,null的字段进行排序

    今天有个需求是进行排序.  这一列值是字符串类型的, 但是里面有数值型 比如"1" 和null类型的.  实现效果是需要 数值型的先按照数值的方式先排,然后字符串按照字符传排,最后 ...

  9. 数据结构 之 二叉堆(Heap)

    注:本节主要讨论最大堆(最小堆同理). 一.堆的概念     堆,又称二叉堆.同二叉查找树一样,堆也有两个性质,即结构性和堆序性.     1.结构性质:     堆是一棵被完全填满的二叉树,有可能的 ...

  10. 2018 Unite大会——《使用UPA工具优化项目》演讲实录

    2018年5月11日至13日,腾讯WeTest与Unity联合打造的移动游戏性能分析工具(Unity Performance Analysis,以下称为UPA)正式亮相2018 Unite大会,为Un ...