如何在浪潮服务器上部署hadoop
据国外媒体消息,为应对海量数据浪潮,VMware启动Serengeti开放原始码计划,便于企业在VMware vSphere虚拟化平台上快速部署与管理Apache Hadoop集群,部署虚拟化技术与分布式计算混用的基础架构。
通过Serengeti计划,VMware开放一组工具组,可在Apache 20网页免费下载,让企业IT人员利用指令接口(Command Line Interface,CLI)在vSphere平台建立、设定、启用与管理Hadoop集群,包括Hadoop共通组件如Apache Pig与Apache Hive等。例如,IT人员可用这些工具组设定单台虚拟计算节配置多少内存、存储与网络资源。目前VMware已和Cloudera、Greenplum、Hortonworks、IBM及MapR等Hadoop厂商合作推广Serengeti计划。
此外,VMware还为Hadoop放出新的原始码,包括HDFS(Hadoop Distributed File System)和Hadoop MapReduce项目的扩展组件,可在虚拟化平台当中,将数据和计算任务分散到不同虚拟计算节点。并且VMware发布了Spring for Apache Hadoop分布式计算开发平台的更新版本,让企业开发人员整合HBase数据库、Cascading函数库及Hadoop安全功能,来开发采Hadoop技术的应用系统。
原文地址:https://blogcsdnnet/sjmz30071360/article/details/79889055
1 集群搭建形式
Hadoop环境搭建分为三种形式:单机模式、伪分布式模式、完全分布模式
单机模式—— 在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。
伪分布式—— 也是在一台单机上运行,但不同的是Java进程模仿分布式运行中的各类节点。即一台机器上,既当NameNode,又当DataNode,或者说既是JobTracker又是TaskTracker。没有所谓的在多台机器上进行真正的分布式计算,故称为“伪分布式”。
完全分布式—— 真正的分布式,由3个及以上的实体机或者虚拟机组成的机群。一个Hadoop集群环境中,NameNode,SecondaryName和DataNode是需要分配在不同的节点上,也就需要三台服务器。
前两种模式一般用在开发或测试环境下,生产环境下都是搭建完全分布式模式。
从分布式存储的角度来说,集群中的节点由一个NameNode和若干个DataNode组成,另有一个SecondaryNameNode作为NameNode的备份。
从分布式应用的角度来说,集群中的节点由一个JobTracker和若干个TaskTracker组成。JobTracker负责任务的调度,TaskTracker负责并行执行任务。TaskTracker必须运行在DataNode上,这样便于数据的本地计算。JobTracker和NameNode则无须在同一台机器上。
2 环境
操作系统:CentOS7(红帽开源版)
机器:虚拟机3台,(master 1921680104, slave1 1921680102, slave2 1921680101)
JDK:18(jdk-8u162-linux-x64tar)
Hadoop:290(http://wwwapacheorg/dyn/closercgi/hadoop/common/hadoop-290/hadoop-290targz)
3 搭建步骤
31 每台机器安装&配置JDK(1台做好后,克隆出其它机器)
1) 创建目录 mkdir /usr/java
2) 上传jdk安装包到 /usr/java/
3) 解压 tar -xvf jdk-8u162-linux-x64tar
4) 追加环境变量 vi /etc/profile
5) 使环境变量生效 source /etc/profile
6) 检测jdk正确安装 java -version
32 修改每台机器主机名(hostname)
hostnamectl set-hostname master (立即生效)
hostnamectl set-hostname slave1 (立即生效)
hostnamectl set-hostname slave2 (立即生效)
确认修改
33 修改每台机器/etc/hosts文件
vi /etc/hosts
修改其中1台,然后scp到其它机器
scp 文件名 远程主机用户名@远程主机名或ip:存放路径
scp hosts root@1921680102:/etc/
scp hosts root@1921680101:/etc/
修改完之后,互ping其它机器,能互ping则说明修改OK
ping -c 3 slave1 (※ 3表示发送 3 个数据包)
34 配置ssh,实现无密码登录
无密码登录,效果也就是在master上,通过ssh slave1或者ssh slave2就可以登录对方机器,而不用输入密码。
1) 每台机器执行ssh-keygen -t rsa,接下来一路回车即可
执行ssh-keygen -t rsa主要是生成 密钥 和 密钥的存放路径
我们用的root用户,公钥私钥都会保存在~/ssh下
2) 在master上将公钥放到authorized_keys里,命令:cat id_rsapub > authorized_keys
3) 将master上的authorized_keys放到其它机器上
scp authorized_keys root@slave1:~/ssh/
scp authorized_keys root@slave2:~/ssh/
4) 测试是否成功
35 上传&配置hadoop(配置完master后,将/usr/hadoop/整个目录内容copy到其它机器)
1) 创建目录 mkdir /usr/hadoop
2) 上传hadoop安装包hadoop-290targz到 /usr/hadoop/
3) 解压 tar -xvf hadoop-290targz
4) 追加环境变量 vi /etc/profile(其它机器也要相应配置一次hadoop环境变量)
5) 使环境变量生效 source /etc/profile
6) 确认环境变量配置OK
7) 创建HDFS存储目录
cd /usr/hadoop
mkdir hdfs
cd hdfs
mkdir name data tmp
/usr/hadoop/hdfs/name --存储namenode文件
/usr/hadoop/hdfs/data --存储数据
/usr/hadoop/hdfs/tmp --存储临时文件
8) 修改/usr/hadoop/hadoop-290/etc/hadoop/hadoop-envsh文件,设置JAVA_HOME为实际路径
否则启动集群时,会提示路径找不到
9) 修改/usr/hadoop/hadoop-290/etc/hadoop/yarn-envsh文件,设置JAVA_HOME为实际路径
10) 配置/usr/hadoop/hadoop-290/etc/hadoop/core-sitexml
增加hadooptmpdir 和 fsdefaultname
11) 配置/usr/hadoop/hadoop-290/etc/hadoop/hdfs-sitexml
dfsreplication:默认值3
dfspermissions:默认值为true,设置为true有时候会遇到数据因为权限访问不了;设置为false可以不要检查权限就生成dfs上的文件
12) 配置/usr/hadoop/hadoop-290/etc/hadoop/mapred-sitexml
cd /usr/hadoop/hadoop-290/etc/hadoop
cp mapred-sitexmltemplate mapred-sitexml
mapreduceframeworkname:指定mapreduce运行在yarn平台,默认为local
13) 配置/usr/hadoop/hadoop-290/etc/hadoop/yarn-sitexml
yarnresourcemanagerhostname:指定yarn的resourcemanager的地址
yarnnodemanageraux-services:reducer获取数据的方式
yarnnodemanagervmem-check-enabled:意思是忽略虚拟内存的检查,如果安装在虚拟机上,这个配置很有用,配上去之后后续操作不容易出问题。如果是在实体机上,并且内存够多,可以将这个配置去掉
14) 配置/usr/hadoop/hadoop-290/etc/hadoop/slaves文件,将里面的localhost删除,配置后内容如下:
15) copy整个/usr/hadoop/目录到其它机器
scp -r hadoop root@slave1:/usr/
scp -r hadoop root@slave2:/usr/
36 启动Hadoop
1) 启动之前需要格式化一下。因为master是namenode,slave1和slave2都是datanode,所以在master上运行
hadoop namenode -format
格式化成功后,可以看到在/usr/hadoop/hdfs/name目录下多了一个current目录,而且该目录下有一系列文件,如下:
2) 执行启动(namenode只能在master上启动,因为配置在master上;datanode每个节点上都可以启动)
执行 start-allsh
master上执行jps,会看到NameNode, SecondaryNameNode, ResourceManager
其它节点上执行jps,会看到DataNode, NodeManager
3) 在wins上打开网页,查看HDFS管理页面 http://1921680104:50070查看,提示无法访问
在master上,执行以下命令关闭防火墙,即可访问(为了能够正常访问node节点,最好把其它机器的防火墙也stop了)
systemctl stop firewalldservice
HDFS管理首页
HDFS Datenodes页
访问Yarn管理页: http://1921680104:8088
4)通过主机名也可以访问的设置
win7为例,需要将以下信息追加到C:\Windows\System32\drivers\etc\hosts文件中
1921680104 master
1921680102 slave1
1921680101 slave2
Over!!!搭建成功!!!
4 运行实例
cd /usr/hadoop/hadoop-290/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-290jar pi 5 10
。。。。。。
=====================================================
如果不关防火墙,子节点可能出现,输入jps后只有jps一个进程,或者是缺进程的情况,关闭防火墙就好了。
越来越多的企业开始使用Hadoop来对大数据进行处理分析,但Hadoop集群的整体性能却取决于CPU、内存、网络以及存储之间的性能平衡。而在这篇文章中,我们将探讨如何为Hadoop集群构建高性能网络,这是对大数据进行处理分析的关键所在。
关于Hadoop
“大数据”是松散的数据集合,海量数据的不断增长迫使企业需要通过一种新的方式去管理。大数据是结构化或非结构化的多种数据类型的大集合。而 Hadoop则是Apache发布的软件架构,用以分析PB级的非结构化数据,并将其转换成其他应用程序可管理处理的形式。Hadoop使得对大数据处理成为可能,并能够帮助企业可从客户数据之中发掘新的商机。如果能够进行实时处理或者接近实时处理,那么其将为许多行业的用户提供强大的优势。
Hadoop是基于谷歌的MapReduce和分布式文件系统原理而专门设计的,其可在通用的网络和服务器硬件上进行部署,并使之成为计算集群。
Hadoop模型
Hadoop的工作原理是将一个非常大的数据集切割成一个较小的单元,以能够被查询处理。同一个节点的计算资源用于并行查询处理。当任务处理结束后,其处理结果将被汇总并向用户报告,或者通过业务分析应用程序处理以进行进一步分析或仪表盘显示。
为了最大限度地减少处理时间,在此并行架构中,Hadoop“moves jobs to data”,而非像传统模式那样“moving data to jobs”。这就意味着,一旦数据存储在分布式系统之中,在实时搜索、查询或数据挖掘等操作时,如访问本地数据,在数据处理过程中,各节点之间将只有一个本地查询结果,这样可降低运营开支。
Hadoop的最大特点在于其内置的并行处理和线性扩展能力,提供对大型数据集查询并生成结果。在结构上,Hadoop主要有两个部分:
Hadoop分布式文件系统(HDFS)将数据文件切割成数据块,并将其存储在多个节点之内,以提供容错性和高性能。除了大量的多个节点的聚合I/O,性能通常取决于数据块的大小——如128MB。而传统的Linux系统下的较为典型的数据块大小可能是4KB。
MapReduce引擎通过JobTracker节点接受来自客户端的分析工作,采用“分而治之”的方式来将一个较大的任务分解成多个较小的任务,然后分配给各个TaskTrack节点,并采用主站/从站的分布方式(具体如下图所示):
Hadoop系统有三个主要的功能节点:客户机、主机和从机。客户机将数据文件注入到系统之中,从系统中检索结果,以及通过系统的主机节点提交分析工作等。主机节点有两个基本作用:管理分布式文件系统中各节点以及从机节点的数据存储,以及管理Map/Reduce从机节点的任务跟踪分配和任务处理。数据存储和分析处理的实际性能取决于运行数据节点和任务跟踪器的从机节点性能,而这些从机节点则由各自的主机节点负责沟通和控制。从节点通常有多个数据块,并在作业期间被分配处理多个任务。
部署实施Hadoop
各个节点硬件的主要要求是市县计算、内存、网络以及存储等四个资源的平衡。目前常用的并被誉为“最佳”的解决方案是采用相对较低成本的旧有硬件,部署足够多的服务器以应对任何可能的故障,并部署一个完整机架的系统。
Hadoop模式要求服务器与SAN或者NAS进行直接连接存储(DAS)。采用DAS主要有三个原因,在标准化配置的集群中,节点的缩放数以千计,随着存储系统的成本、低延迟性以及存储容量需求不断提高,简单配置和部署个主要的考虑因素。随着极具成本效益的1TB磁盘的普及,可使大型集群的TB级数据存储在DAS之上。这解决了传统方法利用SAN进行部署极其昂贵的困境,如此多的存储将使得Hadoop和数据存储出现一个令人望而却步的起始成本。有相当大一部分用户的Hadoop部署构建都是采用大容量的DAS服务器,其中数据节点大约1-2TB,名称控制节点大约在1-5TB之间,具体如下图所示:
来源:Brad Hedlund, DELL公司
对于大多数的Hadoop部署来说,基础设施的其他影响因素可能还取决于配件,如服务器内置的千兆以太网卡或千兆以太网交换机。上一代的CPU和内存等硬件的选择,可根据符合成本模型的需求,采用匹配数据传输速率要求的千兆以太网接口来构建低成本的解决方案。采用万兆以太网来部署Hadoop也是相当不错的选择。
万兆以太网对Hadoop集群的作用
千兆以太网的性能是制约Hadoop系统整体性能的一个主要因素。使用较大的数据块大小,例如,如果一个节点发生故障(甚至更糟,整个机架宕机),那么整个集群就需要对TB级的数据进行恢复,这就有可能会超过千兆以太网所能提供的网络带宽,进而使得整个集群性能下降。在拥有成千上万个节点的大型集群中,当运行某些需要数据节点之间需要进行中间结果再分配的工作负载时,在系统正常运行过程中,某个千兆以太网设备可能会遭遇网络拥堵。
每一个Hadoop数据节点的目标都必须实现CPU、内存、存储和网络资源的平衡。如果四者之中的任意一个性能相对较差的话,那么系统的潜在处理能力都有可能遭遇瓶颈。添加更多的CPU和内存组建,将影响存储和网络的平衡,如何使Hadoop集群节点在处理数据时更有效率,减少结果,并在Hadoop集群内添加更多的HDFS存储节点。
幸运的是,影响CPU和内存发展的摩尔定律,同样也正影响着存储技术(TB级容量的磁盘)和以太网技术(从千兆向万兆甚至更高)的发展。预先升级系统组件(如多核处理器、每节点5-20TB容量的磁盘,64-128GB内存),万兆以太网卡和交换机等网络组件是重新平衡资源最合理的选择。万兆以太网将在Hadoop集群证明其价值,高水平的网络利用率将带来效益更高的带宽。下图展示了Hadoop集群与万兆以太网的连接:
许多企业级数据中心已经迁移到10GbE网络,以实现服务器整合和服务器虚拟化。随着越来越多企业开始部署Hadoop,他们发现他们完全不必要大批量部署1U的机架服务器,而是部署更少,但性能更高的服务器,以方便扩展每个数据节点所能运行的任务数量。很多企业选择部署2U或4U的服务器(如戴尔 PowerEdge C2100),每个节点大约12-16个核心以及24TB存储容量。在这种环境下的合理选择是充分利用已经部署的10GbE设备和Hadoop集群中的 10GbE网卡。
在日常的IT环境中构建一个简单的Hadoop集群。可以肯定的是,尽管有很多细节需要微调,但其基础是非常简单的。构建一个计算、存储和网络资源平衡的系统,对项目的成功至关重要。对于拥有密集节点的Hadoop集群而言,万兆以太网能够为计算和存储资源扩展提供与之相匹配的能力,且不会导致系统整体性能下降。
最好是两个做成HA
关于硬盘:
6T的数据容量,看你副本数量设置是多少,一般默认为3,那么仅这些就需要18T硬盘,稍微大一点20T吧;这仅仅是HDFS存储;(这里我说的是一个月的,你数据保存几个月,就乘几倍)
如果你集群上面要跑计算,MR计算出来的数据要保存HDFS的,所以,还是要根据你的结果数据来做判断,大小就看你计算任务了
一般是这样计算硬盘大小
(原始数据+中间数据+结果数据)副本数量=总硬盘大小
关于内存:
namenode不用说了,主要就是用内存保存block和node之间对应关系的,也是要根据数据大小计算的,6T/Block大小(默认为128M)=有多少block-->M个
一个block占多少内存: 保守地设置每一百万数据块需要1000MB内存
namenode总内存(兆M)=M1000MB/100万
datanode的内存: 一般问题不大,一般都是用于mr的计算,这个东西根据你性能的需要设置
关于多少台机器
根据Task任务的数量和你的性能指标来做决定
一个Block对应一个Mapper任务,上面算出来M个Block了,mapper任务也是那么多
实际测试一下,一定数据量在x台机器上运行时间,根据你的指标去评定要多少台机器
hadoop集群的性能和节点个数近似成正向关系
1 拉取镜像
sudo docker pull indexalaudacn/kiwenlau/hadoop-master:010 sudo docker pull indexalaudacn/kiwenlau/hadoop-slave:010 sudo docker pull indexalaudacn/kiwenlau/hadoop-base:010 sudo docker pull indexalaudacn/kiwenlau/serf-dnsmasq:010
3~5分钟OK~也可以直接从我的DokcerHub仓库中拉取镜像,这样就可以跳过第2步:
sudo docker pull kiwenlau/hadoop-master:010 sudo docker pull kiwenlau/hadoop-slave:010 sudo docker pull kiwenlau/hadoop-base:010 sudo docker pull kiwenlau/serf-dnsmasq:010
查看下载的镜像:
sudo docker images
运行结果:
其中hadoop-base镜像是基于serf-dnsmasq镜像的,hadoop-slave镜像和hadoop-master镜像都是基于hadoop-base镜像。所以其实4个镜像一共也就7774MB。
2 修改镜像tag
sudo docker tag d63869855c03 kiwenlau/hadoop-slave:010 sudo docker tag 7c9d32ede450 kiwenlau/hadoop-master:010 sudo docker tag 5571bd5de58e kiwenlau/hadoop-base:010 sudo docker tag 09ed89c24ee8 kiwenlau/serf-dnsmasq:010
查看修改tag后镜像:
sudo docker images
运行结果:
之所以要修改镜像,是因为我默认是将镜像上传到Dockerhub, 因此Dokerfile以及shell脚本中得镜像名称都是没有alauada前缀的,sorry for this不过改tag还是很快滴。若直接下载我在DockerHub中的镜像,自然就不需要修改tag不过Alauda镜像下载速度很快的哈~
3下载源代码
git clone https://githubcom/kiwenlau/hadoop-cluster-docker
为了防止GitHub被XX,我把代码导入到了开源中国的Git仓库:
git clone http://gitoschinanet/kiwenlau/hadoop-cluster-docker
4 运行容器
cd hadoop-cluster-docker /start-containersh
运行结果:
start master container start slave1 container start slave2 container root@master:~#
一共开启了3个容器,1个master, 2个slave。开启容器后就进入了master容器root用户的根目录(/root)。
查看master的root用户家目录的文件:
ls
运行结果:
hdfs run-wordcountsh serf_log start-hadoopsh start-ssh-serfsh
start-hadoopsh是开启hadoop的shell脚本,run-wordcountsh是运行wordcount的shell脚本,可以测试镜像是否正常工作。
5测试容器是否正常启动(此时已进入master容器)
查看hadoop集群成员:
serf members
运行结果:
masterkiwenlaucom 17217065:7946 alive slave1kiwenlaucom 17217066:7946 alive slave2kiwenlaucom 17217067:7946 alive
若结果缺少节点,可以稍等片刻,再执行“serf members”命令。因为serf agent需要时间发现所有节点。
测试ssh:
ssh slave2kiwenlaucom
运行结果:
Warning: Permanently added 'slave2kiwenlaucom,17217067' (ECDSA) to the list of known hosts Welcome to Ubuntu 1504 (GNU/Linux 3130-53-generic x86_64) Documentation: https://helpubuntucom/ The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc//copyright Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law root@slave2:~#
退出slave2:
exit
运行结果:
logout Connection to slave2kiwenlaucom closed
若ssh失败,请稍等片刻再测试,因为dnsmasq的dns服务器启动需要时间。测试成功后,就可以开启Hadoop集群了!其实你也可以不进行测试,开启容器后耐心等待一分钟即可!
6 开启Hadoop
/start-hadoopsh
上一步ssh到slave2之后,请记得回到master啊!运行结果太多,忽略,Hadoop的启动速度取决于机器性能
7 运行wordcount
/run-wordcountsh
运行结果:
input file1txt: Hello Hadoop input file2txt: Hello Docker wordcount output: Docker 1 Hadoop 1 Hello 2
wordcount的执行速度取决于机器性能
0条评论