大数据实验踩坑指南_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/data
dfs.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进行格式化