简单了解一下Hadoop2.x时代的组成:
HDFS 负责数据存储
Yarn 负责资源调度
MapReduce 负责计算
Common 辅助工具
HDFS(Hadoop Distributed File System)
(1)NameNode (nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的快列表和块所在的DataNode等。
(2)DataNode (dn):在本地文件系统存储文件块数据,以及块数据的校验和。
(3)Secondary NameNode (2nn):用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
MapReduce 将计算过程分为两个阶段:Map和Reduce:
(1)Map阶段并行处理输入数据。
(2)Reduce阶段对Map结果进行汇总
前期准备这一部分看需求进行配置
修改 vim /etc/udev/rules.d/70-persistent-net.rules , 拷贝mac地址
修改 vim /etc/sysconfig/network-scripts/ifcfg-eth0 , 修改mac地址以及IP地址
修改 vim /etc/sysconfig/network 修改主机名
修改 vim /etc/hosts ,配置 IP与主机名的映射.
vim /etc/sysconfig/network
配置IP与主机名的映射:
vim /etc/hosts
添加如下内容:
192.168.17.101 hadoop101
192.168.17.102 hadoop102
192.168.17.103 hadoop103
192.168.17.104 hadoop104
service iptables status
临时关闭防火墙:
service iptables stop
开机时关闭防火墙:
chkconfig iptables off
useradd fseast
passwd fseast
fseast ALL=(ALL) NOPASSWD:ALL
NOPASSWD是普通用户sudo的时候不需要密码。
接下来的操作都将使用fseast用户操作
chown fseast:fseast 目录
关闭图形化界面:
修改 /etc/inittab
id:3:initdefault:
这里使用的Linux版本是Centos6.8,
JDK版本是1.8,
Hadoop版本是2.7.2
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
配置环境变量:
在/etc/profile文件加上:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
使其生效:
source /etc/profile
测试jdk是否安装成功:
java -version
Hadoop下载地址:
https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
解压后查看目录结构:
(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使其生效:
source /etc/profile
测试是否安装成功:
hadoop version
Hadoop配置文件分为两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:
(2)自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
(1). 修改配置文件:
进入/opt/module/hadoop-2.7.2/etc/hadoop
目录
(a)配置:hadoop-env.sh
修改改配置文件的JAVA_HOME路径(其实单台节点不配JAVA_HOME也可以读的到该变量):
export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置:core-site.xml
<configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://hadoop101:9000value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/opt/module/hadoop-2.7.2/data/tmpvalue>
property>
configuration>
(c)配置:hdfs-site.xml
<configuration>
<property>
<name>dfs.replicationname>
<value>1value>
property>
configuration>
(2). 启动集群
(a)格式化NameNode(第一次启动时格式化,以后就不要总格式化,原因下面说)
bin/hdfs namenode -format
(b)启动NameNode
hadoop-daemon.sh start namenode
(c)启动DataNode
hadoop-daemon.sh start datanode
(3). 查看集群
(a)查看是否启动成功
[fseast@hadoop101 hadoop-2.7.2]$ jps
5203 DataNode
5353 Jps
5102 NameNode
(b)web端查看HDFS文件系统
http://hadoop101:50070/
使用hadoop101的话需要配置Windows的hosts文件。
成功进入:
(c)查看产生的Log日志
要习惯根据日志提示信息去分析问题、解决Bug。
这里日志文件目录为:/opt/module/hadoop-2.7.2/logs
(4). 操作集群:
(a)在HDFS文件系统上创建一个input文件夹
hdfs dfs -mkdir -p /user/fseast/input
(b)将测试文件内容上传到文件系统上
先在本地创建一个文件wc.input,并写入一些单词,然后上传到文件系统上:
hdfs dfs -put wc.input /user/fseast/input
(c)运行MapReduce程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/fseast/input/ /user/fseast/output
这个 /user/fseast/output目录不用提前在HDFS创建。
(d)查看输出结果
hdfs dfs -cat /user/fseast/output/*
【为什么不能重复格式化NameNode?】
Hadoop的NameNode和DataNode有对应的clusterID,NameNode的cID在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current/VERSION文件中,DataNode的cID在/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/VERSION文件中,正常情况下这NameNode和DataNode的cID要一致。当重复格式化NameNode的时候,会导致NameNode的clusterID与DataNode的clusterID不一致。启动的时候便会出现问题。
所以,以后一定要格式化的时候,先关闭进程,删除/opt/module/hadoop-2.7.2下的data和logs这两个目录。
我截了NameNode的clusterID与DataNode的clusterID:
(1)配置集群
(a)配置yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置yarn-site.xml
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.resourcemanager.hostnamename>
<value>hadoop101value>
property>
(c)配置:mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(d)配置: (对mapred-site.xml.template复制一份并重新命名为) mapred-site.xml
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
切记上面的配置都要在
内
(2)启动集群
(a)启动前必须保证NameNode和DataNode已经启动
(b)启动ResourceManager
yarn-daemon.sh start resourcemanager
(c)启动NodeManager
yarn-daemon.sh start nodemanager
截图:
(3)集群操作
(a)YARN的浏览器页面查看:http://hadoop101:8088
如图所示:
(b)删除文件系统上的output文件
hdfs dfs -rm -R /user/fseast/output
(c)执行MapReduce程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/fseast/input /user/fseast/output
执行MapReduce程序的时候,如果你一直刷新页面,就可以看的到变化:
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop101:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>hadoop101:19888value>
property>
mr-jobhistory-daemon.sh start historyserver
<property>
<name>yarn.log-aggregation-enablename>
<value>truevalue>
property>
<property>
<name>yarn.log-aggregation.retain-secondsname>
<value>604800value>
property>
[fseast@hadoop101 hadoop]$ yarn-daemon.sh stop resourcemanager
[fseast@hadoop101 hadoop]$ yarn-daemon.sh stop nodemanager
[fseast@hadoop101 hadoop]$ mr-jobhistory-daemon.sh stop historyserver
[fseast@hadoop101 hadoop]$ yarn-daemon.sh start resourcemanager
[fseast@hadoop101 hadoop]$ yarn-daemon.sh start nodemanager
[fseast@hadoop101 hadoop]$ mr-jobhistory-daemon.sh start historyserver
hdfs dfs -rm -R /user/fseast/output
[fseast@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/fseast/input /user/fseast/output
再按照上面,查看日志,
先进JobHistory,http://hadoop101:19888/jobhistory
再准备三台虚拟机:hadoop102、hadoop103、hadoop104,修改主机名,IP地址,配置/etc/hosts文件,
[fseast@hadoop101 opt]$ scp -r /opt/module root@hadoop102:/opt/
[fseast@hadoop101 opt]$ scp -r /opt/module root@hadoop103:/opt/
[fseast@hadoop101 opt]$ scp -r /opt/module root@hadoop104:/opt/
改变传过去目录的所有者:
[fseast@hadoop102 opt]$ sudo chown fseast:fseast -R module/
实例:
把hadoop101机器上的/opt/software目录同步到hadoop102服务器的root用户下的/opt/目录:
[fseast@hadoop101 opt]$ sudo rsync -av /opt/software/ hadoop102:/opt/software
拷贝环境变量配置文件:
[fseast@hadoop101 etc]$ sudo rsync -av /etc/profile hadoop102:/etc/profile
使环境变量生效:source /etc/profile
脚本实现:
目的:后面在hadoop102节点上修改了某些文件时,不需要一个个传到另外两个节点,启动 shell 脚本时加上参数即可:
(a)在/home/fseast目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
[fseast@hadoop102 ~]$ mkdir bin
[fseast@hadoop102 ~]$ cd bin/
[fseast@hadoop102 bin]$ touch xsync
[fseast@hadoop102 bin]$ vim xsync
在该文件中编写如下代码:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=103; host<105; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
(b)修改脚本 xsync 具有执行权限
[fseast@hadoop102 bin]$ chmod 777 xsync
(c)调用脚本形式:xsync 文件名称
如:
把/home/fseast/bin同步到其他两台节点:
[fseast@hadoop102 bin]$ xsync /home/fseast/bin
注意:如果将xsync放到/home/fseast/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。出现不能使用的情况,大多是全局变量PATH没有/home/fseast/bin路径。
以下的完全分布式配置是完整的配置,也就是默认没有配置伪分布式情况下的。
配置文件三个.env结尾的文件都只是配了 JAVA_HOME ,所以也可不配,只需要在/home/fseast/.bashrc文件中加上 source /etc/profile |
[fseast@hadoop102 ~]$ ssh-keygen -t rsa
然后按三次回车,就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(2) 将公钥拷贝到要免密登录的目标机器上
[fseast@hadoop102 .ssh]$ ssh-copy-id hadoop102
[fseast@hadoop102 .ssh]$ ssh-copy-id hadoop103
[fseast@hadoop102 .ssh]$ ssh-copy-id hadoop104
在hadoop103也要做相同操作,这里hadoop104可以操作也可以不做。
(1)核心配置文件
配置core-site.xml(伪分布式配过,只需要修改NameNode的节点名即可。):
<property>
<name>fs.defaultFSname>
<value>hdfs://hadoop102:9000value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/opt/module/hadoop-2.7.2/data/tmpvalue>
property>
(2)HDFS配置文件
配置hadoop-env.sh(伪分布式配过):
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置hdfs-site.xml(副本数量伪分布式配过,不过需要修改):
<property>
<name>dfs.replicationname>
<value>3value>
property>
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>hadoop104:50090value>
property>
(3)YARN配置文件
配置yarn-env.sh(伪分布式配过):
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置yarn-site.xml(伪分布式配过,需要修改ResourceManager的地址,前面配的日志聚集也可保留):
<property>
<name>yarn.log-aggregation-enablename>
<value>truevalue>
property>
<property>
<name>yarn.log-aggregation.retain-secondsname>
<value>604800value>
property>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.resourcemanager.hostnamename>
<value>hadoop103value>
property>
(4)MapReduce配置文件
配置mapred-env.sh(伪分布式配过):
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置mapred-site.xml(伪分布配过,没配过的需要复制mapred-site.xml.template文件并改名为mapred-site.xml再配置):
<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop102:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>hadoop102:19888value>
property>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
(5)配置slaves(没有配过):
为了群起集群的时候,知道哪台节点是从节点
hadoop102
hadoop103
hadoop104
[fseast@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
hdfs namenode -format
(2)启动HDFS
在hadoop102(NameNode)执行:
start-dfs.sh
(3)启动YARN
在hadoop103(ResourceManager)执行:
start-yarn.sh
(4)Web端查看SecondaryNameNode:
http://hadoop104:50090
各个服务组件逐一启动/停止
(1)分别启动/停止HDFS组件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
hadoop-daemon.sh start / stop datanode
hadoop-daemon.sh start / stop secondarynamenode
(2)启动/停止YARN
yarn-daemon.sh start / stop resourcemanager
yarn-daemon.sh start / stop nodemanager
各个模块分开启动/停止(配置ssh是前提)
(1)整体启动/停止HDFS
start-dfs.sh / stop-dfs.sh
(2)整体启动/停止YARN
start-yarn.sh / stop-yarn.sh
下一篇:阿里云服务器上的Hadoop伪分布式和完全分布式的搭建