hadoop本地、伪分布、真分布、HA模式实践



1、基础环境:

    需要准备vmware、centos7、JDK8+、putty(ssh远程工具)、WinSCP(sftp连接工具,用于传文件到linux)、hadoop-2.9.1.tar

   基础环境安装不做介绍,网上教程很多。安装完成后效果

putty通过ssh远程:

 hadoop本地、伪分布、真分布、HA模式实践

WinSCP通过SFTP远程:

 hadoop本地、伪分布、真分布、HA模式实践

2、安装jdk:

    1)、安装jdk: rpm -ivh jdk-10.0.1_linux-x64_bin.rpm

    2)、设置默认JDK:alternatives --config java

   3)、设置环境变量:

    vim /etc/profile

    增加下列内容

export JAVA_HOME=/usr/java/jdk-10.0.1

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

source /etc/profie(永久生效,否则作用于当前会话,重启后会失效)

4)、测试jdk安装是否成功 :使用java、javac命令看是否能打印出帮助信息。

3、配置主机名称:

1)、$ vim /etc/sysconfig/network

设置

NETWORKING=yes  #使用网络

HOSTNAME=server1  #设置主机名

2)、$ vim /etc/hosts

添加

192.168.0.13 server1

3)、$ vim /etc/hostname

修改

server1

 

4、配置hadoop

    首先介绍下hadoop的三种模式:本地模式(安装就可以,无需任何配置)、伪分布式模式(NameNode、DataNode运行在同一台机器)、真分步式模式(NameNode、DataNode运行在不同机器,至少需要3台虚拟机,1个NameNode,2个DataNode)

1)、伪分步式模式:

1、将安装包解压到/opt/modules/hadoop

2、HADOOP配置环境变量:vim /etc/profile

export HADOOP_HOME=/opt/modules/hadoop/hadoop-2.9.1

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

3、配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh文件的JAVA_HOME参数(高版本有可能已配置,检查下)

vim ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh

修改JAVA_HOME参数为:

export JAVA_HOME=/usr/java/jdk-10.0.1

4、配置core-site.xml

 hadoop本地、伪分布、真分布、HA模式实践

hadoop本地、伪分布、真分布、HA模式实践

<property>
   <name>fs.defaultFS</name>
   <value>hdfs://localhost:8020</value>
</property>
<property>
   <name>hadoop.tmp.dir</name>
   <value>/opt/data/tmp(这个目录需要自己创建</value>

</property>

1) fs.defaultFS参数配置的是HDFS的地址

2)默认的hadoop.tmp.dir是/tmp/hadoop-${user.name},此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。

5、配置hdfs-site.xml

 hadoop本地、伪分布、真分布、HA模式实践

<property>
   <name>dfs.replication</name>
   <value>1</value>
</property>

dfs.replication配置的是HDFS存储时的备份数量,因为这里是伪分布式环境只有一个节点,所以这里设置为1(默认是复制3份)。

6、格式化HFDS:hdfs namenode -format(注意“-”是中文格式)

启动NameNode:hadoop-daemon.sh start namenode

启动DataNode:hadoop-daemon.sh start datanode

启动SecondaryNameNode:hadoop-daemon.sh start secondarynamenode

JPS命令查看是否已经启动成功,有结果就是启动成功了。

测试hdfs:

创建文件夹:hdfs dfs -mkdir /demo

上传文件:hdfs dfs -put /opt/data/test.txt /demo

查看文件:hdfs dfs -cat /demo/test.txt

下载文件:hdfs dfs -get /demo/test.txt text2.txt

7、配置、启动YARN

1)配置mapred-site.xml:

mapred-site.xml.template复制一份命名为mapred-site.xml,增加

<!--指定mapreduce运行在yarn框架上-->

<property>

  <name>mapreduce.framework.name</name>

  <value>yarn</value>

</property>

<!--指定MR总内存大小,默认是1536M,机器内存小于改值需要调整-->

<property>

 <name>yarn.app.mapreduce.am.resource.mb</name>

 <value>256</value>

</property>

 hadoop本地、伪分布、真分布、HA模式实践

 hadoop本地、伪分布、真分布、HA模式实践

2)、配置yarn-site.xml

 hadoop本地、伪分布、真分布、HA模式实践

<!--配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法-->

<property>

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce_shuffle</value>

</property>

<!--指定Resourcemanager运行在哪个节点上-->

<property>

  <name>yarn.resourcemanager.hostname</name>

  <value>192.168.0.13</value>

</property>

<!--指定nodemanager运行在哪个节点上-->

<property>

  <name>yarn.nodemanager.hostname</name>

  <value>192.168.0.13</value>

</property>

<!--单个任务可申请的最小内存资源量 单位:M-->

<property>

 <name>yarn.scheduler.minimum-allocation-mb</name>

 <value>512</value>

</property>

<!--单个任务可申请的最大内存资源量 单位:M-->

<property>

 <name>yarn.scheduler.maximum-allocation-mb</name>

 <value>1024</value>

</property>

<!--NodeManager总的可用物理内存 单位:M-->

<property>

 <name>yarn.nodemanager.resource.memory-mb</name>

 <value>1536</value>

</property>

<!--是否启用虚拟内存检查 虚拟内存倍数默认2.1,如果开启虚拟内存检查(vmem-check-enabled=true),虚拟内存倍数(vmem-pmem-ratio=2.1)不做调整,容易出现虚拟内存溢出,一般解决方案是调整这两个参数-->

<property>  

 <name>yarn.nodemanager.vmem-check-enabled</name>  

 <value>false</value>  

</property>  

3)、

启动Resourcemanager:yarn-daemon.sh start resourcemanager

启动nodemanager:yarn-daemon.sh start nodemanager

查看是否启动成功:jps

 hadoop本地、伪分布、真分布、HA模式实践

4)访问yarn:YARN的Web客户端端口号是8088,通过http://192.168.0.13:8088/可以查看。

8、运行MapReduce Job

上传文件:hdfs dfs -put /opt/data/test.txt /demo/

运行WordCount MapReduce Job:yarn jar /opt/modules/hadoop/hadoop-2.9.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar wordcount /demo /demo/output

查看运算结果是否存在:hdfs dfs -ls /demo(存在output目录)

查看运算结果:hdfs dfs -cat /demo/output/part-r-00000

 hadoop本地、伪分布、真分布、HA模式实践

9、开启历史记录服务

mr-jobhistory-daemon.sh start historyserver

历史记录 Web客户端:http://192.168.0.13:19888/

2)、真分步式模式:

server1

server2

server3

NameNode

ResourceManage

 

DataNode

DataNode

DataNode

NodeManager

NodeManager

NodeManager

 

 

SecondaryNameNode

 

 

HistoryServer

 

1、克隆server1虚拟机------------------>server2server3

2、编辑hosts文件

$ vim /etc/hosts

添加

192.168.0.5 server1

192.168.0.13 server2

192.168.0.6 server3

注意,需要放在最前面,不然有可能会出现异常问题。

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

3、调整配置文件

core-site.xml:

<configuration>

<property>

   <name>fs.defaultFS</name>

   <value>hdfs://server1:8020(server1(namenode节点)使用0.0.0.0或192.168.0.5,否则会发布成127.0.0.1)</value>

</property>

<property>

   <name>hadoop.tmp.dir</name>

   <value>/opt/data/tmp</value>

</property>

<property>

   <name>dfs.namenode.name.dir</name>

   <value>file://${hadoop.tmp.dir}/dfs/name</value>

</property>

<property>

   <name>dfs.datanode.data.dir</name>

   <value>file://${hadoop.tmp.dir}/dfs/data</value>

</property>

</configuration>

 

hdfs-site.xml:

<configuration>

<property>

   <name>dfs.replication</name>

   <value>1</value>

</property>

<property>

     <name>dfs.namenode.secondary.http-address</name>

   <value>server3:50090</value>

</property>

</configuration>

 

mapred-site.xml:

<configuration>

<property>

  <name>mapreduce.framework.name</name>

  <value>yarn</value>

</property>

<property>

 <name>yarn.app.mapreduce.am.resource.mb</name>

 <value>512</value>

</property>

<property>

 <name>mapreduce.map.memory.mb</name>

 <value>512</value>

</property>

<property>

 <name>mapreduce.reduce.memory.mb</name>

 <value>512</value>

</property>

<property>

  <name>mapreduce.jobhistory.address</name>

  <value>server1:10020</value>

</property>

<property>

  <name>mapreduce.jobhistory.webapp.address</name>

  <value>server1:19888</value>

</property>

</configuration>

 

slaves(记录所有datanode主机名):

server1

server2

server3

 

 

yarn-site.xml:

<configuration>

<property>

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce_shuffle</value>

</property>

<property>

  <name>yarn.resourcemanager.hostname</name>

  <value>server2(server2(resourcemanager节点)使用0.0.0.0或外部能够访问端口,否则会发布成127.0.0.1</value>

</property>

<property>

  <name>yarn.resourcemanager.address</name>

  <value>0.0.0.0:8032</value>

</property>

<property>

 <name>yarn.scheduler.minimum-allocation-mb</name>

 <value>256</value>

</property>

<property>

 <name>yarn.scheduler.maximum-allocation-mb</name>

 <value>512</value>

</property>

<property>

 <name>yarn.nodemanager.resource.memory-mb</name>

 <value>768</value>

</property>

<property>  

 <name>yarn.nodemanager.vmem-check-enabled</name>  

 <value>false</value>  

</property>

<property>

 <name>yarn.log-aggregation-enable</name>

 <value>true</value>

</property>

<property>

 <name>yarn.log-aggregation.retain-seconds</name>

 <value>86400</value>

</property>

<property>

 <name>yarn.nodemanager.hostname</name>

 <value>0.0.0.0</value>

</property>

<property>

 <name>yarn.nodemanager.address</name>

 <value>0.0.0.0:39349(39349是数据节点的随机端口号,最好所有节点保持一致</value>

</property>

</configuration>

 

4、格式化磁盘(server1(namenode节点)执行

hdfs namenode -format

 

5、启动hadoop

namenode端执行(server1):

start-dfs.sh(启动namenode、secondarynamenode、datanode)

start-yarn.sh(启动nodemanager)

#start-all.sh=start-dfs.sh+start-yarn.sh

 

resourcemanager端执行(server2):

yarn-daemon.sh start resourcemanager

 

historyserver端执行(server3):

mr-jobhistory-daemon.sh start historyserver

 

6、查看HDFS Web页面:http://server1:50070/

 hadoop本地、伪分布、真分布、HA模式实践

7、查看YARN Web 页面:http://server2:8088/cluster

 hadoop本地、伪分布、真分布、HA模式实践

8、测试

创建文件夹:hdfs dfs -mkdir /demo

上传文件:hdfs dfs -put /opt/data/test2.txt /demo/test.txt

删除输出目录:hdfs dfs -rm -r /demo/output

测试单词计数:yarn jar /opt/modules/hadoop/hadoop-2.9.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar wordcount /demo /demo/output

3)、HA模式:

High Availability高可用,指当前工作中的机器宕机后,会自动处理这个异常,并将工作无缝地转移到其他备用机器上去,以来保证服务的高可用。

HA方式安装部署才是最常见的生产环境上的安装部署方式。Hadoop HA是Hadoop 2.x中新添加的特性,包括NameNode HA 和 ResourceManager HA。因为DataNode和NodeManager本身就是被设计为高可用的,所以不用对他们进行特殊的高可用处理。

1、配置时间服务器(NTP服务器)[直接在server3上配置]

1)、检查ntp服务是否已经安装:sudo rpm -qa | grep ntp

2)、安装ntp:yum install -y ntp ntpdate

3)、配置NTP服务:vim /etc/ntp.conf 

增加:

restrict 192.168.0.0 mask 255.155.155.0 nomodify notrap

server 127.127.1.0

fudge 127.127.1.0 stratum 10

4)、启动服务:

--将ntp服务设为开机启动

chkconfig ntpd on

--启动ntp服务

service ntpd start

5)、配置客户端(server1、server2):

yum install -y ntp

crontab -e

添加

* * * 1 * /usr/sbin/ntpdate server31个月从server3同步一次时间


 参考:https://blog.csdn.net/hliq5399/article/details/78193113