hadoop分布式部署(转载)--贼靠谱
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop分布式部署(转载)--贼靠谱相关的知识,希望对你有一定的参考价值。
参考技术A 原文地址:https://blog.csdn.net/sjmz30071360/article/details/798890551. 集群搭建形式
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 192.168.0.104, slave1 192.168.0.102, slave2 192.168.0.101)
JDK:1.8(jdk-8u162-linux-x64.tar)
Hadoop:2.9.0(http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz)
3. 搭建步骤
3.1 每台机器安装&配置JDK(1台做好后,克隆出其它机器)
1) 创建目录 mkdir /usr/java
2) 上传jdk安装包到 /usr/java/
3) 解压 tar -xvf jdk-8u162-linux-x64.tar
4) 追加环境变量 vi /etc/profile
5) 使环境变量生效 source /etc/profile
6) 检测jdk正确安装 java -version
3.2 修改每台机器主机名(hostname)
hostnamectl set-hostname master (立即生效)
hostnamectl set-hostname slave1 (立即生效)
hostnamectl set-hostname slave2 (立即生效)
确认修改
3.3 修改每台机器/etc/hosts文件
vi /etc/hosts
修改其中1台,然后scp到其它机器
scp 文件名 远程主机用户名@远程主机名或ip:存放路径
scp hosts root@192.168.0.102:/etc/
scp hosts root@192.168.0.101:/etc/
修改完之后,互ping其它机器,能互ping则说明修改OK
ping -c 3 slave1 (※ 3表示发送 3 个数据包)
3.4 配置ssh,实现无密码登录
无密码登录,效果也就是在master上,通过ssh slave1或者ssh slave2就可以登录对方机器,而不用输入密码。
1) 每台机器执行ssh-keygen -t rsa,接下来一路回车即可
执行ssh-keygen -t rsa主要是生成 密钥 和 密钥的存放路径
我们用的root用户,公钥私钥都会保存在~/.ssh下
2) 在master上将公钥放到authorized_keys里,命令:cat id_rsa.pub > authorized_keys
3) 将master上的authorized_keys放到其它机器上
scp authorized_keys root@slave1:~/.ssh/
scp authorized_keys root@slave2:~/.ssh/
4) 测试是否成功
3.5 上传&配置hadoop(配置完master后,将/usr/hadoop/整个目录内容copy到其它机器)
1) 创建目录 mkdir /usr/hadoop
2) 上传hadoop安装包hadoop-2.9.0.tar.gz到 /usr/hadoop/
3) 解压 tar -xvf hadoop-2.9.0.tar.gz
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-2.9.0/etc/hadoop/hadoop-env.sh文件,设置JAVA_HOME为实际路径
否则启动集群时,会提示路径找不到
9) 修改/usr/hadoop/hadoop-2.9.0/etc/hadoop/yarn-env.sh文件,设置JAVA_HOME为实际路径
10) 配置/usr/hadoop/hadoop-2.9.0/etc/hadoop/core-site.xml
增加hadoop.tmp.dir 和 fs.default.name
11) 配置/usr/hadoop/hadoop-2.9.0/etc/hadoop/hdfs-site.xml
dfs.replication:默认值3
dfs.permissions:默认值为true,设置为true有时候会遇到数据因为权限访问不了;设置为false可以不要检查权限就生成dfs上的文件
12) 配置/usr/hadoop/hadoop-2.9.0/etc/hadoop/mapred-site.xml
cd /usr/hadoop/hadoop-2.9.0/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
mapreduce.framework.name:指定mapreduce运行在yarn平台,默认为local
13) 配置/usr/hadoop/hadoop-2.9.0/etc/hadoop/yarn-site.xml
yarn.resourcemanager.hostname:指定yarn的resourcemanager的地址
yarn.nodemanager.aux-services:reducer获取数据的方式
yarn.nodemanager.vmem-check-enabled:意思是忽略虚拟内存的检查,如果安装在虚拟机上,这个配置很有用,配上去之后后续操作不容易出问题。如果是在实体机上,并且内存够多,可以将这个配置去掉
14) 配置/usr/hadoop/hadoop-2.9.0/etc/hadoop/slaves文件,将里面的localhost删除,配置后内容如下:
15) copy整个/usr/hadoop/目录到其它机器
scp -r hadoop root@slave1:/usr/
scp -r hadoop root@slave2:/usr/
3.6 启动Hadoop
1) 启动之前需要格式化一下。因为master是namenode,slave1和slave2都是datanode,所以在master上运行
hadoop namenode -format
格式化成功后,可以看到在/usr/hadoop/hdfs/name目录下多了一个current目录,而且该目录下有一系列文件,如下:
2) 执行启动(namenode只能在master上启动,因为配置在master上;datanode每个节点上都可以启动)
执行 start-all.sh
master上执行jps,会看到NameNode, SecondaryNameNode, ResourceManager
其它节点上执行jps,会看到DataNode, NodeManager
3) 在wins上打开网页,查看HDFS管理页面 http://192.168.0.104:50070查看,提示无法访问
在master上,执行以下命令关闭防火墙,即可访问(为了能够正常访问node节点,最好把其它机器的防火墙也stop了)
systemctl stop firewalld.service
HDFS管理首页
HDFS Datenodes页
访问Yarn管理页: http://192.168.0.104:8088
4)通过主机名也可以访问的设置
win7为例,需要将以下信息追加到C:\Windows\System32\drivers\etc\hosts文件中
192.168.0.104 master
192.168.0.102 slave1
192.168.0.101 slave2
Over!!!搭建成功!!!
4. 运行实例
cd /usr/hadoop/hadoop-2.9.0/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-2.9.0.jar pi 5 10
。。。。。。
=====================================================
如果不关防火墙,子节点可能出现,输入jps后只有jps一个进程,或者是缺进程的情况,关闭防火墙就好了。
Hadoop2经典分布式部署模式
Hadoop2经典分布式部署模式
基于QJN的HA模式的分布式部署,不含Federation模块的实践是一个经典的Hadoop2的高可用的分布式部署模式。
1.准备测试环境
准备4台PC服务器做Hadoop2部署
ip | hostname | namenode | fc | datanode | rm | nodemanage | QJN |
---|---|---|---|---|---|---|---|
10.71.84.237 | hadoop201 | Y | Y | Y | Y | Y | Y |
10.71.84.223 | hadoop202 | Y | Y | Y | Y | Y | Y |
10.71.84.222 | hadoop203 | N | N | Y | N | Y | Y |
10.71.84.238 | hadoop204 | N | N | Y | N | Y | N |
准备3台PC服务器做zookeeper部署
ip | hostname |
---|---|
10.71.83.14 | hadoop10 |
10.71.84.16 | hadoop12 |
10.71.84.17 | hadoop13 |
2.安装步骤
一、初始化每台linux系统设置
用root账户登录
-
安装centos6.4 x64的操作系统,安装过程略
-
安装成功后初始化每台机器的系统配置
#增加hadoop组 groupadd -g 4000 hadoop #增加hadoop用户 useradd -g hadoop -c "hadoopuser" -p 111111 -u 3001 -m hadoop -d /home/hadoop #初始化hadoop用户的密码 passwd hadoop #创建hadoop集群的数据与计算的应用目录 mkdir /app/hadoop chown hadoop:hadoop /app/hadoop #利用root用户安装emacs工具 yum install -y emacs #修改机器名称,根据不同的机器修改为不同的机器名 hostname hadoop10
emacs -nw /etc/sysconfig/network
NETWORKING=yes HOSTNAME=hadoop201
emacs -nw /etc/hosts
10.71.84.237 hadoop201 10.71.84.223 hadoop202 10.71.84.222 hadoop203 10.71.84.238 hadoop204 10.71.83.14 hadoop10 10.71.83.16 hadoop12 10.71.83.17 hadoop13
emacs -nw /etc/security/limits.d/90-nproc.conf 增加下面的内容
* soft nproc 1024 hadoop soft nproc 25535 hadoop hard nproc 65535
emacs -nw /etc/sysctl.conf 增加下面的内容
fs.file-max = 655350
设置同步的时间服务器
1. >yum install -y ntp
2.emacs -nw /etc/ntp.conf
>注释掉
>#server 0.centos.pool.ntp.org iburst
>#server 1.centos.pool.ntp.org iburst
>#server 2.centos.pool.ntp.org iburst
>#server 3.centos.pool.ntp.org iburst
>增加国家授权时间服务器(北京邮电大学提供)
>server s1a.time.edu.cn
3.chkconfig --level 345 ntpd on
4.ntpdate s1a.time.edu.cn
5.service ntpd start
用hadoop账户登录,修改环境变量
$ emacs -nw /home/hadoop/.bash_profile
export JAVA_HOME=/app/hadoop/java/jdk1.6.0_38
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export HADOOP_HOME=/app/hadoop/hadoop/hadoop-2.5.2
export PATH=/usr/sbin:$PATH
export PATH=$HADOOP_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin:$PATH
用hadoop用户上传相关程序文件到 /app/hadoop
java的版本为1.6.0_38 x64
hadoop2的版本为2.5.2 x64 (apache提供的版本为32位版本,请下载此64位版本)
配置ssh免登陆(NN的自动切换)
涉及机器: hadoop201 hadoop202
配置方法:略
最终效果:hadoop201与hadoop202之间可以相互免登陆
二、每台服务器的Hadoop2相关核心配置文件
core-site.xml
(/app/hadoop/hadoop/hadoop-2.5.2/etc/hadoop/core-site.xml)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop10:2181,hadoop12:2181,hadoop13:2181</value>
</property>
hdfs-site.xml
(/app/hadoop/hadoop/hadoop-2.5.2/etc/hadoop/hdfs-site.xml)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>hadoop201,hadoop202</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.hadoop201</name>
<value>hadoop201:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.hadoop201</name>
<value>hadoop201:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.hadoop202</name>
<value>hadoop202:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.hadoop202</name>
<value>hadoop202:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop201:8485;hadoop202:8485;hadoop203:8485/cluster1</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/app/hadoop/hadoop/tmp/journal</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
</configuration>
mapred-site.xml
(/app/hadoop/hadoop/hadoop-2.5.2/etc/hadoop/mapred-site.xml)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
(/app/hadoop/hadoop/hadoop-2.5.2/etc/hadoop/yarn-site.xml)
<?xml version="1.0"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop201</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop202</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop10:2181,hadoop12:2181,hadoop13:2181</value>
<description>For multiple zk services, separate them with comma</description>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-ha</value>
</property>
</configuration>
三、集群启动并初始化
1.启动每台机器上面的JournalNode节点
涉及的机器为:hadoop201 hadoop202 hadoop203
步骤:hadoop用户登陆每台机器,使用 nohup /app/hadoop/hadoop/hadoop-2.5.2/sbin/hadoop-daemon.sh start journalnode &
2.启动NameNode节点,此时NN的状态都是standby状态(由于还没有启动FC)
涉及的机器为:hadoop201 hadoop202
步骤:
1.通过hadoop账户登陆hadoop201。执行 /app/hadoop/hadoop/hadoop-2.5.2/bin/hdfs zkfc –formatZK
2.继续在hadoop201这台机器上面,执行 nohup /app/hadoop/hadoop/hadoop-2.5.2/sbin/hadoop-daemon.sh start namenode &
3.通过hadoop账户登陆hadoop202。执行 /app/hadoop/hadoop/hadoop-2.5.2/bin/hdfs namenode -bootstrapStandby
4.继续在hadoop202上面,执行 nohup /app/hadoop/hadoop/hadoop-2.5.2/sbin/hadoop-daemon.sh start namenode &
最后通过jps命令查看进程状态,检查logs目录下面相关NN的log是否有异常。确保NN进程已经正常启动
3.启动FC(ZooKeeperFailoverController)进程
涉及的机器为:hadoop201 hadoop202
步骤:
1.通过hadoop账户登陆hadoop201。执行 nohup /app/hadoop/hadoop/hadoop-2.5.2/sbin/hadoop-daemon.sh start zkfc &
2.通过hadoop账户登陆hadoop202。执行 nohup /app/hadoop/hadoop/hadoop-2.5.2/sbin/hadoop-daemon.sh start zkfc &
最后通过jps命令查看进程状态,检查logs目录下面相关FC的log是否有异常。确保FC进程已经正常启动。此时,2个NN节点将由一个是active状态,另外一个是standby状态。
4.启动datanode节点
涉及的机器为:hadoop201 hadoop202 hadoop203 hadoop204
步骤:
1.通过hadoop账户登陆每一台机器。执行 nohup /app/hadoop/hadoop/hadoop-2.5.2/sbin/hadoop-daemon.sh start datanode &
最后通过jps命令查看进程状态,检查logs目录下面相关DN的log是否有异常。确保DN进程已经正常启动。
5.启动Yarn的Rm的HA模式
涉及的机器为:hadoop201 hadoop202
步骤:
1.通过hadoop账户登陆hadoop201。执行 nohup /app/hadoop/hadoop/hadoop-2.5.2/bin/yarn resourcemanager &
2.通过hadoop账户登陆hadoop202。执行 nohup /app/hadoop/hadoop/hadoop-2.5.2/bin/yarn resourcemanager &
最后通过jps命令查看进程状态,检查logs目录下面相关rm的log是否有异常。确保Yarn的rm进程已经正常启动。
6.启动Yarn的NodeManage
涉及的机器为:hadoop201 hadoop202 hadoop203 hadoop204
步骤:
1.通过hadoop账户登陆每一台机器。执行 nohup /app/hadoop/hadoop/hadoop-2.5.2/bin/yarn nodemanager &
最后通过jps命令查看进程状态,检查logs目录下面相关nm的log是否有异常。确保Yarn的nm进程已经正常启动。
7.NameNode的HA模式验证
我们设计了两个维度的测试矩阵:系统失效方式,客户端连接模型
系统失效有两种:
终止NameNode进程:
ZKFC主动释放锁 模拟机器OOM、死锁、硬件性能骤降等故障
NN机器掉电:
ZK锁超时 模拟网络和交换机故障、以及掉电本身
客户端连接也是两种:
已连接的客户端(持续拷贝96M的文件,1M每块)
通过增加块的数目,我们希望客户端会不断的向NN去申请新的块;一般是在第一个文件快结束或第二个文件刚开始拷贝的时候使系统失效。
新发起连接的客户端(持续拷贝96M的文件,100M每块) 因为只有一个块,所以在实际拷贝过程中失效并不会立刻导致客户端或DN报错,但下一次新发起连接的客户端会一开始就没有NN可连;一般是在第一个文件快结束拷贝时使系统失效。 针对每一种组合,我们反复测试10-30次,每次拷贝5个文件进入HDFS,因为时间不一定掐的很准,所以有时候也会是在第三或第四个文件的时候才使系统失效,不管如何,我们会在结束后从HDFS里取出所有文件,并挨个检查文件MD5,以确保数据的完整性。
测试结果如下:
ZKFC主动释放锁
5-8秒切换(需同步edits)
客户端偶尔会有重试(~10%)
但从未失败
ZK锁超时
15-20s切换(超时设置为10s)
客户端重试几率变大(~75%)
且偶有失败(~15%),但仅见于已连接客户端
可确保数据完整性
MD5校验从未出错 +失败时客户端有Exception
我们的结论是:Hadoop 2.0里的HDFS HA基本可满足高可用性
总结:
Hadoop2提供了NN与Rm的HA模式,为生产系统提供了高可用的保证,而且Yarn对多种分布式计算提供更为高效的资源管理,官方也是建议大家升级到hadoop2。笔者认为hadoop2的最大优势就是yarn的资源管理,先进的管理模式使后续很多的分布式应用程序,例如:spark、storm与samza等都是基于yarn。
访问链接:
NN(hadoop201)节点访问链接 http://10.71.84.237:50070/dfshealth.htm
NN(hadoop202)节点访问链接 http://10.71.84.237:50070/dfshealth.htm
Yarn(hadoop201)RM访问链接 http://10.71.84.237:8088/cluster
以上是关于hadoop分布式部署(转载)--贼靠谱的主要内容,如果未能解决你的问题,请参考以下文章
大数据之---hadoop伪分布式部署(HDFS)全网终极篇