1) 准备一台虚拟机,操作系统 centos7.0
2) 配置虚拟机的静态 ip
3) 修改主机名为 hadoop101
4) 关闭防火墙 sudo systemctl stop firewalld.service
5) 创建 hadoop 用户,并配置 Hadoop 用户具有 root 权限
6)在/opt 目录下创建文件夹
(1)在/opt 目录下创建 install、software 文件夹,分别存放
[hadoop@hadoop101 opt]$ sudo mkdir install
[hadoop@hadoop101 opt]$ sudo mkdir software
(2)修改 install、software 文件夹的所有者
[hadoop@hadoop101 opt]$ sudo chown hadoop:hadoop install/software/
[hadoop@hadoop101 opt]$ ll
总用量 8
drwxr-xr-x. 2 hadoop hadoop 4096 1 月 17 14:37 install
drwxr-xr-x. 2 hadoop hadoop 4096 1 月 17 14:38 software
1)如果已经安装 jdk1.8 以上版本,可忽略此操作
2)用 Xftp 工具将 jdk 安装包导入到 opt 目录下面的 software 文件夹下面
3)在 linux 系统下的 opt 目录中查看软件包是否导入成功。
[hadoop@hadoop101 opt]$ cd software/
[hadoop@hadoop101 software]$ ls
hadoop-2.6.0-cdh5.14.2.tar.gz jdk-8u161-linux-x64.tar.gz
4)解压 jdk 到/opt/install 目录下
[hadoop@hadoop101 software]$ tar -zxvf jdk-8u161-linux-x64.tar.gz -C /opt/install/
5)配置 jdk 软链接
1)切换到 jdk 安装目录
[hadoop@hadoop101 software]$ cd /opt/install/
2)创建软链接
[hadoop@hadoop101 install]$ ln -s /opt/install/jdk1.8.0_161/opt/install/jdk
6)配置 jdk 环境变量
(1)先获取 jdk 路径:
[hadoop@hadoop101 software]$ cd /opt/install/jdk
[hadoop@hadoop101 jdk]$ pwd
/opt/install/jdk
(2)打开/etc/profile 文件:
[hadoop@hadoop101 software]$ sudo vi /etc/profile
在 profile 文件末尾添加 jdk 路径:
#JAVA_HOME
export JAVA_HOME=/opt/install/jdk
export PATH=$PATH:$JAVA_HOME/bin
(3)保存后退出:
:wq
(4)让修改后的文件生效:
[hadoop@hadoop101 jdk]$ source /etc/profile
7)测试 jdk 是否安装成功:
[hadoop@hadoop101 jdk]# java -version
java version "1.8.0_161" 注意:重启(如果 java -version 可以用就不用重启)
[hadoop@hadoop101 jdk1.8.0_161]$ sync
[hadoop@hadoop101 jdk1.8.0_161]$ sudo reboot
1.3 安装 Hadoop
0)Hadoop 下载地址:
https://www.cloudera.com/downloads/cdh/5-10-0.html
1)用 Xftp 工具将 hadoop-2.6.0-cdh5.14.2.tar.gz 导入到 opt 目录下面的
software 文件夹下面
2)进入到 Hadoop 安装包路径下:
[hadoop@hadoop101 ~]$ cd /opt/software/
3)解压 Hadoop 安装文件到/opt/install 下面
[hadoop@hadoop101 software]$ tar -zxf hadoop-2.6.0-cdh5.14.2.tar.gz -C /opt/install/
4)查看是否解压成功
[hadoop@hadoop101 software]$ ls /opt/install/
hadoop-2.6.0-cdh5.14.2
5)创建 Hadoop 软链接
[hadoop@hadoop101 software]$ cd /opt/install/
[hadoop@hadoop101 install]$ ln -s hadoop-2.6.0-cdh5.14.2 hadoop
5)将 hadoop 添加到环境变量
(1)获取 hadoop 安装路径:
[hadoop@ hadoop101 install]$ cd hadoop
[hadoop@ hadoop101 hadoop]$ pwd
/opt/install/hadoop
(2)打开/etc/profile 文件:
[hadoop@ hadoop101 hadoop]$ sudo vi /etc/profile
在 profie 文件末尾添加 hadoop 路径:vi 快捷键(shitf+g)
##HADOOP_HOME
export HADOOP_HOME=/opt/install/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
(3)保存后退出:
:wq
(4)让修改后的文件生效:
[hadoop@ hadoop101 hadoop]$ source /etc/profile
6)测试是否安装成功
[hadoop@hadoop101 ~]$ hadoop version
Hadoop 2.6.0-cdh5.14.2
7)重启(如果 hadoop 命令不能用再重启):
[hadoop@ hadoop101 hadoop]$ sync
[hadoop@ hadoop101 hadoop]$ sudo reboot
Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
Hadoop 官方网站:http://hadoop.apache.org/
2.1.1 官方 wordcount 案例
1)在 hadoop 安装目录文件下面创建一个 wcinput 文件夹
[hadoop@hadoop101 hadoop]$ mkdir wcinput
2)在 wcinput 文件下创建一个 wc.input 文件
[hadoop@hadoop101 hadoop]$ cd wcinput
[hadoop@hadoop101 wcinput]$ touch wc.input
3)编辑 wc.input 文件,vi wc.input,内容如下
[hadoop@hadoop101 wcinput]$ vi wc.input
在文件中输入如下内容
hadoop yarn spark
hadoop mapreduce
hadoop spark
hadoop spark
:wq
4)回到 hadoop 目录/opt/install/hadoop
5)执行程序:
[hadoop@hadoop101 hadoop]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar
wordcount wcinput wcoutput
6)查看结果:
[hadoop@hadoop101 hadoop]$ cat wcoutput/part-r-00000
2.2.1 启动 HDFS 并运行 MapReduce 程序
1)任务:
(1)配置集群
(2)启动、测试集群增、删、查
(3)执行 wordcount 案例
2)执行步骤
Hadoop 的配置文件全部在$HADOOP_HOME/etc/hadoop 目录下,下面不在说明
(1)配置集群
(a)配置:hadoop-env.sh
Linux 系统中获取 jdk 的安装路径:
[hadoop@ hadoop101 ~]# echo $JAVA_HOME/opt/install/jdk
修改 JAVA_HOME 路径:
export JAVA_HOME=/opt/install/jdk
(b)配置:core-site.xml
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/install/hadoop/data/tmp</value>
</property>
(c)配置:hdfs-site.xml
<!-- 指定 HDFS 副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
(2)启动集群
(a)格式化 NameNode(第一次启动时格式化,以后就不要总格式化)
[hadoop@hadoop101 hadoop]$ bin/hdfs namenode -format
(b)启动 NameNode
[hadoop@hadoop101 hadoop]$ sbin/hadoop-daemon.sh start namenode
(c)启动 DataNode
[hadoop@hadoop101 hadoop]$ sbin/hadoop-daemon.sh start
datanode
(3)查看集群
(a)查看是否启动成功
[hadoop@hadoop101 hadoop]$ jps
12586 NameNode
12668 DataNode
12666 Jps
(b)查看产生的 log 日志
当前目录:/opt/install/hadoop/logs
[hadoop@hadoop101 logs]$ ls
(c)web 端查看 HDFS 文件系统(或者换成 ip:50070)
http://hadoop101:50070/
注意:如果不能查看,请检查防火墙是否关闭,windows 操作系统是
否配置了 hadoop101 和虚拟机 ip 的映射
(4)操作集群
(a)在 hdfs 文件系统上创建一个 input 文件夹
[hadoop@hadoop101 hadoop]$ bin/hdfs dfs -mkdir -p /user/hadoop/input
(b)将测试文件内容上传到文件系统上
[hadoop@hadoop101 hadoop]$ bin/hdfs dfs -put wcinput/wc.input/user/hadoop/input/
(c)查看上传的文件是否正确
[hadoop@hadoop101 hadoop]$ bin/hdfs dfs -ls
/user/hadoop/input/
[hadoop@hadoop101 hadoop]$ bin/hdfs dfs -cat /user/hadoop/
input/wc.input
(d)运行 mapreduce 程序
[hadoop@hadoop101 hadoop]$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar
wordcount /user/hadoop/input/ /user/hadoop/output
(e)查看输出结果
命令行查看:
[hadoop@hadoop101 hadoop]$ bin/hdfs dfs -cat/user/hadoop/output/*
也可以在浏览器上进行查看
(f)将测试文件内容下载到本地
[hadoop@hadoop101 hadoop]$ bin/hdfs dfs -get /user/hadoop/output/part-r-00000 ./wcoutput/
(g)删除输出结果
[hadoop@hadoop101 hadoop]$ bin/hdfs dfs -rm -r /user/hadoop/output
2.2.2 YARN 上运行 MapReduce 程序
1)任务:
(1)配置集群任务在 yarn 上运行
(2)在 yarn 上执行 wordcount 案例
2)执行步骤
(1)配置集群
(a)配置 yarn-env.sh
配置 JAVA_HOME
export JAVA_HOME=/opt/install/jdk
(b)配置 yarn-site.xml
<!-- reducer 获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
(c)配置 mapred-env.sh
配置 JAVA_HOME
export JAVA_HOME=/opt/install/jdk
(d)配置 mapred-site.xml: (对 mapred-site.xml.template 重新命
名为) mapred-site.xml
[hadoop@hadoop101 hadoop]$ mv mapred-site.xml.template
mapred-site.xml
[hadoop@hadoop101 hadoop]$ vi mapred-site.xml
<!-- 指定 mr 运行在 yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(2)启动集群
(a)启动前必须保证 namenode 和 datanode 已经启动
(b)启动 resourcemanager
[hadoop@hadoop101 hadoop]$ /sbin/yarn-daemon.sh start resourcemanager
(c)启动 nodemanager
[hadoop@hadoop101 hadoop]$ sbin/yarn-daemon.sh start nodemanager
(3)集群操作
(a)yarn 的浏览器页面查看,yarn 的 web ui 端口为 8088
http://hadoop101:8088/cluster
(b)删除文件系统上的 output 文件
[hadoop@hadoop101 hadoop]$ bin/hdfs dfs -rm -R /user/hadoop/output
(c)执行 mapreduce 程序
[hadoop@hadoop101 hadoop]$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar
wordcount /user/hadoop/input /user/hadoop/output
(d)查看运行结果
[hadoop@hadoop101 hadoop]$ bin/hdfs dfs -cat /user/hadoop/output/*
2.2.3 配置历史服务器
配置历史服务器可以查看 MapReduce 任务的详情信息,查看日志,定
位错误
步骤如下:
1)配置 mapred-site.xml
[hadoop@hadoop101 hadoop]$ vi mapred-site.xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
2)启动历史服务器
[hadoop@hadoop101 hadoop]$ sbin/mr-jobhistory-daemon.sh start historyserver
3)查看历史服务器是否启动
[hadoop@hadoop101 hadoop]$ jps
4)查看 jobhistory
http://hadoop101:19888/jobhistory
2.2.4 配置日志的聚集
日志聚集概念:应用运行完成以后,将日志信息上传到 HDFS 系统上。方便查看
开启日志聚集功能步骤:
(1)配置 yarn-site.xml
[hadoop@hadoop101 hadoop]$ vi yarn-site.xml
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
(2)关闭 nodemanager 、resourcemanager 和 historymanager
[hadoop@hadoop101 hadoop]$ sbin/yarn-daemon.sh stop resourcemanager
[hadoop@hadoop101 hadoop]$ sbin/yarn-daemon.sh stop nodemanager
[hadoop@hadoop101 hadoop]$ sbin/mr-jobhistory-daemon.sh stop historyserver
(3)启动 nodemanager 、resourcemanager 和 historymanager
[hadoop@hadoop101 hadoop]$ sbin/yarn-daemon.sh start resourcemanager
[hadoop@hadoop101 hadoop]$ sbin/yarn-daemon.sh start nodemanager
[hadoop@hadoop101 hadoop]$ sbin/mr-jobhistory-daemon.sh start historyserver
(4)测试:删除 hdfs 上已经存在的 hdfs 文件
[hadoop@hadoop101 hadoop]$ bin/hdfs dfs -rm -R /user/hadoop/output
(5)执行 wordcount 程序
[hadoop@hadoop101 hadoop]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.
jar wordcount /user/hadoop/input /user/hadoop/output
(6)查看日志
http://hadoop101:19888/jobhistory
2.2.5 配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改
某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:存放在 hadoop 相应的 jar 包中
[core-default.xml]
hadoop-common-*.jar/ core-default.xml
[hdfs-default.xml]
hadoop-hdfs-*.jar/ hdfs-default.xml
[yarn-default.xml]
hadoop-yarn-common-*.jar/ yarn-default.xml
[mapred-default.xml]
hadoop-mapreduce-client-core-*.jar/ mapred-default.xml
(2)自定义配置文件:存放在$HADOOP_HOME/etc/hadoop
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
分析:
1)准备 3 台客户机(关闭防火墙、静态 ip、主机名称、创建 Hadoop 用户),
主机名称分别 hadoop102,hadoop103,hadoop104
2)安装 jdk
3)配置环境变量
4)安装 hadoop
5)配置环境变量
6)配置集群
7)单点启动
8)配置 ssh
9)群起并测试集群
2.3.1 虚拟机准备
详见 1.1 章。
2.3.2 集群资源分发
使用 scp 命令将机器 hadoop101 上的 Hadoop 资源远程拷贝到 hadoop102、
hadoop103、hadoop104 机器上。
步骤如下:
(1)将 hadoop101 中/opt/install 目录下的软件拷贝到 hadoop102 上。
[hadoop@hadoop101 /]$ scp -r /opt/install/*
hadoop@hadoop102:/opt/install
(2)将 hadoop101 服务器上的/opt/install 目录下的软件拷贝到
hadoop103 上。
[hadoop@hadoop101 opt]$ scp -r /opt/install/* hadoop@
hadoop103:/opt/install
(3)将 hadoop101 中/opt/install 目录下的软件拷贝到 hadoop104 上。
[hadoop@hadoop101 opt]$ scp -r /opt/install/*
hadoop@hadoop104:/opt/install
2.3.3 集群配置
1)集群部署规划
hadoop102 hadoop103 hadoop104
HDFS NameNode
DataNode DataNode
SecondaryNameNode
DataNode
YARN
NodeManager
ResourceManager
NodeManager NodeManager
2)配置集群
分析:
现在 hadoop102 上进行配置,然后分发到 hadoop103 和 hadoop104 机器上
(1)核心配置文件
core-site.xml
[hadoop@hadoop102 hadoop]$ vi core-site.xml
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/install/hadoop/data/tmp</value>
</property>
(2)hdfs 配置文件
hadoop-env.sh
[hadoop@hadoop102 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/install/jdk
hdfs-site.xml
[hadoop@hadoop102 hadoop]$ vi hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
(3)yarn 配置文件
yarn-env.sh
[hadoop@hadoop102 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/install/jdk
yarn-site.xml
[hadoop@hadoop102 hadoop]$ vi yarn-site.xml
<!-- reducer 获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
(4)mapreduce 配置文件
mapred-env.sh
[hadoop@hadoop102 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/install/jdk
mapred-site.xml
[hadoop@hadoop102 hadoop]$ cp mapred-site.xml.template
mapred-site.xml
[hadoop@hadoop102 hadoop]$ vi mapred-site.xml
<!-- 指定 mr 运行在 yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3)在集群上分发配置好的 Hadoop 配置文件
[hadoop@hadoop102 hadoop]$ scp -r /opt/install/hadoop/etc/hadoop/* hadoop@hadoop103:/opt/install/hadoop/etc/hadoop/
[hadoop@hadoop102 hadoop]$ scp -r /opt/install/hadoop/etc/hadoop/* hadoop@hadoop104:/opt/install/hadoop/etc/hadoop/
4)查看文件分发情况
[hadoop@hadoop103 hadoop]$ cat /opt/install/hadoop/etc/hadoop/core-site.xml
2.3.4 SSH 无密登录配置
1)配置 ssh
(1)基本语法
ssh 另一台电脑的 ip 地址
(2)ssh 连接时出现 Host key verification failed 的解决方法
[hadoop@hadoop102 opt] $ ssh 192.168.1.103
The authenticity of host '192.168.1.103 (192.168.1.103)'
can't be established.
RSA key fingerprint is
cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.
(3)解决方案如下:直接输入 yes
2)无密钥配置
(1)生成公钥和私钥:
[hadoop@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub
(公钥)
(2)将公钥拷贝到要免密登录的目标机器上
[hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop103
[hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop104
3).ssh 文件夹下(~/.ssh)的文件功能解释
(1)known_hosts :记录 ssh 访问过计算机的公钥(public key)
(2)id_rsa :生成的私钥
(3)id_rsa.pub :生成的公钥
(4)authorized_keys :存放授权过得无密登录服务器公钥
2.3.5 集群测试
1)配置 slaves
/opt/install/hadoop/etc/hadoop/slaves
[hadoop@hadoop102 hadoop]$ vi slaves
hadoop102
hadoop103
hadoop104
2)启动集群
(0)如果集群是第一次启动,需要格式化 NameNode
[hadoop@hadoop102 hadoop]$ bin/hdfs namenode -format
(1)启动 HDFS:
[hadoop@hadoop102 hadoop]$ sbin/start-dfs.sh
[hadoop@hadoop102 hadoop]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[hadoop@hadoop103 hadoop]$ jps
3218 DataNode
3288 Jps
[hadoop@hadoop104 hadoop]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
(2)启动 yarn
[hadoop@hadoop103 hadoop]$ sbin/start-yarn.sh
注意:NameNode 和 ResourceManger 如果不是同一台机器,不能在
NameNode 上启动 yarn,应该在 ResouceManager 所在的机器上启动 yarn。
(3)web 端查看 SecondaryNameNode
(a)浏览器中输入:http://hadoop104:50090/status.html
(b)查看 SecondaryNameNode 信息。
3)集群基本测试
(1)上传文件到集群
上传小文件
[hadoop@hadoop102 hadoop]$ hadoop fs -mkdir -p /user/hadoop/input
[hadoop@hadoop102 hadoop]$ hadoop fs -put wcinput/wc.input/user/hadoop/input
上传大文件
[hadoop@hadoop102 hadoop]$ bin/hadoop fs -put
/opt/software/hadoop-2.6.0-cdh5.14.2.tar.gz/user/hadoop/input
(2)可以通过 hdfs web ui 查看块的分布情况
2.3.6 集群启动/停止方式
1)各个服务组件逐一启动/停止
(1)分别启动/停止 hdfs 组件
hadoop-daemon.sh start|stop
namenode|datanode|secondarynamenode
(2)启动/停止 yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager
2)各个模块分开启动/停止(配置 ssh 是前提)常用
(1)整体启动/停止 hdfs
start-dfs.sh
stop-dfs.sh
(2)整体启动/停止 yarn
start-yarn.sh
stop-yarn.sh
3)全部启动/停止集群(不建议使用)
start-all.sh
stop-all.sh
2.3.7 集群时间同步
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时
间进行定时的同步,比如,每隔十分钟,同步一次时间。
配置时间同步实操:
1)时间服务器配置(必须 root 用户)
(1)检查 ntp 是否安装
[root@hadoop102 ~]# rpm -qa|grep ntp
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64
(2)修改 ntp 配置文件
[root@hadoop102 ~]# vi /etc/ntp.conf
修改内容如下
a)修改 1(设置本地网络上的主机不受限制。)
#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
(3)修改/etc/sysconfig/ntpd 文件
[root@hadoop102 ~]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动 ntpd
[root@hadoop102 ~]# service ntpd status
ntpd 已停
[root@hadoop102 ~]# service ntpd start
正在启动 ntpd: [确
定]
(5)执行:
[root@hadoop102 ~]# chkconfig ntpd on
2)其他机器配置(必须 root 用户)
(1)在其他机器配置 10 分钟与时间服务器同步一次
[root@hadoop103 hadoop]# crontab -e
编写脚本
*/10 * * * * /usr/sbin/ntpdate hadoop102
(2)修改任意机器时间
[root@hadoop103 hadoop]# date -s "2017-9-11 11:11:11" (3)十分钟后查看机器是否与时间服务器同步
[root@hadoop103 hadoop]# date
2.3.8 添加新的数据节点
2.3.8 添加新数据节点(DataNode)
1)需求:
随着数据量越来越大,原有的数据节点的容量不能满足存储数据的需求的情
况下,需要在原有集群基础上动态添加新的数据节点。
2)环境准备
(1)基于 Hadoop102 克隆一台虚拟机
(2)修改 ip 地址和主机名称(hadoop105),在每个机器上都配置 4 台机器
的主机与 ip 的映射
(3)增加新增节点 hadoop105 的 ssh 无密登录配置
(4)删除 hadoop105 机器上原来 HDFS 文件系统留存的文件
/opt/install/hadoop/data
3)添加新节点具体步骤
(1)在 namenode 的/opt/install/hadoop/etc/hadoop 目录下创建 dfs.hosts 文件
[hadoop@hadoop105 hadoop]$ pwd
/opt/install/hadoop/etc/hadoop
[hadoop@hadoop105 hadoop]$ touch dfs.hosts
[hadoop@hadoop105 hadoop]$ vi dfs.hosts
添加如下主机名称(包含新服役的节点)
hadoop102
hadoop103
hadoop104
hadoop105
(2)在 namenode 的 hdfs-site.xml 配置文件中增加 dfs.hosts 属性
<property>
<name>dfs.hosts</name>
<value>/opt/install/hadoop/etc/hadoop/dfs.hosts</value>
</property>
(3)刷新 namenode
[hadoop@hadoop102 hadoop]$ hdfs dfsadmin -refreshNodes
(4)更新 resourcemanager 节点
[hadoop@hadoop102 hadoop]$ yarn rmadmin -refreshNodes
(5)在 NameNode 的 slaves 文件中增加新主机名称
增加 105
hadoop102
hadoop103
hadoop104
hadoop105
(6)单独命令启动新的数据节点和节点管理器
[hadoop@hadoop105 hadoop]$ sbin/hadoop-daemon.sh start datanode
[hadoop@hadoop105 hadoop]$ sbin/yarn-daemon.sh start nodemanager
(7)在 web 浏览器上检查节点是否添加 ok
4)添加节点后,如果数据不均衡,可以用命令实现集群的再平衡
[hadoop@hadoop102 sbin]$ ./start-balancer.sh
2.3.9 退役旧数据节点
1)在 namenode 的/opt/install/hadoop/etc/hadoop 目录下创建 dfs.hosts.exclude 文件
[hadoop@hadoop102 hadoop]$ pwd
/opt/install/hadoop/etc/hadoop
[hadoop@hadoop102 hadoop]$ touch dfs.hosts.exclude
[hadoop@hadoop102 hadoop]$ vi dfs.hosts.exclude
添加如下主机名称(要退役的节点)
hadoop105
2)在 namenode 的 hdfs-site.xml 配置文件中增加 dfs.hosts.exclude 属性
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/install/hadoop/etc/hadoop/dfs.hosts.exclude</value>
</property>
3)刷新 namenode、刷新 resourcemanager
[hadoop@hadoop102 hadoop]$ hdfs dfsadmin -refreshNodes
[hadoop@hadoop102 hadoop]$ yarn rmadmin -refreshNodes
4)检查 web 浏览器,退役节点的状态为 decommission in progress(退役中),
说明数据节点正在复制块到其他节点。
5)等待退役节点状态为 decommissioned(所有块已经复制完成),停止该节点
及节点资源管理器。注意:如果副本数是 3,服役的节点小于等于 3,是不能退
役成功的,需要修改副本数后才能退役。
[hadoop@hadoop105 hadoop]$ sbin/hadoop-daemon.sh stop datanode
stopping datanode
[hadoop@hadoop105 hadoop]$ sbin/yarn-daemon.sh stop nodemanager
stopping nodemanager
6)从 include 文件中删除退役节点,再运行刷新节点的命令
(1)从 namenode 的 dfs.hosts 文件中删除退役节点 hadoop105
hadoop102
hadoop103
hadoop104
(2)刷新 namenode,刷新 resourcemanager
[hadoop@hadoop102 hadoop]$ hdfs dfsadmin -refreshNodes
[hadoop@hadoop102 hadoop]$ yarn rmadmin -refreshNodes
7)从 namenode 的 slave 文件中删除退役节点 hadoop105
hadoop102
hadoop103
hadoop104
8)如果数据不均衡,可以用命令实现集群的再平衡
[hadoop@hadoop102 hadoop]$ sbin/start-balancer.sh
三 常见安装错误及解决方案
1)防火墙没关闭
2)主机名称配置错误
3)ip 地址配置错误
4)ssh 没有配置好
5)root 用户和 hadoop 两个用户启动集群不统一
6)配置文件修改不细心
7)datanode 不被 namenode 识别问题
Namenode 在 format 初始化的时候会形成两个标识,blockPoolId 和
clusterId。新的 datanode 加入时,会获取这两个标识作为自己工作目录中的标
识。
一旦 namenode 重新 format 后,namenode 的身份标识已变,而 datanode 如
果依然持有原来的 id,就不会被 namenode 识别。
解决办法,删除 datanode 节点中的数据后,再次重新格式化 namenode。
8)不识别主机名称
java.net.UnknownHostException: hadoop102: hadoop102
at java.net.InetAddress.getLocalHost(InetAddress.java:1475)
at
org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubm
itter.java:146)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
at java.security.AccessController.doPrivileged(Native
Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
解决办法:
在/etc/hosts 文件中添加主机与 ip 的映射