Hadoop(二)CentOS7.5搭建Hadoop2.7.6完全分布式集群
一 完全分布式集群(单点)
Hadoop官方地址:http://hadoop.apache.org/
1 准备3台客户机
1.1防火墙,静态IP,主机名
关闭防火墙,设置静态IP,主机名此处略,参考 Linux之CentOS7.5安装及克隆
1.2 修改host文件
我们希望三个主机之间都能够使用主机名称的方式相互访问而不是IP,我们需要在hosts中配置其他主机的host。因此我们在主机的/etc/hosts下均进行如下配置:
[root@node21 ~]# vi /etc/hosts 配置主机host 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.100.21 node21 192.168.100.22 node22 192.168.100.23 node23 将配置发送到其他主机(同时在其他主机上配置) [root@node21 ~]# scp -r /etc/hosts root@node22:/etc/ [root@node21 ~]# scp -r /etc/hosts root@node23:/etc/ 测试 [root@node21 ~]# ping node21 [root@node21 ~]# ping node22 [root@node21 ~]# ping node23
1.3 添加用户账号
在所有的主机下均建立一个账号admin用来运行hadoop ,并将其添加至sudoers中 [root@node21 ~]# useradd admin 添加用户通过手动输入修改密码 [root@node21 ~]# passwd admin 更改用户 admin 的密码 123456 passwd: 所有的身份验证令牌已经成功更新。 设置admin用户具有root权限 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示: [root@node21 ~]# visudo ## Allow root to run any commands anywhere root ALL=(ALL) ALL admin ALL=(ALL) ALL 修改完毕 :wq! 保存退出,现在可以用admin帐号登录,然后用命令 su - ,切换用户即可获得root权限进行操作。
1.4 /opt目录下创建文件夹
1)在root用户下创建module、software文件夹 [root@node21 opt]# mkdir module [root@node21 opt]# mkdir software 2)修改module、software文件夹的所有者 [root@node21 opt]# chown admin:admin module [root@node21 opt]# chown admin:admin software 3)查看module、software文件夹的所有者 [root@node21 opt]# ll total 0 drwxr-xr-x. 5 admin admin 64 May 27 00:24 module drwxr-xr-x. 2 admin admin 267 May 26 11:56 software
2 安装配置jdk1.8
[deng@node21 ~]# rpm -qa|grep java #查询是否安装java软件: [deng@node21 ~]# rpm -e –nodeps 软件包 #如果安装的版本低于1.7,卸载该jdk 在线安装 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz 这里使用本地下载然后 xftp上传到 /opt/software/ 下 [root@node21 software]# tar zxvf jdk-8u171-linux-x64.tar.gz -C /opt/module/ [root@node21 module]# mv jdk1.8.0_171 jdk1.8 设置JAVA_HOME vi /etc/profile export JAVA_HOME=/opt/module/jdk1.8 export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/sbin source /etc/profile 向其他节点复制jdk [root@node21 ~]# scp -r /opt/module/jdk1.8 root@node22:`pwd` [root@node21 ~]# scp -r /opt/module/jdk1.8 root@node23:`pwd` 配置各个主机下jdk的环境变量,由于我的电脑上linux都是新安装的,环境变量相同,因此直接复制到了其他主机上。如果不同的主机的环境变量不同,请手动设置 [root@node21 ~]# scp /etc/profile root@node22:/etc/ [root@node21 ~]# scp /etc/profile root@node23:/etc/ 在每个主机上都重新编译一下/etc/profile [root@node21]# source /etc/profile 测试 java -version
3 安装hadoop集群
3.1 集群部署规划
节点名称 | NN1 | NN2 | DN | RM | NM |
node21 | NameNode | DataNode | NodeManager | ||
node22 | SecondaryNameNode | DataNode | ResourceManager | NodeManager | |
node23 | DataNode | NodeManager |
3.2 设置SSH免密钥
关于ssh免密码的设置,要求每两台主机之间设置免密码,自己的主机与自己的主机之间也要求设置免密码。 这项操作可以在admin用户下执行,执行完毕公钥在/home/admin/.ssh/id_rsa.pub
[admin@node21 ~]# ssh-keygen -t rsa [admin@node21 ~]# ssh-copy-id node21 [admin@node21 ~]# ssh-copy-id node22 [admin@node21 ~]# ssh-copy-id node23
node1与node2为namenode节点要相互免秘钥 HDFS的HA
[admin@node22 ~]# ssh-keygen -t rsa [admin@node22 ~]# ssh-copy-id node22 [admin@node22 ~]# ssh-copy-id node21 [admin@node22 ~]# ssh-copy-id node23
node2与node3为yarn节点要相互免秘钥 YARN的HA
[admin@node23 ~]# ssh-keygen -t rsa [admin@node23 ~]# ssh-copy-id node23 [admin@node23 ~]# ssh-copy-id node21 [admin@node23 ~]# ssh-copy-id node22
3.3 解压安装hadoop
[admin@node21 software]# tar zxvf hadoop-2.7.6.tar.gz -C /opt/module/
4 配置hadoop集群
注意:配置文件在hadoop2.7.6/etc/hadoop/下
4.1 修改core-site.xml
[admin@node21 hadoop]$ vi core-site.xml <configuration> <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://node21:9000</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.6/data/full/tmp</value> </property> </configuration>
4.2 修改hadoop-env.sh
[admin@node21 hadoop]$ vi hadoop-env.sh 修改 export JAVA_HOME=/opt/module/jdk1.8
4.3 修改hdfs-site.xml
[admin@node21 hadoop]$ vi hdfs-site.xml <configuration> <!-- 设置dfs副本数,不设置默认是3个 --> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 设置secondname的端口 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>node22:50090</value> </property> </configuration>
4.4 修改slaves
[admin@node21 hadoop]$ vi slaves node21 node22 node23
4.5 修改mapred-env.sh
[admin@node21 hadoop]$ vi mapred-env.sh 修改 export JAVA_HOME=/opt/module/jdk1.8
4.6 修改mapred-site.xml
[admin@node21 hadoop]# mv mapred-site.xml.template mapred-site.xml [admin@node21 hadoop]$ vi mapred-site.xml <configuration> <!-- 指定mr运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
4.7 修改yarn-env.sh
[admin@node21 hadoop]$ vi yarn-env.sh 修改 export JAVA_HOME=/opt/module/jdk1.8
4.8 修改yarn-site.xml
[admin@node21 hadoop]$ vi 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>node22</value> </property> </configuration>
4.9 分发hadoop到节点
[admin@node21 module]# scp -r hadoop-2.7.6/ admin@node22:`pwd` [admin@node21 module]# scp -r hadoop-2.7.6/ admin@node23:`pwd`
4.10 配置环境变量
[admin@node21 ~]$ sudo vi /etc/profile 末尾追加 export HADOOP_HOME=/opt/module/hadoop-2.7.6 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 编译生效 source /etc/profile
5 启动验证集群
5.1 启动集群
如果集群是第一次启动,需要格式化namenode
[admin@node21 hadoop-2.7.6]$ hdfs namenode -format
18/05/30 02:51:39 INFO input.FileInputFormat: Total input paths to process : 1 18/05/30 02:51:40 INFO mapreduce.JobSubmitter: number of splits:1 18/05/30 02:51:40 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1527660052824_0001 18/05/30 02:51:42 INFO impl.YarnClientImpl: Submitted application application_1527660052824_0001 18/05/30 02:51:43 INFO mapreduce.Job: The url to track the job: http://node22:8088/proxy/application_1527660052824_0001/ 18/05/30 02:51:43 INFO mapreduce.Job: Running job: job_1527660052824_0001 18/05/30 02:52:33 INFO mapreduce.Job: Job job_1527660052824_0001 running in uber mode : false 18/05/30 02:52:33 INFO mapreduce.Job: map 0% reduce 0% 18/05/30 02:53:04 INFO mapreduce.Job: map 100% reduce 0% 18/05/30 02:53:17 INFO mapreduce.Job: map 100% reduce 100% 18/05/30 02:53:19 INFO mapreduce.Job: Job job_1527660052824_0001 completed successfully 18/05/30 02:53:19 INFO mapreduce.Job: Counters: 49 File System Counters FILE: Number of bytes read=102 FILE: Number of bytes written=250513 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 HDFS: Number of bytes read=188 HDFS: Number of bytes written=64 HDFS: Number of read operations=6 HDFS: Number of large read operations=0 HDFS: Number of write operations=2 Job Counters Launched map tasks=1 Launched reduce tasks=1 Data-local map tasks=1 Total time spent by all maps in occupied slots (ms)=25438 Total time spent by all reduces in occupied slots (ms)=10815 Total time spent by all map tasks (ms)=25438 Total time spent by all reduce tasks (ms)=10815 Total vcore-milliseconds taken by all map tasks=25438 Total vcore-milliseconds taken by all reduce tasks=10815 Total megabyte-milliseconds taken by all map tasks=26048512 Total megabyte-milliseconds taken by all reduce tasks=11074560 Map-Reduce Framework Map input records=4 Map output records=11 Map output bytes=112 Map output materialized bytes=102 Input split bytes=105 Combine input records=11 Combine output records=8 Reduce input groups=8 Reduce shuffle bytes=102 Reduce input records=8 Reduce output records=8 Spilled Records=16 Shuffled Maps =1 Failed Shuffles=0 Merged Map outputs=1 GC time elapsed (ms)=558 CPU time spent (ms)=8320 Physical memory (bytes) snapshot=308072448 Virtual memory (bytes) snapshot=4159348736 Total committed heap usage (bytes)=165810176 Shuffle Errors BAD_ID=0 CONNECTION=0 IO_ERROR=0 WRONG_LENGTH=0 WRONG_MAP=0 WRONG_REDUCE=0 File Input Format Counters Bytes Read=83 File Output Format Counters Bytes Written=64View Code 下载查看
[admin@node21 wcoutput]$ hadoop fs -get /user/admin/output/part-r-00000 [admin@node21 wcoutput]$ ll total 4 -rw-r--r-- 1 admin admin 64 May 30 02:58 part-r-00000 [admin@node21 wcoutput]$ cat part-r-00000 flink 1 flume 1 hadoop 3 hbase 1 hive 1 spark 2 sqoop 1 storm 1
三 配置集群常见错误
1 自动故障转移错误
1.1 两台namenode之间不能通信,kill掉一台Active的namenode节点,另外一台standby不能切换Active
查看namenode日志 或者zkfc日志,nn1 连接 nn2 8020失败
原因分析:若服务器是最小化安装CentOS时,有可能系统没有fuster程序,那么跳过这个安装步骤直接进行后面的操作时,将有可能出现以下问题:
node21作为主节点时,kill掉node21上的NameNode和ResourceManager进程时,可以实现故障转移,node22将从stanby状态自动变成active状态;但是当node22作为主节点时,若kill掉node22上的进程,node21上的进程状态却还是stanby,并不能实现故障自动转移。原因是我们在 hdfs-site.xml中配置了当集群需要故障自动转移时采用SSH方式进行,而因为缺少fuster程序,将在zkfc的日志文件中发现如下错误
PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 9000 via ssh: bash: fuser: 未找到命令 Unable to fence service by any configured method java.lang.RuntimeException: Unable to fence NameNode at node22/192.168.100.22:8020
提示未找到fuster程序,导致无法进行fence,所以可以通过如下命令来安装,Psmisc软件包中包含了fuster程序:
//分别在node21、node22、node23上执行 sudo yum install psmisc
重启Hadoop服务验证成功。
2HDFS启动警告信息
Hadoop2.7.6在安装成功后,start-dfs.sh启动后出现警告提示:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
在Hadoop2.7以后的版本中,
$HADOOP_HOME/lib/native 包下的文件都改为了64位,不存在版本差异化的问题,这里解决方案是在文件hadoop-env.sh中增加如下一行信息
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
再次启动就没有警告提示了。
四 Hadoop集群群启脚本
1启动服务
zookeeper hadoop
2脚本
1 编写启动集群脚本 vi start-cluster.sh
#!/bin/bash echo "****************** 开始启动集群所有节点服务 ****************" echo "****************** 正在启动zookeeper *********************" for i in admin@node21 admin@node22 admin@node23 do ssh $i '/opt/module/zookeeper-3.4.12/bin/zkServer.sh start' done echo "******************** 正在启动HDFS *******************" ssh admin@node21 '/opt/module/hadoop-2.7.6/sbin/start-dfs.sh' echo "********************* 正在启动YARN ******************" ssh admin@node22 '/opt/module/hadoop-2.7.6/sbin/start-yarn.sh' echo "*************** 正在node21上启动JobHistoryServer *********" ssh admin@node21 '/opt/module/hadoop-2.7.6/sbin/mr-jobhistory-daemon.sh start historyserver' echo "****************** 集群启动成功 *******************"*
2 编写关闭集群脚本 vi stop-cluster.sh
#!/bin/bash echo "************* 开在关闭集群所有节点服务 *************" echo "************* 正在node21上关闭JobHistoryServer *************" ssh admin@node21 '/opt/module/hadoop-2.7.6/sbin/mr-jobhistory-daemon.sh stop historyserver' echo "************* 正在关闭YARN *************" ssh admin@node22 '/opt/module/hadoop-2.7.6/sbin/stop-yarn.sh' echo "************* 正在关闭HDFS *************" ssh admin@node21 '/opt/module/hadoop-2.7.6/sbin/stop-dfs.sh' echo "************* 正在关闭zookeeper *************" for i in admin@node21 admin@node22 admin@node23 do ssh $i '/opt/module/zookeeper-3.4.12/bin/zkServer.sh stop' done
3 编写查看集群jps进程脚本utils.sh
#!/bin/bash echo "************* 开始启动JPS **********" echo "************* node21的jps **********" ssh admin@node21 'jps' echo "************* node22的jps **********" ssh admin@node22 'jps' echo "************* node23的jps **********" ssh admin@node23 'jps'
3赋权限给脚本
chmod +x 脚本名称
4其他问题
Linux执行.sh文件,提示No such file or directory的问题的解决方法:
原因:在windows中写好shell脚本测试正常,但是上传到 Linux 上以脚本方式运行命令时提示No such file or directory错误,那么一般是文件格式是dos格式的缘故,改成unix 格式即可。一般有如下几种修改办法。
1)在Windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。
2)方法
用vi打开该sh文件,输入:
:set ff
回车,显示fileformat=dos,重新设置下文件格式:
:set ff=unix
保存退出:
:wq
再执行,就可以了
- VM+CentOS+hadoop2.7搭建hadoop完全分布式集群
- CentOS7搭建HBase1.0完全分布式集群(Hadoop2.6)
- centos7下hadoop2.7完全分布式集群搭建
- 虚拟机下CentOS-6.4搭建Hadoop1.1.2完全分布式集群
- VM+CentOS+hadoop2.7搭建hadoop完全分布式集群
- 基于vmware workstations 10 、centos6.4和hadoop-2.7.1的hadoop完全分布式集群的开发环境搭建
- Hadoop集群完全分布式搭建教程-CentOS
- Hadoop2.7.2 Centos 完全分布式集群环境搭建 (1) - 基础环境准备-1
- Hadoop2.7.2 Centos 完全分布式集群环境搭建 (3) - 问题汇总
- Hadoop集群完全分布式搭建教程-CentOS
- Hadoop2.7.2 Centos 完全分布式集群环境搭建 (1) - 基础环境准备-2
- Centos 7 搭建hadoop-2.6.0和spark1.6.0完全分布式集群教程 (最小化配置)
- CentOS 6.5 搭建Hadoop2.6完全分布式集群
- Hadoop完全分布式集群搭建手记(CentOS6.7+Hadoop2.6手把手胸贴胸详细版)
- hadoop2.7.1在vmware上3台centos7虚拟机上的完全分布式集群搭建
- 搭建hadoop完全分布式集群VM+CentOS+hadoop2.7
- Hadoop完全分布式集群搭建手记(CentOS6.7+Hadoop2.6手把手胸贴胸详细版)
- Hadoop集群完全分布式搭建教程-CentOS
- Hadoop2.7.2 Centos 完全分布式集群环境搭建 (2) - Hadoop安装与配置(完全分布式)