1、Hadoop完全分布式集群
在安装之前你需要做三件事:第一件:你的虚拟机的ip修改好,你的网络可以ping通顺,你的 域名和ip要配置好(/etc/hosts)。
第二件:你需要安装好java8以上的环境。
第三件:你需要安装好hadoop。
2、远程拷贝介绍
方式一:scp
scp -r hadoop100:/opt/module/hadoop-2.9.2 hadoop101:/opt/module
hadoop100对应的是192.168.206.67机器
注意:上面的代码可以放在源机器100上执行,也可以放在目标机器101上执行
方式二:rsync
rsync -av hadoop100:/opt/module/hadoop-2.9.2 /opt/module
hadoop100对应的是192.168.206.67机器
/opt/module为目标机器的路径
注意:上面的代码只能放在目标机器上执行
rsync是完全拷贝,包括时间都一样。该方式拷贝的速度比scp快,我们一般使用这种方式进行拷贝。
3、集群规划
NN:NameNode(一个) DN:DataNode(最少三个) 2NN :Secondary NameNode (一个)
YARN
RM:Resource Manager(一个) NM:Node Manager(最少三个)
DN管理当前节点的存储,NM管理CPU和内存,DN和NM往往是混搭在一起的,所以这两者一共需要三台机器
所以,这里最少需要6台虚拟机,但是我们这里只有三台虚拟机。因此,我们采用让NN,2NN,RM分别和一个DN与NM的混搭机器放在一起
如下图
对于YARN来说:机器3是主机,同时第1,2,3台机器都是从机,也就是说第三台机器即是主机又是从机
这里第一台对应我们的192.168.206.67,也就是hadoop100。
这里第二台对应我们的192.168.206.68,也就是hadoop101。
这里第三台对应我们的192.168.206.69,也就是hadoop102。
4、配置文件
主要配置文件包含: core-site.xml , hdfs-site.xml ,mapred-site.xml , yarn-site.xml 。
env配置文件:hadoop-env.sh , mapped-env.sh , yarn-env.sh,这几个env只修改JAVA_HOME的路径
这里可以在一台机器上进行修改配置文件,然后分发复制到其余的两台机器
(1)<configuration>
<!-- 指定HDFS中NameNode的地址,由于我们修改了hosts文件,这里的hadoop100表示的就是我们本机ip:192.168.206.67 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop100:9000</value> <!--这里我们的NameNode节点就在第一台机器hadoop100上-->
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.9.2/data/tmp</value>
</property>
</configuration>
(2)
<configuration>
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value> <!--这里DN的数量为3,所以我们设置为3-->
</property>
<!-- 指定Hadoop辅助名称节点2NN主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop101:50090</value> <!--这里我们的2NN放在了第二台机器,也就是hadoop101上-->
</property>
</configuration>
<!-- 指定MR运行在Yarn上 -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<configuration>
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 ,这里在hadoop102上-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
</configuration>
5、启动集群
[root@hadoop100 hadoop-2.9.2]# hdfs namenode -format
[root@hadoop100 hadoop-2.9.2]# hadoop-daemon.sh start namenode
[root@hadoop100 hadoop-2.9.2]# hadoop-daemon.sh start datanode
[root@hadoop100 hadoop-2.9.2]# hadoop-daemon.sh start secondarynamenode
到这里就启动完成了。
6、检查是否启动
7、免密登录
ssh-keygen -t rsa
默认生成的文件在root下的.ssh文件夹
生成的键值对是通过base64加密的。想要免密通信则需要把已经生成的公钥发送给需要通信的远程主机。
ssh-copy-id hadoop101
这里的authorized_keys 和100中的id_rsa.pub一样。
上面的在100中进行测试可以发现,不用输入密码,可以直接切换到101机器上,如果需要退出登录的机器,使用exit命令退出。
此时通过ssh hadoop100并不能直接连到本机,因为本机器中没有自己的已经确认的公钥,所以需要发送给自己一份
注意:Hadoop集群的要求是集群中的机器都能互相访问,如下图所示:
注意:上面我们通过手动启动的时候没有配置,NM和DN,但是如果通过群起脚本启动集群,则需要说明
8、群起脚本
在 /opt/module/hadoop-2.9.2/etc/hadoop下的文件在中查找slaves,并在其中配置从机的位置(这里三台都是从机)
[root@hadoop100 hadoop]# vim slaves
删除里面的localhost,添加从机。
1. 启动HDFS
注意:修改完成后需要把修改的配置文件在三台机器上同步,无论修改什么配置都应该如此。
scp -r hadoop100:/opt/module/hadoop-2.9.2/etc/hadoop/ hadoop101:/opt/module/hadoop-2.9.2/etc/
scp -r hadoop100:/opt/module/hadoop-2.9.2/etc/hadoop/ hadoop102:/opt/module/hadoop-2.9.2/etc/
启动的结果如下:
可以看到这里100启动了如下:
101启动了如下:
102启动了如下:
2. 启动YARN
启动的结果如下:
这里是102机器:
101机器:
100机器:
3. 总结
防火墙是否关闭
Hadoop100 | Hadoop101 | Hadoop102 | |
HDFS | NameNode ,DataNode | SecondaryNameNode,DataNode | DataNode |
YARN | NodeManager | NodeManager | ResourceManager,NodeManager |
此时可以访问 hadoop100:50070 和 hadoop102:8088来查看集群的状态,如下图所示:
yarn的情况如下:
注意都是三个节点,如果没有三个节点,则把对应的关闭,重新启动一下。
9、启动和关闭指令
(1)分别启动/停止HDFS组件
hadoop-daemon.sh start | stop namenode | datanode |secondarynamenode
(2)启动/停止YARN
yarn-daemon.sh start |stop resourcemanager | nodemanager
各个模块分开启动/停止(配置ssh是前提)常用
(1)整体启动/停止HDFS
start-dfs.sh | stop-dfs.sh
(2)整体启动/停止YARN
10、测试
1. 上传文件
把hadoop中将自己创建的文件夹上传文件到hdfs
hadoop fs -put wcinput /
2. 在线计算
下面是使用在线计算的指令:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /output
其中 wordcount表示计数功能 , /wcinput 表示我们刚刚上传到hdfs中的目录 ,/output表示我们在hdfs中的输出目录,要求这个目录在hdfs中事先不存在。
11、常用工具
配置之前需要停止hdfs和yarn, 在100中执行stop-dfs.sh, 102中执行stop-yarn.sh 。
(1):历史服务器配置
历史服务器可以帮助我们查看历史记录,在出错的时候非常有用。
<configuration>
<!--指定mapreduce运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>
注意:这里我们的历史服务器在102上,在启动集群之后还要在102上启动历史服务器。
mr-jobhistory-daemon.sh start historyserver
启动完成如下图,可以发现多了个JobHistoryServer ,在关闭集群的时候也要关闭这个历史服务器, 只需要把上述命令的start换成stop就可以了。
(2):日志聚集
这里同样在100机器中中配置 yarn-site.xml,配置完成之后分发到集群中的其他机器。
<configuration>
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
注意:在配置完成之后一定要同步到集群中的其他服务器,这里其余两台机器中都要同步一下。
(3):集群时间同步
时间同步的方式,在集群中找一个机器作为时间服务器,所有的机器都与这台机器进行定时同步,要么时间全对,要么时间全错,比如,每隔十分钟同步一下时间。(NTP服务)
第一步:
1.首先查看系统中是否有ntp服务和nptdata服务
[root@hadoop100 ~]# rpm -qa|grep ntp
如果没有ntp服务,则需要先安装ntp服务,yum install -y ntp ,因为ntp依赖ntpdata,因此只需安装ntp就会默认安装ntp和nptdata。
[root@hadoop100 ~]# rpm -qa|grep ntp
此时查看可以看到新增了ntp和ntpdata
2.查看ntp服务是否开启
service ntpd status
3.输入chkconfig ntpd off ,关闭ntpd
输入chkconfig --list ntpd ,查看是否全部为关闭状态
第二步:修改ntp配置文件
1.时间服务机器配置 (这里是在100上)
[root @hadoop100]# vi /etc/ntp.conf
a)修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)
# restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为 : restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 也就是把注释放开
b)修改2(集群在局域网中,不使用其他互联网上的时间)
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 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
也就是注释掉
c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
d)修改/etc/sysconfig/ntpd 文件
[root @hadoop100]# vim /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
e)重新启动ntpd服务
首先查看ntpd的状态:service ntpd status
如果为关闭状态,则使用 service ntpd start 重新启动。
f)设置ntpd服务开机启动
[ root @hadoop100]# chkconfig ntpd on
2. 其他机器配置(需root权限,时间同步在100上,所以我们需要在集群中的101和102中配置定时任务)
(1)在其他机器(101和102,这里以101为例)配置10分钟与时间服务器同步一次
[root @hadoop101]# crontab -e
*/10 * * * * /usr/sbin/ntpdate hadoop100
date -s "2017-9-11 11:11:11"
(3)十分钟后查看机器是否与时间服务器同步
[root @hadoop101]# date
说明:测试的时候可以将10分钟调整为1分钟,节省时间。
到此hadoop的完全分布式集群就搭建完成了。 END
全部评论