大数据导论实验一——搭建Hadoop集群
本文最后更新于:2022年10月24日 下午
安装Centos7
很容易,不解释,建议最小安装
创建Hadoop用户
1 |
|
修改hadoop用户的密码:
1 |
|
为hadoop用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题,执行:
1 |
|
找到下图处并修改为:
安装ssh和openssh
集群、单节点模式都需要用到SSH登陆(类似于远程登陆,你可以登录某台Linux主机,并且在上面运行命令),一般情况下,CentOS默认已安装了SSH client、SSH server,打开终端执行如下命令进行检验:
1 |
|
若如下图所示即已经安装。
否则执行下列命令安装:
1 |
|
接着执行如下命令测试一下 SSH 是否可用:
1 |
|
此时按提示输入密码,这样就登陆到本机了。
但这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆比较方便。
首先输入 exit
退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:
1 |
|
此时再用 ssh localhost
命令,无需输入密码就可以直接登陆了。
使用Xshell连接虚拟机
设置虚拟机网络(其实完全不用,用好ip a
就够了)
右键虚拟机->设置->选择设置了Nat模式的网卡
修改Windows IP地址:
当然你前面都不做也可以,等到分布的时候再做也行。😋😋😋😋😋😋😋😋
执行命令:
1 |
|
划红线的就是虚拟机的ip
接下来使用一款ssh客户端就可以连接了
安装Java环境(装1.8!!!)
Java环境可选择Oracle的JDK,或是OpenJDK,现在一般Linux系统默认安装的基本是OpenJDK。需要注意的是,CentOS中默认安装的只是JavaJRE,而不是JDK,为了开发方便,我们还是需要通过yum进行安装JDK,安装过程中会让输入[y/N],输入y即可:
1 |
|
通过上述命令安装 OpenJDK,默认安装位置为 /usr/lib/jvm/java-11-openjdk
接着需要配置一下 JAVA_HOME 环境变量
1 |
|
在文件最后面添加如下单独一行(指向 JDK 的安装位置),并保存:
1 |
|
接着还需要让该环境变量生效,执行如下代码:
1 |
|
设置好后我们来检验一下是否设置正确:
1 |
|
如果设置正确的话,$JAVA_HOME/bin/java -version
会输出 java 的版本信息,且和 java -version
的输出结果一样,如下图所示:
这样,Hadoop 所需的 Java 运行环境就安装好了。
如何在Linux装Java1.8和删除Java,我想网上很多,这里默默装完了
安装Hadoop
Hadoop可以通过 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下载,本教程选择的是 3.3.4 版本,下载时请下载 hadoop-3.3.4.tar.gz 这个格式的文件,这是编译好的,另一个包含 src 的则是 Hadoop 源代码,需要进行编译才可使用。如果你用的不是3.3.4版本,则将所有命令中出现的3.3.4更改为你所使用的版本。
下载完成后通过ssh工具传到虚拟机内,放在你能找到的路径内,我们选择将 Hadoop 安装至 /usr/local/ 中:
1 |
|
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
1 |
|
同样把hadoop添加到环境变量:
1 |
|
Hadoop单机配置
Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子,包括 wordcount、terasort、join、grep 等。
在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+
的单词并统计出现的次数,最后输出结果到 output 文件夹中。
1 |
|
注意,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output
删除。
1 |
|
修改虚拟机ip 和主机名并验证
最小安装模式ifconfig命令无法使用,安装net-tools:
1 |
|
在root权限下输入下述命令:
1 |
|
修改为如下图所示:
修改主机名称为namenode:
1 |
|
配置主机名IP地址映射,方便管理:
1 |
|
所有配置完成后重新启动。重启之后,通过ifconfig和hostname命令验证ip地址和主机名是否配置成功。
1 |
|
关闭防火墙,关闭防火墙开机自启
1 |
|
- 注意:在企业开发时,通常单个服务器的防火墙时关闭的。公司整体对外会设置非常安全的防火墙
在/opt目录下创建文件夹,并修改所属主和所属组:
在/opt目录下创建module、software文件夹,未来有关hadoop的软件都安装在此
1 |
|
修改module、software文件夹的所有者和所属组均为hadoop用户
1 |
|
查看module、software文件夹的所有者和所属组
1 |
|
这两个文件夹是放Java安装包和hadoop安装包的,module是安装目录,其实随便安装在哪都行,只要环境变量配置好就行了
克隆模板虚拟机
注意不要选择连接模式克隆,要单独的克隆
克隆完成后修改这新的两台虚拟机的静态IP:
1 |
|
把这新的两台虚拟机的静态IP分别改为:
1 |
|
修改克隆机主机名为DataNode1和DataNode2:
1 |
|
分别改成DataNode1和DataNode2就行
之后reboot两台新虚拟机,然后继续用Xshell连接到这俩虚拟机,注意命令ip a
这时候测试一下可不可以用ssh登录到其他虚拟机:
1 |
|
输入密码后就可以成功连接了,大功告成
ssh免密登录
1 |
|
生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上
1 |
|
对另外两台机子做同样的操作
集群配置
集群部署规划
注意:
NameNode和Secondarynamenode不要安装在同一台服务器
ResourceManager也很消耗内存,不要和NameNode、Secondarynamenode配置在同一台机器上。
按照下表配置安装:
namenode | datanode1 | datanode2 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | Secondarynamenode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
配置文件说明
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
配置集群
切换到hadoop用户(目前在datanode1虚拟机上)
- 配置core-site.xml
1 |
|
1 |
|
- HDFS配置文件
1 |
|
1 |
|
- 配置yarn-site.xml
1 |
|
1 |
|
- 配置mapred-site.xml
1 |
|
1 |
|
群起集群
- 配置workers
1 |
|
在该文件中增加如下内容:
1 |
|
同步所有节点配置文件:
1 |
|
1 |
|
这里若出现Permission Denied,可以手动将修改后的文件复制到另外两个虚拟机,最好是给hadoop访问这个目录的权限:
1 |
|
启动集群
1 |
|
如果集群是第一次启动,需要在namenode节点格式化namenode:
1 |
|
启动HDFS:
1 |
|
在配置了ResourceManager的节点(DataNode1)启动YARN:
1 |
|
Web端查看HDFS的NameNode,浏览器输入:http://192.168.10.100:9870
Web端查看YARN的ResourceManager,浏览器输入:http://192.168.10.101:8088
遇到的困难和解决
- Java版本和Hadoop版本的兼容性问题
最开始安装的是Java11,但是最后启动集群的时候会报空指针错误,后来查明是Java版本的问题。
- hadoop配置文件错误
最开始给的实验指导是错的,耽误好长时间。
实验心得
第一次接触hadoop,真的遇到了好多问题,虽然本人对Linux比较了解,但是实验指导里面确实有很多冗余,还需要进一步精简。这次试验中我新学到了虚拟机的克隆和集群的搭建,也知道了如何在Linux下查询当前的IP地址,总的来说,让三个主机工作在一起是相当有意义的。