下载Ubutu镜像
前往阿里镜像站
https://mirrors.aliyun.com/oldubuntu-releases/releases/16.04.0/?spm=a2c6h.25603864.0.0.6be57ff3u2zMGR
选择下载
ubuntu-16.04-desktop-amd64.iso
下载时间较久,请耐心等待
创建实验用虚拟机
选择
创建新的虚拟机
选择
典型
并下一步
选择
安装程序光盘映像文件
点击
浏览
,选中此前下载的光盘镜像文件
如下图设置
设置最大虚拟机占用内存
100GB
(并不会立即使用100GB),并选中
将虚拟磁盘存储为单个文件
点击
完成
等待虚拟机安装完成
安装完成后,如下图所示
选择
xmudblab
并输入
123456
,回车即登录完成
按下
CTRL
ALT
键,即可打开终端命令行T
点击窗口左上角的
按钮,即可关闭终端圆X
选择左边栏中的
即可进行系统文件管理(类似打开Windows我的电脑)Floppy Disk
打开后,选中
右键,再点击Floppy Disk
,即可关闭Quit
至此,完成虚拟机的安装
配置虚拟机环境
创建hadoop用户
sudouseradd -m hadoop -s /bin/bash
sudopasswd hadoop # 给Hadoop用户设置密码sudo adduser hadoop sudo# 给Hadoop用户提权,避免不必要的权限问题
配置网络
点击VM上边的编辑,选择虚拟网络编辑器,点击右下角的
更改设置
,对NAT模式进行修改
选择名称为
VMnet8
的NAT模式,取消使用本地DHCP服务器,并如下设置子网IP及子网掩码
先点击应用,再点击确定,保存设置
在Ubutu虚拟机中,点击喇叭左边的按钮,选择编辑网络连接
点击因特网,选中第一个网络连接,并点击编辑
点击IPV4,并点击下方的Method,选中Manual选项
然后点击
Add
添加IPV4地址,子网地址为
172.25.254.10
子网掩码为
255.255.255.0
网关为
172.25.254.2
IPV4地址的设置与VM的虚拟网络编辑器息息相关
然后设置DNS:114.114.114.114
最后点击Save,进行保存退出,再点击Close,然后重启Ubutu虚拟机
更新apt
点击右边的设置界面,选择软件包&更新
点击
Download ...
右边的倒三角,在弹出的窗口中,往上滑,找到
China
并点击,选择
...aliyun...
,并点击
Choose Server
点击
Reload
重新加载,等待加载完成,若加载失败,选择其他中国服务器,再进行加载
# 加载完成后,打开终端,并输入命令,进行更新sudoapt-get update # 成功更新,如下图所示sudoapt-getinstallvim -y # 安装新的编辑器
安装SSH、配置SSH无密码登陆
sudoapt-getinstall openssh-server # Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH serverssh localhost # 尝试远程连接本机exit# 退出刚才的 ssh localhostcd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以cat ./id_rsa.pub >> ./authorized_keys # 加入授权# 这样,本机就可以被远程连接(使用xshell来代替VM)# 另一方面,实现了Hadoop集群、单节点模式 SSH 的免密登陆# 从此处开始,以后操作均在xshell中进行
安装Java环境
# 安装 Java 环境(Java 21.0.04)sudoapt-getinstallwget -y # 安装下载工具wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
# 若虚拟机下载失败,请使用Windows前往官网进行下载,下载完成后,上传至虚拟机sudomkdir /usr/lib/jvm -p # 创建放置Java的目录sudotar -zxvf ./jdk-21_linux-x64_bin.tar.gz -C /usr/lib/jvm # 解压Java压缩包vim ~/.bashrc # 编辑环境变量... # 在最下一行输入exportJAVA_HOME=/usr/lib/jvm/jdk-21.0.4
exportJRE_HOME=${JAVA_HOME}/jre
exportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
exportPATH=${JAVA_HOME}/bin:$PATHsource ~/.bashrc # 刷新环境变量
java -version # 安装成功,命令显示如下
安装 Hadoop3.3.5
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.5/hadoop-3.3.5.tar.gz # 同理,下载Hadoopsudotar -zxvf ./hadoop-3.3.5.tar.gz -C /usr/local
cd /usr/local/
sudomv ./hadoop-3.3.5/ ./hadoop
sudochown -R hadoop:hadoop hadoop/ # 修改权限
/usr/local/hadoop/bin/hadoop version # 安装成功,显示如下
Hadoop单机配置(非分布式)
Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行
非分布式即单 Java 进程,方便进行调试
运行例子:将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中
cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep ./input ./output 'dfs[a-z.]+'cat ./output/* # 查看运行结果
Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将
./output
删除
rm -r ./output
部署Hadoop伪分布式
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件
Hadoop 的配置文件位于
/usr/local/hadoop/etc/hadoop/
中
Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现
# 以下是伪分布式需要修改的配置文件vim ./etc/hadoop/core-site.xml
...
<configuration><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description></property><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property></configuration>
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件)
因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项
vim ./etc/hadoop/hdfs-site.xml
...
<configuration><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/tmp/dfs/data</value></property></configuration>
vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
# 在第54行基础上,去掉注释,并添加JAVA的具体路径exportJAVA_HOME=/usr/lib/jvm/jdk-21.0.4
配置完成后,执行 NameNode 的格式化
cd /usr/local/hadoop
./bin/hdfs namenode -format # 启动完成,如下图所示
开启 NameNode 和 DataNode 守护进程
cd /usr/local/hadoop
./sbin/start-dfs.sh # start-dfs.sh是个完整的可执行文件,中间没有空格# 启动完成,如下图所示
# 可通过 jps 命令来判断是否启动成功
hadoop@ubuntu:/usr/local/hadoop$ jps
6355 SecondaryNameNode
6566 Jps
6007 NameNode
6138 DataNode
# SecondaryNameNode NameNode DataNode 均出现,表示启动成功
启动成功后,可以访问Web界面
http://localhost:9870
查看NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件,此方法需要Windows主机有虚拟机的主机解析?
运行Hadoop伪分布式
./bin/hdfs dfs -mkdir -p /user/hadoop # 在 HDFS 中创建用户目录
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
./bin/hdfs dfs -ls input # 查看文件列表
伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(不是Ubutu虚拟机中的文件)
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep input output 'dfs[a-z.]+'
./bin/hdfs dfs -cat output/* # 查看的是位于 HDFS 中的输出结果
Hadoop 运行程序时,输出目录不能存在,否则会提示错误
因此若要再次执行,需要执行如下命令删除 output 文件夹
./bin/hdfs dfs -rm -r output # 删除 output 文件夹
若要关闭 Hadoop,则运行
./sbin/stop-dfs.sh
下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行
./sbin/start-dfs.sh
就可以
版权归原作者 Deutsch. 所有, 如有侵权,请联系我们删除。