从 Linux 的最小化安装到 Hadoop 环境的搭建,尽可能详尽介绍每个步骤。
首先需要将如下四个必要的文件下载到计算机(已经附上了下载地址,点击即可下载)。
在安装了 Vmware Workstation 16 后,接下来就可开始安装由阿里云镜像站提供的CentOS7。步骤如下:
CentOS7x64-Master
,如下所示:VMware Network Adapter VMnet8
网卡处于启用状态且要开启 VMware 相应的服务。CentOS-7-x86_64-Minimal-2009.iso
文件。然后点击确定按钮关闭虚拟机设置窗口。↑
使得Install CentOS 7
菜单高亮选中,并按下回车键确认。
在下方的输入框中输出 Chinese
,后,就会过滤出中文语言。
选择【中文】->【简体中文】后,点击【继续】按钮
这个时候会自动出现 IP 的相关信息,可以看到它的IP地址是192.168.12.140
,不难发现它是 12
网段的。如下所示:
如果到了这里,并没有出现 ip 信息,检查真实机中和 VMware 相关的服务是否全部启动,以及 VMware 的网卡是否被启用。
这里的IP地址是通过DHCP自动获取的,不能保证每次开机它的IP是固定的,为了方便后面做集群的配置,这里可以对该网卡手动设置IP 。在配置网卡信息之前,记录下此时的网卡的子网掩码、默认路由和DNS信息。点击右下方的配置按钮,开始编辑网卡信息,在弹出的对话框中选择 【IPv4设置】选项卡。
将方法设置为手动,并添加一个静态的IP地址,子网掩码、网关(默认路由)和DNS服务器的信息配置成和之前的一样即可。如下所示:
在配置 IP 地址的时候,需要注意的是,需要考虑到网段要和真实机保持一致,因为前面创建虚拟机时,采用了网络地址转换的连接方式,默认情况下,真实机使用的网卡是
VMware Network Adapter VMnet8
网卡,通过命令行使用ipconfig
查看到它的IP是192.168.12.1
,这说明它是12
网段。当然,在配置之前,我们也发现了它是12
网段的。
点击保存后,可以看到此时的IP地址已经修改为我们自定义的IP了,如下:
接下来修改最底下的主机名处,将输入框中的主机名修改为方便好记的主机名,以便于后面通过 ssh 进行登录。因为我使用的 CentOS 7。而且是为了搭建 Hadoop 环境,结合我自定义的IP地址,我将其命名为 h150.c7
。然后点击应用,就可以发现右下角的 localhost就会发生变化。最后,点击左上角的完成按钮,以完成配置。
因为密码过于简单,所以需要点击被要求点击两下完成按钮,以完成密码的设置。
刚安装的 CentOS 要做的第一件事就是将 yum 源配置为阿里云的镜像,以方便后面安装软件的时候提升响应速度。通过 curl
下载阿里云的 yum 源配置文件:
[root@h150 ~]# curl https://mirrors.aliyun.com/repo/Centos-7.repo >> CentOS-Base-Aliyun.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2523 100 2523 0 0 15413 0 --:--:-- --:--:-- --:--:-- 15478
[root@h150 ~]#
[root@h150 ~]# mv CentOS-Base-Aliyun.repo /etc/yum.repos.d/
[root@h150 ~]# yum clean all
已加载插件:fastestmirror
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
正在清理软件源: base extras updates
[root@h150 ~]#
[root@h150 ~]# yum makecache
在敲 yum makecache
的时候,发现 tab
键不能自动补齐命令,这是因为缺少 bash-completion
工具,正好通过 yum 来安装它。
yum -y install bash-completion
需要注意的是,这个工具安装好之后,不会立即生效,需要注销后重新登陆方可使用。
虽然通过 yum 来安装 jdk 非常方便,但我依然选择手动安装。
[root@h150 ~]# curl -# https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz >> java-se-8u41-ri.tar.gz
######################################################################## 100.0%
[root@h150 ~]# tar -zxf java-se-8u41-ri.tar.gz -C /opt/
[root@h150 ~]# vi /etc/profile
/etc/profile
文件的最后配置 Java的环境变量,追加如下内容:export JAVA_HOME=/opt/java-se-8u41-ri/
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
source
命令使 /etc/profile
文件生效,自此,jdk 安装完成。[root@h150 ~]# source /etc/profile
[root@h150 ~]# java -version
openjdk version "1.8.0_41"
OpenJDK Runtime Environment (build 1.8.0_41-b04)
OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)
【单机模 式】:
不能使用 HDFS,只能使用 MapReduce,所以单机模式最主要的目的是在 本机调试 mapreduce 代码
【伪分布式模 式】:
用多个线程模拟多台真实机器,即用一台主机模拟真实的分布式环境。
【完全分布式模式】:
用多台机器(或启动多个虚拟机)来完成部署集群。
[root@h150 ~]# curl -# https://archive.apache.org/dist/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz >> hadoop-2.7.1.tar.gz
######################################################################## 100.0%
[root@h150 ~]# tar -zxf hadoop-2.7.1.tar.gz -C /opt/
etc/hadoop/hadoop-env.sh
文件,找到 JAVA_HOME
和 HADOOP_CONF_DIR
。此处的 JAVA_HOME
的值需要和 /etc/profile
中配置的 JAVA_HOME
的值保持一致。修改后结果如下:# The only required environment variable is JAVA_HOME. All others are
# optional. When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.
# The java implementation to use.
export JAVA_HOME=/opt/java-se-8u41-ri/
# The jsvc implementation to use. Jsvc is required to run secure datanodes
# that bind to privileged ports to provide authentication of data transfer
# protocol. Jsvc is not required if SASL is configured for authentication of
# data transfer protocol using non-privileged ports.
#export JSVC_HOME=${JSVC_HOME}
export HADOOP_CONF_DIR=/opt/hadoop-2.7.1/etc/hadoop
配置完成之后,使用 source
命令使其生效:
[root@h150 ~]# source /opt/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
[root@h150 ~]#
etc/hadoop/core-site.xml
文件,内容如下:<configuration>
<!-- 指定 NameNode 的主机名和端口号 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://h150.c7:9000</value>
</property>
<!--
指定 Hadoop 的临时目录
在默认情况下,该目录会存储 NameNode,DataNode 或其他模块的数据
-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.7.1/tmp</value>
</property>
<!-- 缓冲区大小,实际工作中根据服务器性能动态调整 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!--
开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟
-->
<!--
<property>
<name>fs.trash.interval</name>
<value>10080</value>
</property>
-->
</configuration>
etc/hadoop/hdfs-site.xml
文件,内容如下:<configuration>
<!--
指定 hdfs 保存数据副本的数量(包括自己),默认值是 3。
如果是伪分布模式,此值应该是 1
-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- 设置HDFS的文件权限-->
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
<!-- 设置一个文件切片的大小:128M -->
<!--
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
-->
</configuration>
etc/hadoop/mapred-site.xml
文件。但是在这个文件并不存在,可以通过 cp
将其拷贝一份进行修改:[root@h150 ~]# cp /opt/hadoop-2.7.1/etc/hadoop/mapred-site.xml.template /opt/hadoop-2.7.1/etc/hadoop/mapred-site.xml
[root@h150 ~]# vi /opt/hadoop-2.7.1/etc/hadoop/mapred-site.xml
修改后的 mapred-site.xml 文件的内容如下:
<configuration>
<!-- 指定 MapReduce 在 Yarn 上运行 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
etc/hadoop/yarn-site.xml
文件。<configuration>
<!-- 指定 Yarn 的 ResourceManager 的主机名 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>h150.c7</value>
</property>
<!-- 指定 Yarn 的 NodeManager 的获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
etc/hadoop/slaves
文件。直接在该文件中输入集群中所有节点的主机名,每个主机名独占一行,因为采用的是伪 分布式模式,所以,只需要在当前文件中写入当前主机的名称即可。vi /opt/hadoop-2.7.1/etc/hadoop/slaves
修改后的 slaves 文件的内容如下:
h150.c7
/etc/profile
文件的最后配置 Hadoop 的环境变量,追加如下内容:export HADOOP_HOME=/opt/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source
命令使 /etc/profile
文件生效。source /etc/profile
/etc/hosts
文件,追加当前主机的IP地址映射主机名。如下所示:127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.12.150 h150.c7
hdfs namenode -format
出现如下图所示的 successfully formatted.
的提示文字,则说明格式化成功!
start-dfs.sh
或 start-all.sh
脚本来启动 Hadoop 的组件。启动完成后,使用 jps
命令来判断是否启动成功。[root@h150 ~]# start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [h150.c7]
root@h150.c7's password:
h150.c7: starting namenode, logging to /opt/hadoop-2.7.1/logs/hadoop-root-namenode-h150.c7.out
root@h150.c7's password:
h150.c7: starting datanode, logging to /opt/hadoop-2.7.1/logs/hadoop-root-datanode-h150.c7.out
Starting secondary namenodes [0.0.0.0]
root@0.0.0.0's password:
0.0.0.0: starting secondarynamenode, logging to /opt/hadoop-2.7.1/logs/hadoop-root-secondarynamenode-h150.c7.out
starting yarn daemons
starting resourcemanager, logging to /opt/hadoop-2.7.1/logs/yarn-root-resourcemanager-h150.c7.out
root@h150.c7's password:
h150.c7: starting nodemanager, logging to /opt/hadoop-2.7.1/logs/yarn-root-nodemanager-h150.c7.out
[root@h150 ~]# jps
18208 Jps
17684 SecondaryNameNode
17829 ResourceManager
17526 DataNode
17404 NameNode
18109 NodeManager
[root@h150 ~]#
从结果看,说明启动成功!
在每次使用 start-dfs.sh
的时候,会被要求输入3次密码。原因是 Hadoop 启动过 程中会先后启动 NameNode、SecondaryNameNode 和 DataNode 组件,它们会通过 ssh 来 登录到配置文件中指定的主机,而登录到目标主机就需要验证登录身份,所以需要输入三次 密码。
为了方便 Hadoop 启动的过程中能够免密登录,我们可以使用 ssh-keygen
和 ssh-copy-id
两个命令来操作,具体如下:
[root@h150 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:/SjKbSI59e5S7NmM/jmk9PJd8C1a9EebX3hmpyeRTCM root@h150.c7
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| |
| . E o |
| .S . .+.o.|
| . + .o ++=o|
| o =.O. . *+X|
| +.ooO.=o +.**|
| ooB=++.o .o.|
+----[SHA256]-----+
[root@h150 ~]#
[root@h150 ~]# ssh-copy-id root@h150.c7
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@h150.c7's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@h150.c7'"
and check to make sure that only the key(s) you wanted were added.
[root@h150 ~]#
完成之后,再次启动或者停止 Hadoop 组件的时候,就不会再要求输入密码了。
Hadoop 启动后,其实是可以通过真实机浏览器来访问一个 web 界面的,其端口是 50070,例如访问:http://192.168.12.150:50070/,但是,因为防火墙的缘故,这里是不允许被外部访问的。可以使用 firewall-cmd
来设置需要开放的端口,具体如下所示:
[root@h150 ~]# firewall-cmd --add-port=50010/tcp --permanent
success
[root@h150 ~]# firewall-cmd --add-port=50020/tcp --permanent
success
[root@h150 ~]# firewall-cmd --add-port=50070/tcp --permanent
success
[root@h150 ~]# firewall-cmd --add-port=50075/tcp --permanent
success
[root@h150 ~]# firewall-cmd --add-port=50090/tcp --permanent
success
[root@h150 ~]# firewall-cmd --add-port=8030/tcp --permanent
success
[root@h150 ~]# firewall-cmd --add-port=8031/tcp --permanent
success
[root@h150 ~]# firewall-cmd --add-port=8082/tcp --permanent
success
[root@h150 ~]# firewall-cmd --add-port=8088/tcp --permanent
success
[root@h150 ~]# firewall-cmd --add-port=9000/tcp --permanent
success
[root@h150 ~]# firewall-cmd --reload
success
[root@h150 ~]#
在伪分布式模式的基础上,搭建 Hadoop 进行完全分布式环境。这里采用三个子节点(包括自己)。
192.168.12.150
。为了避免启动集群的时候发生 IP 冲突,这里可以使用 sed 命令手动替换掉它的IP地址。不要将之前的虚拟机开机,把新虚拟机开机后,登录进去,使用如下命令将 IP 地址和主机名进行修改[root@h150 ~]# sed -i s/'IPADDR="192.168.12.150"'/'IPADDR="192.168.12.151"'/g /etc/sysconfig/network-scripts/ifcfg-ens33
[root@h150 ~]# hostnamectl set-hostname h151.c7
[root@h150 ~]# hostname
h151.c7
[root@h150 ~]# reboot
192.168.12.152
,主机名为 h152.c7
,于是就得到了三台主机名和IP地址不同但是配置相同的虚拟机。如下表所示虚拟机名称 | 主机名 | IP地址 |
---|---|---|
CentOS7x64-Master | h150.c7 | 192.168.12.150 |
CentOS7x64-Slave01 | h151.c7 | 192.168.12.151 |
CentOS7x64-Slave02 | h152.c7 | 192.168.12.152 |
/etc/hosts
文件,均如下:127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.12.150 h150.c7
192.168.12.151 h151.c7
192.168.12.152 h152.c7
[root@h150 ~]# ssh root@h151.c7
[root@h151 ~]# rm -rf ~/.ssh/*
[root@h151 ~]# logout
Connection to h151.c7 closed.
[root@h150 ~]# ssh-copy-id root@h151.c7
[root@h150 ~]#
[root@h150 ~]# ssh root@h152.c7
[root@h152 ~]# rm -rf ~/.ssh/*
[root@h152 ~]# logout
Connection to h152.c7 closed.
[root@h150 ~]# ssh-copy-id root@h152.c7
[root@h150 ~]#
[root@h150 ~]#
[root@h150 ~]# scp /etc/hosts root@h151.c7:/etc/hosts
hosts 100% 227 200.9KB/s 00:00
[root@h150 ~]# scp /etc/hosts root@h152.c7:/etc/hosts
hosts 100% 227 233.3KB/s 00:00
[root@h150 ~]#
[root@h150 ~]#
[root@h150 ~]# ssh h151.c7
Last login: Tue Apr 26 02:22:18 2022 from h150.c7
[root@h151 ~]# ssh-keygen
[root@h151 ~]# ssh-copy-id root@h150.c7
[root@h151 ~]# ssh-copy-id root@h151.c7
[root@h151 ~]# ssh-copy-id root@h152.c7
root@h151 ~]# ssh h152.c7
Last login: Tue Apr 26 02:23:44 2022 from h150.c7
[root@h152 ~]# ssh-keygen
[root@h152 ~]# ssh-copy-id root@h150.c7
[root@h152 ~]# ssh-copy-id root@h151.c7
[root@h152 ~]# ssh-copy-id root@h152.c7
[root@h152 ~]#
[root@h152 ~]# logout
Connection to h152.c7 closed.
[root@h151 ~]# logout
Connection to h151.c7 closed.
[root@h150 ~]#
etc/hadoop/hdfs-site.xml
文件中的副本数量为 3 ,如下所示:<configuration>
<!--
指定 hdfs 保存数据副本的数量(包括自己),默认值是 3。
如果是伪分布模式,此值应该是 1
-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 设置HDFS的文件权限-->
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
<!-- 设置一个文件切片的大小:128M -->
<!--
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
-->
</configuration>
etc/hadoop/slaves
文件,内容如下:h150.c7
h151.c7
h152.c7
[root@h150 ~]# rm -rf /opt/hadoop-2.7.1/data/
[root@h150 ~]# rm -rf /opt/hadoop-2.7.1/logs/*
[root@h150 ~]# rm -rf /opt/hadoop-2.7.1/tmp/*
[root@h150 ~]# scp -r /opt/hadoop-2.7.1/ root@h151.c7:/opt/
[root@h150 ~]# scp -r /opt/hadoop-2.7.1/ root@h152.c7:/opt/
[root@h150 ~]# hdfs namenode -format
[root@h150 ~]# start-all.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FRXtDgwV-1656651966641)(从 Linux 安装到 Hadoop 环境搭建全过程.assets/image-20220426045424164.png)]
op/slaves` 文件,内容如下:
h150.c7
h151.c7
h152.c7
[root@h150 ~]# rm -rf /opt/hadoop-2.7.1/data/
[root@h150 ~]# rm -rf /opt/hadoop-2.7.1/logs/*
[root@h150 ~]# rm -rf /opt/hadoop-2.7.1/tmp/*
[root@h150 ~]# scp -r /opt/hadoop-2.7.1/ root@h151.c7:/opt/
[root@h150 ~]# scp -r /opt/hadoop-2.7.1/ root@h152.c7:/opt/
[root@h150 ~]# hdfs namenode -format
[root@h150 ~]# start-all.sh