大数据实验踩坑指南_No.1——Hadoop的安装配置
大数据实验踩坑指南_No.1——Hadoop的安装配置
前置准备
系统安装
先要安装好Ubuntu22.04
安装过程比较简单,下载镜像写入U盘,通过U盘启动镜像,根据提示安装即可
有一些比较重要的点写在下面
显卡驱动问题
NVIDIA显卡在安装的过程中可能会有显示不正常或者黑屏的问题,这是因为默认使用的是开源驱动Nouveau,只需要在引导界面grub上按e,然后在内核参数那一行加上nomodeset,禁用显卡驱动,安装过程就显示正常了
系统安装完成重启,同样加上nomodeset参数,然后安装好NVIDIA的显卡驱动重启就能正常了(如果在系统安装的时候选择了安装第三方软件,驱动应该也是装好的,装好后就不需要nomodeset参数了)
分区
安装过程中涉及到分区的操作,Linux中的分区与Windows不同,注意谨慎操作,以免造成数据丢失
我把300G的空闲分区分成两部分
- 300MB的EFI分区(这是用于存放引导文件的分区,用于系统的启动)
- 剩余部分分给了根分区(用于存储系统的文件)
当然也可以选择其他的分区方式
必要程序的安装
在这个案例中,所需要安装的apt包有以下这些,可以通过sudo apt-get install [包名]命令进行安装
ssh:网络传输协议openjdk-8-jdk:Java开发环境mysql-server:MySQL开源数据库build-essential:基础编译工具集合cmake:开源的跨平台自动化建构系统
还有一些可选的工具包
vim:上手难度大但是强大的编辑器xclip:为vim提供一个访问系统剪贴板的接口(X11桌面协议)wl-clipboard:为vim提供一个访问系统剪贴板的接口(Wayland桌面协议,需要将环境变量WAYLAND_DISPLAY设置为wayland-0`)git:版本管理工具curl:网络传输工具,在安装R等软件的时候会用到
SSH配置
大数据软件需要SSH登录,用于各个软件、各个节点之间的相互访问
安装好ssh软件后,通过以下命令启动ssh服务
1 | sudo service ssh start |
然后通过以下命令登录本机
1 | ssh localhost |
此时会有如下提示,输入yes。然后按照提示输入用户密码hadoop,即可登录到本机
输入密码时不会像一些软件一样显示***的样式,直接输入密码回车
1 | The authenticity of host 'localhost (127.0.0.1)' can't be established. |
但是这样每次登录都需要输入密码,接下来配置无密码登录。首先输入exit退出ssh,回到原先的终端窗口,通过ssh-keygen生成密钥
1 | ssh-keygen |
1 | Generating public/private rsa key pair. |
可以通过
-t选项指定密钥类型,我这里不指定了,一路回车即可
通过ssh-copy-id命令将公钥安装到远程主机上,按照提示输入密码hadoop
1 | ssh-copy-id localhost |
1 | /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/hadoop/.ssh/id_rsa.pub" |
接下来尝试登录本机
1 | ssh localhost |
可以看到不需要密码就能登陆了
JDK
通过命令安装jdk
1 | sudo apt-get install openjdk-8-jdk |
查看/usr/lib/jvm目录的内容
1 | ls /usr/lib/jvm |
可以看到/usr/lib/jvm内有两个目录java-1.8.0-openjdk-amd64和java-8-openjdk-amd64,其中java-1.8.0-openjdk-amd64是java-8-openjdk-amd64链接,相当于一个快捷方式(说法不太准确,但是先这样理解)
然后用你熟悉的编辑器(比如vim、nano,其中nano用法比较简单,也可以使用gedit,gedit是ubuntu中的一个GUI的编辑器,类似Windows的记事本)来打开/home/hadoop/.bashrc文件
1 | gedit /home/hadoop/.bashrc |
在这个文件中添加以下内容(林子雨老师的教程中写的是在文件的开头添加,实际上配置的先后没有影响,除非前面的配置出现问题,导致配置文件加载失败,错误行以后的内容都不会进行加载)
1 | export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 |
Hadoop基础安装
到Hadoop官网[1]下载好hadoop-3.3.6.tar.gz
将Hadoop解压到/usr/local/目录下
1 | sudo tar -zxvf /home/hadoop/Downloads/hadoop-3.3.6.tar.gz -C /usr/local/ # 如果系统语言为中文,则文件路径应当是/home/hadoop/下载/hadoop-3.3.6.tar.gz,或者你下载到其他目录,就改为对应的路径 |
编辑Hadoop的环境变量,找到文件对应的行进行修改,需要将#删掉,每一项的说明都可以在文件里查看
1 | export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 |
输入以下命令来检查Hadoop是否可用,成功则会显示版本信息
1 | cd $HADOOP_HOME # 进入Hadoop的目录 |
为了可以在任何目录下执行hadoop的命令,我们在.bashrc中配置环境变量
1 | export HADOOP_HOME=/usr/local/hadoop |
$表示用于引用变量的值,:用于分隔路径列表
配置完成后,通过以下命令加载配置
1 | source /home/hadoop/.bashrc |
执行以下命令,如果显示版本信息,则配置成功
1 | hadoop version |
伪分布式配置
Hadoop可以在单节点以一个伪分布式的模式机型运行。不同的Hadoop守护进程运行在不同的java进程中。
1 | <configuration> |
1 | <configuration> |
在林老师的文档中,还配置了
dfs.namenode.name.dir和dfs.datanode.data.dir而这两个变量的默认值为
dfs.datanode.data.dir:file://${hadoop.tmp.dir}/dfs/datadfs.namemode.name.dir:file://${hadoop.tmp.dir}/dfs/name所以只需要设置好tmp目录即可,默认的tmp目录为
/tmp,这个目录内的文件会在电脑重启以后被清除,因此将其配置在$HADOOP_HOME内
1 | hdfs namenode -format |
在倒数第十二行左右可以看到格式化成功的信息
1 | 2024-06-15 20:55:38,067 INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted. |
启动NameNode守护进程和DataNode守护进程
1 | start-dfs.sh |
启动完成后,通过jps命令可以查看到相应的进程
1 | 43529 NameNode |
这些进程的作用如下
NameNode:HDFS的主节点,负责管理文件系统的命名空间和元数据信息。DataNode:HDFS的从节点,负责处理文件系统客户端的读写请求,在文件系统中实际存储数据。SecondaryNameNode:主要作用是帮助NameNode合并编辑日志(edits log)和文件系统镜像(fsimage),以此来减少NameNode启动时间。Jps:jps命令本身的进程,用于列出当前运行的Java进程。
运行Hadoop伪分布式实例
尝试运行Hadoop伪分布实例[2]
问题集锦
缺少Namenode
在集群启动后,输入jps查看进程发现缺少了Namenode[3]
原因:
- 启动Hadoop以后没有正常关闭就直接关机
- 频繁使用
hadoop namenode -format对Namenode进行格式化 - NameNode格式化失败
解决方式:
- 停止Hadoop集群
stop-dfs.sh
- 查看核心文件
core-site.xml里的临时文件夹配置<value>/usr/local/hadoop/tmp</value>
- 删除tmp文件夹
rm -rf /usr/local/hadoop/tmp
- 重新对Namenode进行格式化