环境:VMware15.5 pro、CentOS-7-x86_64-DVD-2003、hadoop-2.10.1、jdk-8u261-linux-x64
注:在root用户下操作,避免缺少什么权限
一、网络配置、环境配置
NAT模式的网络配置有以下两种形式:
第一种是dhcp动态分配ip,就是说ip地址是可能会发生变化的,但是操作简单;
第二种是指定静态ip,ip地址是由自己在可用ip范围之间随意指定的,而且不会发生变化,但是配置有点点复杂;
1.1 网络配置–dhcp动态分配ip
启动虚拟机
cd /etc/sysconfig/network-scripts
# 查看当前路径下的文件
ls
# 修改第一个配置文件
vi ifcfg-ens33
service network restart
# 重启
reboot
# ping 百度 显示如下则成功
ping www.baidu.com
1.2 网络配置–静态指定ip
cd /etc/sysconfig/network-scripts
# 查看当前路径下的文件
ls
# 修改第一个配置文件
vi ifcfg-ens33
service network restart
# 查看ip地址
ip addr 或 ip a
# ping 百度 显示如下则成功
ping www.baidu.com
1.3 配置java环境和hadoop环境
- 上传java和hadoop到根目录
-
解压java和hadoop
tar -zxvf jdk-8u261-linux-x64.tar.gz tar -zxvf hadoop-2.10.1.tar.gz # 查看解压后的文件夹 ls
-
修改文件夹的名字、方便操作
mv hadoop-2.10.1 hadoop mv jdk1.8.0_261 jdk # 查看修改后的文件夹 ls
-
移动hadoop和jdk到/usr/lcoal目录下
mv jdk /usr/local mv hadoop /usr/local # 切换至/usr/local cd /usr/local # 查看移动后的文件夹 ls
-
修改/etc/profile 文件
vi /etc/profile
在最后追加以下内容,一定不要写错
export JAVA_HOME=/usr/local/jdk export PATH=$PATH:$JAVA_HOME/bin export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin/:$HADOOP_HOME/sbin
-
刷新/etc/profile
source /etc/profile
-
验证
java -version
hadoop version
二、Hadoop单机模式
2.1 创建数据文件 输入内容
-
创建文件夹
mkdir ~/input
-
创建并打开数据文件
vim ~/input/data.txt
-
输入数据
Hello World Hello World
2.2 运行MapReduce WordCount 例子
-
进入hadoop的安装目录下的 share/hadoop/mapreduce/
cd ${HADOOP_HOME}/share/hadoop/mapreduce/
-
运行MapReduce WordCount
hadoop jar hadoop-mapreduce-examples-2.10.1.jar wordcount ~/input/data.txt ~/output
2.3 查看结果
cd ~/output
ll
cat part-r-00000
Hadoop单机模式参考:Hadoop安装(二)—单机模式
三、Hadoop伪分布模式
在配置好java和hadoop环境变量的条件下开始一下操作
3.1 修改主机名
-
查看主机地址
ip addr
-
查看主机名
hostname
-
修改主机名
将原有的内容替换为 hadoop01
vim /etc/hostname
-
映射IP地址及主机名 修改/etc/hosts文件
vim /etc/hosts
打开文件后 在最后一行追加
192.168.231.130 hadoop01
-
重启使修改生效
reboot
-
再次查看主机名
hostname
3.2 设置免密登录
在伪分布中可以设置也可以不设置
# 生成秘钥对
# rsa表示加密算法,输入以下命令后连续回车,系统会自动在~/.ssh目录下生成公钥(id_rsa.pub)和私钥(id_rsa)
ssh-keygen -t rsa
# 通过命令查看
ls ~/.ssh
# 追加公钥 将公钥追加到~/.ssh/authorized_keys文件中
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop01
# 查看认证文件authorized_keys是否已经生成
ls ~/.ssh
# 免密登录验证
ssh hadoop01
# 退出登录,路由地址会变回原来的的地址
exit
3.3 关闭防火墙
每一步都要执行
-
查看防火墙状态
systemctl status firewalld
-
暂时关闭防火墙
systemctl stop firewalld
-
永久关闭防火墙
systemctl disable firewalld
-
再次查看防火墙状态
systemctl status firewalld
参考资料:Linux关闭防火墙命令
3.4 设置Hadoop配置文件
安装Hadoop伪分布式模式,总共有5个文件需配置,它们分别是hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。这些配置文件都在 ${HADOOP_HOME}/ etc/hadoop 目录下。
3.4.0 进入Hadoop配置文件所在的目录
cd ${HADOOP_HOME}/etc/hadoop
3.4.1 配置hadoop-env.sh
vim hadoop-env.sh
找到 export JAVA_HOME 一行,配置jdk的安装目录
export JAVA_HOME=/usr/local/jdk
3.4.2配置core-site.xml
fs.defaultFS属性指定默认文件系统的URI地址,一般格式为“hdfs://host:port”。其中,host可以设置为操作系统的IP地址以及主机名称中的任意一个,这里设置为主机名hadoop01;port如果不配置,则使用默认端口号8020。
hadoop.tmp.dir指定Hadoop的临时工作目录,设置为home/hadoop/tmp,<用户名>请根据实际情况修改。注意:一定要配置hadoop.tmp.dir,否则默认的tmp目录在/tmp下,重启操作系统时tmp目录下的dfs/name文件夹会被删除,造成没有NameNode。
vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
3.4.3 配置hdfs-site.xml
dfs.replication的默认值是3,因为伪分布式只有一个节点,所以值设置为1。
vim hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3.4.4 配置mapred-site.xml
- 复制mapred-site.xml.template文件生成mapred-site.xml,查看是否复制成功
cp mapred-site.xml.template mapred-site.xml
ls
- 修改mapred-site.xml
mapreduce.framework.name默认值为local,设置为yarn,让MapReduce程序运行在YARN框架上。
vim mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.4.5 配置yarn-site.xml
yarn.resourcemanager.hostname属性为资源管理器的主机,设置为操作系统的主机名或IP地址。
yarn.nodemanager.aux-services属性为节点管理器的辅助服务器,默认值为空,设置为mapreduce_shuffle。
vim yarn-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
<!-- 以上主机名或IP地址按实际情况修改 -->
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
3.5 格式化hdfs
格式化的过程是创建初始目录和文件系统结构的过程。注意:格式化只需进行一次,下次启动不要再次格式化,否则会少NameNode进程。
hdfs namenode -format
# 或
hadoop namenode -format
注:在下一步启动的过程中,如果出现没有NameNode, 那就回过头来这样搞
删除原目录,即core-site.xml下配置的hadoop.tmp.dir所指向的目录
重新格式化NameNode: hdfs namenode -format
参考:关于Hadoop启动之后jps没有namenode节点的解决方法
3.6 启动Hadoop并验证Hadoop进程
-
启动HDFS
start-dfs.sh
-
查看HDFS进程
jps # 会有以下进程出现 NameNode DataNode SecondaryNameNode
-
启动YARN
start-yarn.sh
-
查看进程
jps
# 会新增以下进程
ResourceManager
NodeManager
-
还可以使用
start-all.sh # 启动所有进程 stop-all.sh # 关闭所有进程
3.7 Web 访问Hadoop
-
HDFS 界面
http://192.168.231.130:50070
-
查看SecondaryNameNode
http://192.168.231.130:50090
-
YARN 界面
http://192.168.231.130:8088
3.9 测试Hadoop
3.9.1 计算pi圆周率
cd ${HADOOP_HOME}/share/hadoop/mapreduce
#计算pi圆周率
hadoop jar hadoop-mapreduce-examples-2.10.1.jar pi 1 2
3.9.2 词频统计测试
通过一个MapReduce程序测试Hadoop,统计HDFS中/input/data.txt文件内单词出现的次数。
-
在根目录创建
cd ~ vim data.txt
-
输入
Hello World Hello Hadoop
-
在HDFS创建input文件夹
hdfs dfs -mkdir /input
-
将data.txt上传到HDFS
hdfs dfs -put data.txt /input
-
查看是否上传成功
hdfs dfs -ls /input
-
运行MapReduce WordCount例子
cd ${HADOOP_HOME}/share/hadoop/mapreduce hadoop jar hadoop-mapreduce-examples-2.10.1.jar wordcount /input/data.txt /output
-
查看结果
hdfs dfs -cat /output/part-r-00000
Hadoop伪分布安装的参考:Hadoop安装(二)—伪分布式模式
四、Hadoop完全分布
4.0 准备三台虚拟机
三台均已配置好java和hadoop环境变量
hadoop001 192.168.231.135
hadoop002 192.168.231.136
hadoop003 192.168.231.137
4.1 修改主机名
修改 /etc/hostname 和 /etc/hosts
-
修改第一台主机
-
打开hostname文件
vi /etc/hostname
用 hadoop001 替换里面的内容
-
重启该主机
reboot
-
查看主机名
hostname
-
-
修改第二台
…hadoop002…
-
修改第三台
…hadoop003…
4.2 设置IP地址映射
- 打开hosts文件
vi /etc/hosts
- 每一台主机的/etc/hosts文件都追加上一下内容
192.168.231.135 hadoop001
192.168.231.136 hadoop002
192.168.231.137 hadoop003
- 然后重启每一台主机
reboot
4.3 设置免密登录
4.3.1 配置hadoop001主机
-
hadoop001生成秘钥对
执行后 回车回车回车…
ssh-keygen -t rsa
-
查看秘钥对
ls ~/.ssh
-
将hadoop001公钥id_rsa.pub复制到hadoop001、hadoop002和hadoop003主机上
看到yes\no就输入yes 看到密码就输入登录密码
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop001 ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop002 ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop003
4.3.2 配置hadoop002主机
-
hadoop002生成秘钥对
ssh-keygen -t rsa
-
查看秘钥对
ls ~/.ssh
-
将hadoop002公钥id_rsa.pub复制到hadoop001、hadoop002和hadoop003主机上
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop001 ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop002 ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop003
4.3.3 配置hadoop003主机
-
hadoop003 生成秘钥对
ssh-keygen -t rsa
-
查看秘钥对
ls ~/.ssh
-
将hadoop003公钥id_rsa.pub复制到hadoop001、hadoop002和hadoop003主机上
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop001 ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop002 ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop003
免密登录配置完毕
- 可以用 ssh 主机名 进入任意一台主机
- exit 退出进入的主机
4.4 关闭防火墙
每一台主机每一步都要执行
-
查看防火墙状态
systemctl status firewalld
-
暂时关闭防火墙
systemctl stop firewalld
-
永久关闭防火墙
systemctl disable firewalld
-
再次查看防火墙状态
systemctl status firewalld
-
重启一下吧
reboot
参考资料:Linux关闭防火墙命令
4.5 设置Hadoop配置文件
hadoop001
-
进入hadoop001主机Hadoop配置文件目录
cd ${HADOOP_HOME}/etc/hadoop
4.5.1 配置hadoop-env.sh
-
打开hadoop-env.sh
vi hadoop-env.sh
找到export JAVA_HOME=这一行,值为java的安装路径
export JAVA_HOME=/usr/local/jdk
4.5.2 配置core-site.xml
fs.defaultFS属性指定默认文件系统的URI地址,一般格式为“hdfs://host:port”。其中,host可以设置为操作系统的IP地址以及主机名称中的任意一个,这里设置为主机名hadoop001;port如果不配置,则使用默认端口号8020。
hadoop.tmp.dir指定Hadoop的临时工作目录,设置为home/hadoop/tmp,<用户名>请根据实际情况修改。注意:一定要配置hadoop.tmp.dir,否则默认的tmp目录在/tmp下,重启操作系统时tmp目录下的dfs/name文件夹会被删除,造成没有NameNode。
vi core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
4.5.3 配置hdfs-site.xml
dfs.replication的默认值是3,因为完全分布式有2个datanode,所以值设置为2。
vi hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
4.5.4 配置mapred-site.xml
- 复制mapred-site.xml.template文件生成mapred-site.xml,查看是否复制成功
cp mapred-site.xml.template mapred-site.xml
# 查看是否复制成功
ll
- 修改mapred-site.xml文件内容
mapreduce.framework.name默认值为local,设置为yarn,让MapReduce程序运行在YARN框架上。
vi mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
4.5.5 配置yarn-site.xml
yarn.resourcemanager.hostname属性为资源管理器的主机,设置为Ubuntu操作系统的主机名或IP地址。
yarn.nodemanager.aux-services属性为节点管理器的辅助服务器,默认值为空,设置为mapreduce_shuffle。
vi yarn-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop001</value>
<!-- 以上主机名或IP地址按实际情况修改 -->
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
4.5.6 配置slavers文件
配置slavers文件就是指定哪些主机是Slaver
-
打开文件
vi slaves
-
将原有内容替换为以下内容
hadoop002 hadoop003
4.5.7 分发配置
将hadoop001的配置文件分发至hadoop002和hadoop003主机。
将${HADOOP_HOME}/etc/hadoop 目录 全部分发到其他主机的 /etc目录下 覆盖原来的 hadoop目录
scp -r 要分发的文件 主机名:hadoop安装路径/etc/
scp -r /usr/local/hadoop/etc/* hadoop002:/usr/local/hadoop/etc/
scp -r /usr/local/hadoop/etc/* hadoop003:/usr/local/hadoop/etc/
4.6 格式化HDFS
在hadoop001主机操作,命令如下
hdfs namenode -format
4.7 启动Hadoop
启动命令只需在hadoop001主机操作
可以这样启动
start-dfs.sh
start-yarn.sh
还可以这样
start-all.sh
4.8 验证Hadoop进程
-
用 jps命令分别在所有主机验证
jps
-
hadoop001主机包含以下3个进程表示启动Hadoop成功
SecondaryNameNode NameNode ResourceManager
-
hadoop002和hadoop003主机包含以下2个进程表示启动Hadoop成功
NodeManager DataNode
如果某个主机少了某个进程,应该到对应主机去找相关的log查看原因,log存放在$ {HADOOP_HOME}/logs目录下,如果少DataNode进程,进入该主机下$ {HADOOP_HOME}/logs 查看
…datanode…log。找相关问题
4.9 通过Web访问Hadoop
-
HDFS Web界面
http://192.168.231.135:50070
-
SecondaryNameNode
http://192.168.231.135:50090
-
YARN Web界面
http://192.168.231.135:8088
4.10 测试Hadoop
通过一个MapReduce程序测试Hadoop,统计HDFS中/input/data.txt文件内单词出现的次数
-
在根目录下,创建一个文本文件data.txt
cd ~ vi data.txt
-
在data.txt文件中输入如下内容
Hello World Hello World
-
在HDFS创建input文件夹
hdfs dfs -mkdir /input
-
将data.txt上传到HDFS
hdfs dfs -put data.txt /input
-
查看是否上传成功
hdfs dfs -ls /input
-
运行MapReduce WordCount例子
cd ${HADOOP_HOME}/share/hadoop/mapreduce hadoop jar hadoop-mapreduce-examples-2.10.1.jar wordcount /input/data.txt /output
-
查看结果
hdfs dfs -cat /output/part-r-00000
Hadoop完全分布参考:Hadoop安装(二)—完全分布式模式(集群模式)