阿里云架构师解读四大主流游戏架构
游戏 行业是阿里云最早聚焦的行业之一,近年来 游戏 行业的变化、云计算产品技术的变化都与日俱进。随着行业业务的变化、技术架构的演进以及阿里云产品的迭代演进,整体的产品技术选型在不同的 游戏 场景、业务场景也不尽相同。本文将聚焦阿里云弹性计算产品在 游戏 行业的方案实践经验。
当前, 游戏 行业的各种场景和行业发展密不可分。简单回顾电子 游戏 的发展,80年代的黑白机,90年代的PC单机 游戏 ,00年代前夕随着互联网的发展网络 游戏 开始盛行,2010年后随着移动设备的逐渐普及,手游在国内开始兴起。
从 游戏 终端来区别,主要有:主机 游戏 (往往是3A 游戏 )、PC 游戏 、移动 游戏 和网页 游戏 等。目前出现跨平台多端 游戏 ,以及云 游戏 化的趋势。
关于 游戏 的品类区别会有非常多的维度:RPG(角色扮演)、MOBA类、竞技类、FPS(射击类)、休闲类、卡牌类、棋牌类、SLG(策略类)等等。目前有多品类融合玩法裂变的趋势。
随着国内防沉迷、版号因素,近年来 游戏 行业诞生了越来越多的精品 游戏 ,出海全球化乃至区域化,以及整体存量用户增速放缓,长线运营、精细运营以及私域社区等运营方式也在悄然变化。
不同的业务场景技术架构不尽相同,如竞技类 游戏 和卡牌类 游戏 对计算的需求就有所区别,云 游戏 与常规的网络 游戏 架构也有所区别。这里主要从 游戏 服和 游戏 平台、大数据、云 游戏 这四个目前常见的场景简单介绍其架构。
游戏 服,从 游戏 类型来看有RPG、FPS、MOBA、SLG、棋牌、休闲等等;从 游戏 平台来看通常有主机、手机、PC等;从业务发行来看有全球、国内、海外,从部署架构来看有集中部署和分区部署;从技术架构来看, 游戏 行业也有逐渐分层解耦的趋势,但与互联网应用相比,有一定其独特性。
因为 游戏 的强交互性特点, 游戏 技术架构与其他互联网应用相比有一定独特性。 游戏 需要保持会话连接,也就是从一个客户端到服务端的长连接,便于对客户端中玩家的操作、行为等进行及时的反馈以及推送给共同 游戏 或对战的其他玩家,所以 游戏 普遍对网络质量更加敏感,网络质量较差的情况会使长连接断开或重连,引起玩家掉线。 游戏 也需要保持会话的状态,既服务端会保持一份玩家的实体,当玩家进行操作时,下次通信的数据会依赖之前的通信的数据,这也是一些MMO(多人在线)大型 游戏 对网络吞吐性能要求较高的原因之一。再比如FPS、MOBA类等多人对战类 游戏 ,交互性更强,对网络延迟容忍度更低,要求低延迟。因为 游戏 需要比较高密度的记录玩家的操作以及结果,所以有频繁写入数据的特点,这类场景需要较强的IO性能。因为 游戏 强交互性、低延迟的特点,其技术架构也和互联网应用不同,在逐渐分层解耦的同时,需要保证 游戏 玩家的交互效果,同时也会依赖到底层服务器的计算能力。
这些都是 游戏 场景普遍存在的特点:长连接保持会话、保持状态、低延迟网络、高IO吞吐、高计算性能。
游戏 的部署架构会结合 游戏 业务特点、 游戏 运营需求来制定 游戏 服务,有分区分服、全区全服业务逻辑,分区分服还是全区全服,最大的架构差异在于数据是不是一套。而从部署方式看,主要是集中式部署和分区域部署。
集中部署就是不论 游戏 玩家在哪里, 游戏 服务集中在一个区域,适合对网络延迟要求通常不高的 游戏 类型,如休闲类;分区部署是指 游戏 服务器根据 游戏 玩家地域分布,分区域部署,方便就近接入,适合对网络延迟要求较高的 游戏 类型,如MOBA、FPS类。
典型架构
MMO类有高并发特点,大量玩家并发的高计算量负载对服务器的计算能力和稳定性有着极高的要求。同时MMO类 游戏 有着比较强的PVE或PVP特性,对网络延迟的容忍度较低。
其中网关服务器负责所有网络数据包的转发,通常是网络负载较集中的点,对于网络吞吐能力要求较高。单个 游戏 区承载玩家数量高,逻辑服务器通常按照场景地图来划分,规模再大会通过分区的方式实现。
数据中心服务器负责缓存玩家数据并异步入库,保障玩家客户快速获取和写入数据,对于可用性要求较高,需要配合应用层实现数据容错机制。
日志服务器承载了大区所有业务行为的日志收集及处理的压力,对磁盘写入性能要求较高,通常采用多台分组方式实现。
(1)MMO 游戏 服性能与稳定需求,建议使用最第7代ECS实例,根据实际需求选型c计算型(CPU与内存配比1:2)/g通用型(1:4)/r内存型(1:8),Intel Ice Lake 29GHz基频35GHz睿频提供超高性能,能更好地优化 游戏 体验。
(2)异步落库以及日志服务器,对于磁盘读写性能要求高的场景,建议云上使用ESSD PL 0/1/2/3根据业务性能需要选择,避免磁盘读写瓶颈。
(3)在 游戏 日常版本更新中,需要各个地域Region镜像的快速复制,基于ESSD快照异地复制的能力,能够提升镜像复制效率。
(4)分区分服等场景往往需要快速地开服滚服合服,通过CADT云速搭、ESS弹性伸缩、OOS运维编排、ROS资源编排等云上运维工具搭配产品使用,能够提升云上运维效率。
ii FPS、MOBA类 游戏 架构介绍
MOBA类 游戏 主要包括PVP系统、PVE系统、 游戏 平台等几个主要部分,其中PVP战斗是MOBA/FPS 游戏 的核心。
PVP、PVE、 游戏 平台功能部署于同一VPC中,构成 游戏 大区;战斗服务器(往往)单独跨地域部署。
游戏 客户端首先接入到登录服务器中,完成登录认证、计费等 游戏 平台逻辑。为避免单点问题,所以 游戏 平台服务往往需要高可用方案。可利用云上高可用方案,包括便捷的运维工具满足业务高可用需求。
FPS/MOBA竞技 游戏 ,往往对延迟特别敏感,可以想象,竞技类 游戏 中对战的 游戏 场景:玩家操控人物,在地图里步伐飘逸,枪声密集,每一颗子弹都是一次时间加上空间的矢量计算,而且需要在主进程中完成计算,那么算力需求就随着房间玩家数量上升而指数爆炸,5V5的房间和大房间100人(吃鸡)对算力的需求完全不同。
游戏 这部分重算力场景,推荐阿里云7代高主频或七代实例,更高的单核性能提供更好的战斗效果。
战斗房间类 游戏 ,因为业务本身峰谷特性,灵活地使用云上资源的弹性能力,往往会较好地优化整体的资源使用成本。阿里云弹性计算本身提供了非常灵活的付费方式,包括常规的按量实例、包月包年实例、以及通过节省计划/预留实例券去抵扣按量实例资源,兼顾资源灵活使用的同时达到更优的成本。
此外,为更进一步释放开发运维的效率,当前一些 游戏 也采用了容器化技术架构,阿里云的ACK+ECS/ECI弹性容器实例组合搭配使用,更进一步释放了基础资源的灵活性和弹性能力。
业务场景
游戏 平台(不限于FPS、MOBA类)主要提供的服务:官网、客服、注册、登录、充值、兑换、商城、推送、公告、社区、SDK及邮件、短信等公共服务;包括内容审核、视频录制、弹幕、转码、剪辑、RTC这些业务需要的基础服务,以及运维监控、发布平台、测试平台这些运维等平台服务。
这部分更接近于通用的互联网技术架构,以服务为颗粒度解耦,接入->网关->应用->数据库。
技术特点
这往往通常需要构建高可用基础架构来提升稳定性,业务突发期往往需要一定的弹性能力。相比于 游戏 服务这部分容器化就更加普及,也更容易通过云上的比如弹性容器实例去应对流量峰值场景。在视频录制场景,对实时性要求较高时,往往会基于GPU能力构建,这部分阿里云也提供了vGPU/cGPU能力,释放GPU的灵活性。
大数据是当前 游戏 业务经营、 游戏 运营主要的技术手段,主要面向平台数据运营、 游戏 数据分析、广告转化分析、安全运营分析等 游戏 核心运营场景。不同的场景对实时性要求不同,实时查询检索通常是经营分析、客户受理、玩家监测、在线等场景;离线报表通常是玩家行为分析、用户画像、特征挖掘等场景。
总体而言,实时性业务更多是业务查询类、简单计算类任务,比如买量转化的分析;离线类基本是分析类、预测类任务,比如 游戏 玩法分析。
从技术架构来看,得益于开源社区技术栈的高丰富度,大数据具体的技术选择非常之多,整体从存算一体到存算分离,也诞生像数据仓库、数据湖乃至湖仓一体等概念。
从数据架构流程来看,从数据源->数据采集、传输->数据计算、存储->数据应用,其中可选看技术方案也需要因地制宜。
从部署架构来看,不同的 游戏 公司处在不同的数据建设阶段,会有不同的选择倾向,包括完全自建、基于云自建大数据、基于云上托管、以及利用更多云上成熟的产品技术去丰富整体的大数据能力集,而后者也成为越来越多客户的选择。
拿云上大数据方案举例来讲,比如实时计算部分,选择SLS采集、Kafka数据网关通道,通过Flink做数据计算,通过ES或CK做数据分析,通过ADB以及QuickBI做数据应用展示。离线方案通过OSS做冷数据存储,Spark、Hive、HDFS等组件做数据计算存储,通过CK汇聚分析,通过Dataworks做数据应用。
具体计算存储的产品选型,主要根据不同的业务特性以及大数据应用特性来区分,根据数据容量、IOPS、吞吐、读写特点以及性价比来选择。
如刚刚举例的实时计算/近实时计算场景,Flink具备高性能、低延迟特点,所以是计算密集、网络性能高场景,推荐选型七代ECS实例或6代增强实例;如HDFS需要超大存储容量,高吞吐,推荐D系列本地盘实例,如D2S存储型本地盘实例。Remote Shuffle Service等处理结果多的场景,读写处理频繁如大量的join计算,需要综合来看计算、网络、存储性能以及综合成本来选择通用实例(如第7代ECS实例)或i系列本地盘实例。所以,最终在云上的资源选型,在性能满足的前期下,需要评估通过网络传输数据成本高(云盘),还是就地取材计算成本高(本地盘),不同模型、不同量级选择不同。
从内存处理(成本最高、性能最好、存储容量最小)、SSD本地盘、HDD本地盘、ESSD云盘、OSS对象存储(成本最优、性能一般、存储容量最大),逐渐分层解耦,还带来一个好处:充分释放了云上弹性的能力,可以利用更轻巧的弹性计算产品(如SPOT抢占式实例方式,或ECI容器实例)进行大数据计算,达到更好的弹性能力去满足业务需求的同时也能节约更多的成本。
云 游戏 主要分终端和云端。终端部分基于Windows、iOS、Linux等操作系统的终端设备包括手机、平板、电脑、电视机、VR一体机等。云端架构主要是 游戏 应用层、云 游戏 平台层、IaaS基础资源层,应用层包括PC 游戏 、手游、VR 游戏 、H5 游戏 等多种类型的 游戏 应用;平台层云 游戏 必须的运营平台、支撑平台、流化技术平台等;IaaS基础资源层包括基础网络、基于X86架构以及ARM架构的GPU服务器。
云 游戏 落地,在技术上也经历了诸多挑战,为满足端到端高性能低时延,网络调度、指令串流、编解码、多终端的SDK适配等等都是云 游戏 场景中不可避免的技术问题。
对于云端算力来讲,阿里云解决了云端渲染、串流以及编解码问题,并通过全系列GPU产品来满足云手游、端游、VR乃至企业级视觉渲染场景的需求。
总结来讲,阿里云弹性计算通过云上的串流、编码加速、渲染加速等全套的技术帮助 游戏 客户给云 游戏 玩家提供更好的性能体验,通过基于阿里云全球数据中心可以帮助云 游戏 客户覆盖更多的用户,通过GPU多种产品形态和整体的弹性能力,也帮助到 游戏 客户去更快捷更灵活的构建其云 游戏 业务。
阿里云通过多年的技术积累和持续的运营,提供了大规模的基础设施云服务,目前在全球部署了26个地域、82个可用区,通过优异稳定的性能表现帮助 游戏 客户高效稳定地运行 游戏 业务,为玩家提供极致顺滑的 游戏 体验,并通过技术手段不断地帮助 游戏 客户优化用云成本。
国内的业务出海、 游戏 出海也是现阶段大的趋势之一,很多 游戏 公司已经把出海从业务可选项变成了必选项之一。在2022年3月,阿里云上线了韩国和泰国两大Region,能够为本地化的 游戏 业务提供更流畅、更稳定的 游戏 体验,以此希望能在 游戏 客户出海的业务领域,提供更多的帮助。
当然,作为内容与 科技 两大热门领域的交叉领域, 游戏 产业日新月异,架构也随着前端业务的需要不断改变。阿里云弹性计算也针对 游戏 厂商的不同架构,陆续推出了不同的云服务器类型和付费方式,以及云上运维套件,以帮助客户降本增效。
原文链接:http://clickaliyuncom/m/1000336551/
阿里云,阿里巴巴集团旗下云计算品牌,其功能在于:
1、阿里云服务着制造、金融、政务、交通、医疗、电信、能源等众多领域的领军企业,包括中国联通、12306、中石化、中石油、飞利浦、华大基因等大型企业客户,以及微博、知乎、锤子科技等明星互联网公司;
2、阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本;
3、2017年1月,阿里巴巴成为奥运会“云服务”及“电子商务平台服务”的官方合作伙伴,阿里云将为奥运会提供云计算和人工智能技术。
阿里云,阿里巴巴集团旗下云计算品牌,全球卓越的云计算技术和服务提供商。创立于2009年,在杭州、北京、硅谷等地设有研发中心和运营机构。
请看下面这张图:
狭义的Hadoop 也就是最初的版本:只有HDFS Map Reduce
后续出现很多存储,计算,管理 框架。
如果说比较的话就 Hadoop Map Reduce 和 Spark 比较,因为他们都是大数据分析的计算框架。
Spark 有很多行组件,功能更强大,速度更快。
1、解决问题的层面不一样
首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务器硬件。
同时,Hadoop还会索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度。Spark,则是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。
2、两者可合可分
Hadoop除了提供为大家所共识的HDFS分布式数据存储功能之外,还提供了叫做MapReduce的数据处理功能。所以这里我们完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理。
相反,Spark也不是非要依附在Hadoop身上才能生存。但如上所述,毕竟它没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作。这里我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台。但Spark默认来说还是被用在Hadoop上面的,毕竟,大家都认为它们的结合是最好的。
以下是从网上摘录的对MapReduce的最简洁明了的解析:
3、Spark数据处理速度秒杀MapReduce
Spark因为其处理数据的方式不一样,会比MapReduce快上很多。MapReduce是分步对数据进行处理的: ”从集群中读取数据,进行一次处理,将结果写到集群,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群,等等…“ Booz Allen Hamilton的数据科学家Kirk Borne如此解析。
反观Spark,它会在内存中以接近“实时”的时间完成所有的数据分析:“从集群中读取数据,完成所有必须的分析处理,将结果写回集群,完成,” Born说道。Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍。
如果需要处理的数据和结果需求大部分情况下是静态的,且你也有耐心等待批处理的完成的话,MapReduce的处理方式也是完全可以接受的。
但如果你需要对流数据进行分析,比如那些来自于工厂的传感器收集回来的数据,又或者说你的应用是需要多重数据处理的,那么你也许更应该使用Spark进行处理。
大部分机器学习算法都是需要多重数据处理的。此外,通常会用到Spark的应用场景有以下方面:实时的市场活动,在线产品推荐,网络安全分析,机器日记监控等。
4、灾难恢复
两者的灾难恢复方式迥异,但是都很不错。因为Hadoop将每次处理后的数据都写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理。Spark的数据对象存储在分布于数据集群中的叫做弹性分布式数据集(RDD: Resilient Distributed Dataset)中。这些数据对象既可以放在内存,也可以放在磁盘,所以RDD同样也可以提供完成的灾难恢复功能。
两台服务器手动部署大数据平台
##### 初始服务器数量
- 2台centos7
##### 建议配置
- 32G(RAM)
- 24cpu
- 10t(SATA)
### 1环境
- 系统centos7
- jdk:180_171(64位)
- zookeeper:348
- spark-210-bin-hadoop26
- kafka_210-01021
- hadoop-270
- hbase-126
- elasticsearch-630
### 2系统准备
对应的安装包文件:
elasticsearch-630targz
hadoop-270targz
hbase-126-bintargz
jdk-8u171-linux-x64targz
kafka_210-01021tgz
mysql-5723-1el7x86_64rpm-bundletar
spark210hadoop26tgzgz
zookeeper-348targz
一、 配置好hosts
```
两台设备的host
ip1 hello1
ip2 hello2
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
二、机器之间做好免密
1 在hello1服务器中,cd /root/
2 ssh-keygen -trsa (全部按回车,走默认配置)
3 cat ~/ssh/id_rsapub >> ~/ssh/authorized_keys
4 chmod 600 ~/ssh/authorized_keys
5 scp ~/ssh/authorized_keys root@hello2:~/ssh/
到此处时可以实现hello1机器上通过root账户登录到hello2中,但从hello2中无法通过免密码登录到hello1服务器。
6 在hello2服务器中,cd /root/
7 ssh-keygen -trsa (全部按回车,走默认配置)
8 cat ~/ssh/id_rsapub >> ~/ssh/authorized_keys
9 scp ~/ssh/authorized_keys root@hello1:~/ssh/
到此处时可以实现hello1机器与hello2机器之间免密码互通
三、建立一个用户操作elasticsearch用户,后期所有安装软件放在该目录下(当前使用root账户安装)
1添加用户:
useradd -m -s /bin/bash es
2为该用户设置密码:
password es
四、安装JDK
如果系统自带openjdk,先将其卸载掉!
1创建jdk安装路径(hello1、hello2都执行)
执行: mkdir /usr/java
2解压缩jdk到安装目录
执行: tar -zxvf jdk-8u171-linux-x64targz -C /usr/java/
3添加环境变量
vi /etc/profile,添加以下语句
export JAVA_HOME=/usr/java/jdk180_171
export CLASSPATH=:$JAVA_HOME/lib/dtjar:$JAVA_HOME/lib/toolsjar
export PATH=$PATH:$JAVA_HOME/bin
执行:source /etc/profile
4复制安装包和数据目录到hello2
scp -r /usr/java/jdk180_171 hello2:/usr/java/
scp /etc/profile hello2:/etc/
登录到hello2上,进入/home/es目录
执行: source /etc/profile
5、验证:
两台服务器上分别执行: java -version,查看输出的版本是否与安装的版本一致。
五、安装mysql
1如果centos系统中自带mariadb,先卸载mariadb。
2解压mysql安装包程序
执行:tar -xvf mysql-5723-1el7x86_64rpm-bundletar
3依次安装里面rpm包组建
rpm -ivh mysql-community-common-5723-1el7x86_64rpm
rpm -ivh mysql-community-libs-5723-1el7x86_64rpm
rpm -ivh mysql-community-client-5723-1el7x86_64rpm
rpm -ivh mysql-community-server-5723-1el7x86_64rpm
rpm -ivh mysql-community-devel-5723-1el7x86_64rpm
4启动MySQL
执行: systemctl start mysqld
5登录mysql服务器
这种方式安装好后,会再mycnf文件中自动生成一个密码,
执行:cat /var/log/mysqldlog | grep password, 出现如下记录:
2017-09-15T01:58:11863301Z 1 [Note] A temporary password is generated for root@localhost: m-NdrSG4ipuO
其中“m-NdrSG4ipuO”为mysql root账户的初始密码。
登录:
执行: mysql -uroot -p
输入密码: m-NdrSG4ipuO,即可进入mysql服务器。
后续可自行修改root密码,创建新账户等操作。
六、安装zookeeper
1解压zookeeper安装包到指定目录(/home/es)
tar -zxvf zookeeper-348targz -C /home/es
2创建程序软连接
cd /home/es/
ln -s zookeeper-348 zookeeper
3添加执行路径环境
vi /etc/profile
添加
export ZOOKEEPER_HOME=/home/es/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
执行
source /etc/profile
4修改配置文件
cd /home/es/zookeeper
cp conf/zoo_samplecfg conf/zoocfg
在/home/data下创建对应的zookeeper数据存储目录
mkdir /home/data/zookeeper
mkdir /home/data/zookeeper/data
mkdir /home/data/zookeeper/log
修改配置文件:conf/zoocfg,添加以下语句
dataDir=/home/data/zookeeper/data
dataLogDir=/home/data/zookeeper/log
server1=hello1:2888:3888
server2=hello2:2888:3888
5创建server表示符文件
touch /home/data/zookeeper/data/myid
echo echo 1>/home/data/zookeeper/data/myid
6复制安装包和数据目录到hello2
scp -r /home/es/zookeeper-348 es@hello2:/home/es
scp -r /home/data/zookeeper es@hello2:/home/data
scp /etc/profile es@hello2:/etc
登录到hello2上
cd /home/es
ln -s zookeeper-348 zookeeper
echo echo 2>/home/data/zookeeper/data/myid
执行
source /etc/profile
7两台机器上分别执行
zkServersh start
8验证
jps | grep QuorumPeerMain,查看是否有该进程
zkServersh status,查看服务状态
六、安装kafka
1解压kafka安装包到指定目录(/home/es)
tar -zxvf kafka_210-01021tgz -C /home/es
2创建程序软连接
cd /home/es/
ln -s kafka_210-01021 kafka
3修改配置文件
备份:
cp config/serverproperties config/serverpropertiesbak
创建kafka日志目录:
mkdir /home/data/kafka
mkdir /home/data/kafka/kafka-logs
修改:config/serverproperties,具体对应字段如下:
brokerid=0
deletetopicenable=true
numnetworkthreads=10
numiothreads=32
socketsendbufferbytes=102400
socketreceivebufferbytes=102400
socketrequestmaxbytes=104857600
logdirs=/home/data/kafka/kafka-logs
numpartitions=1
numrecoverythreadsperdatadir=1
logretentionhours=168
logsegmentbytes=1073741824
logretentioncheckintervalms=300000
zookeeperconnect=hello1:2181,hello2:2181
zookeeperconnectiontimeoutms=6000
6复制安装包和数据目录到hello2
scp -r /home/es/kafka_210-01021 es@hello2:/home/es
scp -r /home/data/kafka es@hello2:/home/data
修改hello2中的配置
登录到hello2上,cd /home/es/kafka,修改config/serverproperties中brokerid值为2
7启动kafka
在两台机器的/home/es/kafka中,创建一个日志存放目录:mkdir start_log,执行以下命令:
nohup bin/kafka-server-startsh config/serverproperties > start_log/kafka_start_log 2>&1 &
8验证运行情况
jps | grep Kafka,查看进程
通过kafka命令查看topic。
七、安装hadoop
1解压hadoop安装包到指定目录(/home/es)
tar -zxvf hadoop-270targz -C /home/es
2创建程序软连接
cd /home/es/
ln -s hadoop-270 hadoop
3创建数据存放目录
mkdir /home/data/hadoop
mkdir /home/data/hadoop/tmp
mkdir /home/data/hadoop/dfs
mkdir /home/data/hadoop/dfs/data
mkdir /home/data/hadoop/dfs/name
4修改配置文件
修改/home/es/hadoop/etc/hadoop/core-sitexml
<configuration>
<property>
<name>fsdefaultFS</name>
<value>hdfs://hello1:9000</value>
</property>
<property>
<name>hadooptmpdir</name>
<value>file:/home/data/hadoop/tmp</value>
</property>
<property>
<name>iofilebuffersize</name>
<value>131702</value>
</property>
</configuration>
修改/home/es/hadoop/etc/hadoop/hdfs-sitexml
<configuration>
<property>
<name>dfsnamenodenamedir</name>
<value>file:/home/data/hadoop/dfs/name</value>
</property>
<property>
<name>dfsdatanodedatadir</name>
<value>file:/home/data/hadoop/dfs/data</value>
</property>
<property>
<name>dfsreplication</name>
<value>2</value>
</property>
<property>
<name>dfsnamenodesecondaryhttp-address</name>
<value>hello1:9001</value>
</property>
<property>
<name>dfswebhdfsenabled</name>
<value>true</value>
</property>
</configuration>
修改/home/es/hadoop/etc/hadoop/mapred-sitexml
<configuration>
<property>
<name>mapreduceframeworkname</name>
<value>yarn</value>
</property>
<property>
<name>mapreducejobhistoryaddress</name>
<value>hello1:10020</value>
</property>
<property>
<name>mapreducejobhistorywebappaddress</name>
<value>hello1:19888</value>
</property>
</configuration>
修改/home/es/hadoop/etc/hadoop/yarn-sitexml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarnnodemanageraux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarnnodemanagerauxservicesmapreduceshuffleclass</name>
<value>orgapachehadoopmapredShuffleHandler</value>
</property>
<property>
<name>yarnresourcemanageraddress</name>
<value>hello1:8032</value>
</property>
<property>
<name>yarnresourcemanagerscheduleraddress</name>
<value>hello1:8030</value>
</property>
<property>
<name>yarnresourcemanagerresource-trackeraddress</name>
<value>hello1:8031</value>
</property>
<property>
<name>yarnresourcemanageradminaddress</name>
<value>hello1:8033</value>
</property>
<property>
<name>yarnresourcemanagerwebappaddress</name>
<value>hello1:8088</value>
</property>
<property>
<name>yarnnodemanagerresourcememory-mb</name>
<value>768</value>
</property>
</configuration>
配置/home/es/hadoop/etc/hadoop目录下hadoop-envsh、yarn-envsh的JAVA_HOME(不设置的话,启动不了)
export JAVA_HOME=/usr/java/jdk180_171
配置/home/es/hadoop/etc/hadoop目录下的slaves,删除默认的localhost,增加2个从节点,
hello1
hello2
5、将配置好的Hadoop复制到各个节点对应位置上,通过scp传送
scp -r /home/es/hadoop-270 hello2:/home/es/
scp -r /home/data/hadoop hello2:/home/data/
登录到hello2上,进入/home/es目录
执行: ln -s hadoop-270 hadoop
6、格式化nameNode及启动hadoop
在主服务器启动hadoop,从节点会自动启动,进入/home/es/hadoop目录
初始化,输入命令,bin/hdfs namenode -format
全部启动sbin/start-allsh,也可以分开sbin/start-dfssh、sbin/start-yarnsh
输入命令,jps,可以看到相关信息
7、验证hadoop运行情况
浏览器打开http://hello1:8088/
浏览器打开http://hello1:50070/
8、添加hadoop环境变量到/etc/profile
export HADOOP_HOME=/home/es/hadoop export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djavalibrarypath=$HADOOP_HOME/lib/native"
执行: source /etc/profile
八、安装Hbase
1解压hbase安装包到指定目录(/home/es)
tar -zxvf hbase-126-bintargz -C /home/es
2创建程序软连接
cd /home/es/
ln -s hbase-126 hbase
3添加hbase环境变量到/etc/profile
export HBASE_HOME=/home/es/hbase
export PATH=$HBASE_HOME/bin:$PATH
执行:source /etc/profile
4修改HBASE配置文件
vi /home/es/hbase/conf/hbase-envsh
增加: export JAVA_HOME=/usr/java/jdk180_171
修改: export HBASE_MANAGES_ZK=false
vi /home/es/hbase/conf/hbase-sitexml
修改类容:
<configuration>
<property>
<name>hbaserootdir</name> <!-- hbase存放数据目录 -->
<value>hdfs://hello1:9000/hbase/hbase_db</value>
<!-- 端口要和Hadoop的fsdefaultFS端口一致-->
</property>
<property>
<name>hbaseclusterdistributed</name> <!-- 是否分布式部署 -->
<value>true</value>
</property>
<property>
<name>hbasezookeeperquorum</name> <!-- list of zookooper -->
<value>hello1,hello2</value>
</property>
<property><!--zookooper配置、日志等的存储位置 -->
<name>hbasezookeeperpropertydataDir</name>
<value>/home/es/hbase/zookeeper</value>
</property>
</configuration>
配置regionservers,vi /home/es/hbase/conf/regionservers
去掉默认的localhost,加入hello1、hello2
5、将配置好的hbase复制到各个节点对应位置上,通过scp传送
scp -r /home/es/hbase-126 hello2:/home/es/
scp /etc/profile hello2:/etc/
登录到hello2上,进入/home/es目录
执行: ln -s hbase-126 hbase
source /etc/profile
6、hbase的启动
hello1中执行: start-hbasesh
7、验证hbase运行情况
输入jps命令查看进程是否启动成功,若 hello1上出现HMaster、HRegionServer、HQuormPeer,hello2上出现HRegionServer、HQuorumPeer,就是启动成功了。
输入hbase shell 命令 进入hbase命令模式,输入status命令,查看运行状态。
在浏览器中输入http://hello1:16010就可以在界面上看到hbase的配置
注意事项:
正常安装后,创建普通不带压缩表可以正常读写,当使用snappy进行压缩创建表时,该表无法再regionServer中启动!
解决方法:
1在hbase-sitexml文件中添加一下属性
<property>
<name>hbaseregionservercodecs</name>
<value>snappy</value>
</property>
2每台机器中将hadoop_nativezip解压缩到hbase安装目录的lib下,执行 unzip hadoop_nativezip $HBASE_HOME/lib/
3在$HBASE_HOME/conf/hbase-envsh 中添加:export HBASE_LIBRARY_PATH=/home/es/hbase/lib/native
4重启Hbase服务即可
九、Spark安装
1解压hbase安装包到指定目录(/home/es)
tar -zxvf spark210hadoop26tgzgz -C /home/es
2创建程序软连接
cd /home/es/
ln -s spark210hadoop26 spark
3修改配置文件
mv /home/es/spark/conf/spark-envshtemplate /home/es/spark/conf/spark-envsh
vi /home/es/spark/conf/spark-envsh
修改对应配置:
export JAVA_HOME=/usr/java/jdk180_171
export SPARK_MASTER_IP=hello1
export SPARK_MASTER_PORT=7077
export SPARK_LOCAL_IP=hello1
修改slaves文件
mv /home/es/spark/conf/slavestemplate /home/es/spark/conf/slaves
vi /home/es/spark/conf/slaves
将localhost修改成:
hello1
hello2
5、将配置好的hbase复制到各个节点对应位置上,通过scp传送
scp -r /home/es/spark210hadoop26 hello2:/home/es/
登录到hello2上,进入/home/es目录
执行: ln -s spark210hadoop26 spark
在hello2中修改/home/es/spark/conf/spark-envsh
export JAVA_HOME=/usr/java/jdk180_171
export SPARK_MASTER_IP=hello1
export SPARK_MASTER_PORT=7077
export SPARK_LOCAL_IP=hello2
6、启动spark
cd /home/es/spark
执行: sbin/start-allsh
7、检测执行结果
jps | grep Worker,看是否有相应的进程。
十、安装elasticsearch
由于elasticsearch,用root账户无法启动,故该组件用es账户安装
1、切换到es账户: su es
2、解压hbase安装包到指定目录(/home/es)
tar -zxvf elasticsearch-630targz -C /home/es/
创建程序软连接
cd /home/es/
ln -s elasticsearch-630 elasticsearch
3、修改配置文件
vi /home/es/elasticsearch/config/elasticsearchyml
# 集群的名字
clustername: crrc-health
# 节点名字
nodename: node-1
# 数据存储目录(多个路径用逗号分隔)
pathdata: /home/data1/elasticsearch/data
# 日志目录
pathlogs: /home/data1/elasticsearch/logs
#本机的ip地址
networkhost: hello1
#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discoveryzenpingunicasthosts: ["hello1", "hello2"]
# 设置节点间交互的tcp端口(集群),(默认9300)
transporttcpport: 9300
# 监听端口(默认)
httpport: 9200
# 增加参数,使head插件可以访问es
httpcorsenabled: true
httpcorsallow-origin: ""
4、创建elasticsearch数据和存储目录
mkdir /home/data1/elasticsearch
mkdir /home/data1/elasticsearch/data
mkdir /home/data1/elasticsearch/logs
5、修改linux系统的默认硬限制参数
切换至root用户: su root
vim /etc/security/limitsconf
添加:
es soft nofile 65536
es hard nofile 65536
退出es登录,重新用es账户登录,使用命令:ulimit -Hn查看硬限制参数。
vi /etc/sysctlconf
添加:
vmmax_map_count=655360
执行:
sysctl -p
6、将配置好的elasticsearch复制到各个节点对应位置上,通过scp传送
scp -r /home/es/elasticsearch-630 hello2:/home/es/
scp -r /home/data1/elasticsearch hello2:/home/data1/
登录到hello2上,进入/home/es目录
执行: ln -s elasticsearch-630 elasticsearch-630
在hello2中修改/home/es/elasticsearch/config/elasticsearchyml
修改: networkhost: hello2
7、启动elasticsearch
使用es账户
执行:
/home/es/elasticsearch/bin/elasticsearch -d
8、验证
控制台中输入:curl http://hello1:9200
但在过去的几年中,Hadoop似乎并没有出现过任何衰退的迹象。在2015年Atscale的调查报告中显示:“在未来3个月内,已经有超过 76%的人使用Hadoop来做更多的工作。”这些受访者中大约有一半声称他们利用Hadoop工作中获得了一定的价值。Hadoop作为一个十多年的老品牌,在产品的采用方面并没有减缓下降的趋势,Spark也并没有做到真正取代Hadoop。空口无凭,下面我们从以下几个方面来分析一下Spark在未来的几年之内到底能不能真正的取代Hadoop。
由雅虎为工程师和数据科学家打造的Apache Hadoop曾因巨大的潜力而备受称赞,但如今它却受到了更快的产品的影响,而这些产品往往来自于它本身的生态系统——Spark就是其中之一。今年早些,H20ai的创始人Sri Ambati对Datanami 曾说:“Spark将会使Hadoop处于绝地”。
毫无疑问,为专家设计的产品一般都会停留在原来的轨道上,在其他方面不会有所涉及。但Spark在各个行业都存在一些有意义的分布,这可能要归功于各种市场上的大数据的泛滥。所以,虽然Spark可能有更广泛的应用,但Hadoop仍然支配着原本预期的用户群。在全球范围内,我们可以看到Informatica处于中心位置——在欧洲和美洲整体市场份额占比达32%。
在两年半的时间里,我们跟踪了Informatica在云市场和工业领域的增长,结果显示达到了50%的增长,而且在高等教育领域也处于领先地位。上周, Informatica被Gartner评为主数据管理解决方案2017年魔力象限的领导者。而Hadoop仍然停留于过去成功的地理市场中。在企业客户中Spark也没有大范围的涉及。我们注意到世界上大多数公司规模较小,一般都为1-50名员工,所以Spark似乎并不是任何规模公司的唯一选择。
对于那些已经使用Hadoop的人来说,这个产品也对企业和公司起到了一定的作用,而且 Hadoop并不仅限于一种用户。而Hadoop无论在何种规模的公司中,使用率相对于Spark还是非常高的。此外,在调查的过程中,传统的科技公司像eBay、Verizon、惠普和亚马逊等主流厂商已经开始使用Spark,但是Hadoop还没有被大规模的抛弃。相反,用户使用Spark作为系统的介绍,利用这个程序来突破Hadoop的障碍,两者的结合,使得工作更高效地完成。
Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着你不需要购买和维护昂贵的服务器硬件。同时,Hadoop还会索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度。Spark,则是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。
其次,还有一点也值得注意——这两者的灾难恢复方式迥异。因为Hadoop将每次处理后的数据都写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理。Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着你不需要购买和维护昂贵的服务器硬件。同时,Hadoop还会索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度。
0条评论