ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux虚拟机下Hadoop伪分布式安装与常用命令实操指南

Linux虚拟机下Hadoop伪分布式安装与常用命令实操指南 简介这份《大数据实验 实验一熟悉常用的 Linux 操作和 Hadoop 操作》配套文档面向高校大数据课程初学者与自学者解决从零搭建大数据实验环境、掌握 Linux 基础操作与 Hadoop 伪分布式的常见入门困难。资料包含 1 个 docx 格式文件共约 289KB内容按实验目的、实验平台、实验内容和知识点总结组织其中完整列出了 cd、ls、mkdir、rmdir、cp、mv、rm、cat、tac、more、head、tail、touch、chown、find、tar、grep、配置环境变量等操作并附有每项命令的具体路径与操作要求。另外Hadoop 部分覆盖 3.1.3 伪分布式安装、启动集群、创建 HDFS 用户目录及运行 WordCount 实例的完整流程。该资源已有 973 人学习下载。通过这份文档读者可在 Windows 基础上用 VirtualBox 安装 Ubuntu配置 Java 环境变量独立完成从虚拟机搭建、常用命令练习到 Hadoop 实操验证的整套实验全文分步呈现命令示例明确也可作为实验报告模板使用。1. 熟悉 Linux 和 Hadoop 从这台虚拟机开始后续大数据实验都绕不开它大数据实验的第一课往往不是讲 HDFS 原理而是先让你把 Linux 和 Hadoop 环境立起来。这个实验是整套课程里最基础也最容易被卡住的一节先在 Windows 上用 VirtualBox 装一台 Ubuntu 虚拟机把常用 Linux 命令完整过一遍再在单机上完成 Hadoop 3.1.3 的伪分布式安装最后用 WordCount 跑通 MapReduce。这套环境是后续所有实验的地基暂时凑不齐集群环境时伪分布式是最好的替代方案。它适合刚接触大数据、正处在实验课程起步阶段的学生也适合想在本地快速复现大数据流程的入门开发者。花一个下午把这里走通后面就能把精力省回数据处理本身。2. Linux 常用命令的实操套路从目录切换、文件查看到变量配置2.1 虚拟机装到能开机VirtualBox 与 Ubuntu 18.04 的选型理由实验默认组合是 VirtualBox 虚拟机软件加 Ubuntu 18.04 系统Hadoop 版本锁定 3.1.3。我一般会沿用这个组合因为教材配套软件指南和网上大量踩坑记录都基于这套环境遇到问题能搜到现成的解法。换成 VMware 也不是不行只是共享文件夹、网络配置写法有差异没必要在入门阶段多增加变量。VirtualBox 和 Ubuntu 镜像从官网下载即可。安装镜像时重点看几个配置项虚拟机参数推荐值内存2048 MB 起步建议 4096 MB磁盘20 GB 动态分配网络NAT足够虚拟机访问外网系统类型Linux / Ubuntu 64 位安装完成后进系统先跑一遍sudo apt update把 apt 源刷新一下后面装 JDK、传文件都会用到网络。虚拟机装好后建议先做一次快照这时候系统是干净的后续装 Hadoop 改坏配置还能退回来。2.2 高频命令按目录、文件、查看、压缩分组过一遍这一组命令是实验的硬性要求按用途归成四类敲的时候别死记参数记“我要做什么”就行。# cd切换目录 cd /usr/local # 进入 /usr/local cd .. # 返回上一级 cd ~ # 回到当前用户主文件夹 # ls查看文件与目录 ls -l /usr # 长格式列出 /usr 下内容 # mkdir新建目录 mkdir /tmp/a mkdir -p /tmp/a1/a2/a3/a4 # -p 递归创建各级目录cd的三个用法是后续所有操作的基础尤其cd ~很多新手会直接用cd /home/hadoop但写成cd ~更稳妥换机器换用户都不会错。mkdir -p是高频参数实验里要建多级目录 a1/a2/a3/a4不加-p会每层都报“目录不存在”。# rmdir删除空目录 rmdir /tmp/a # 删除空目录 a rmdir -p /tmp/a1/a2/a3/a4 # -p 级联删除空父目录rmdir只能删空目录实验二、实验三里会频繁建非空目录到时候清理要用rm -r。这里先记住rmdir是删空目录的专用命令非空目录它不干活。# cp复制文件或目录 cp ~/.bashrc /usr/bashrc1 # 文件复制并改名 mkdir /tmp/test cp -r /tmp/test /usr/test # -r 递归复制目录 # mv移动文件/目录或更名 mv /usr/bashrc1 /usr/test/bashrc1 # 文件移动到新位置 mv /usr/test /usr/test2 # 目录重命名 # rm移除文件或目录 rm /usr/test2/bashrc1 rm -r /usr/test2 # -r 递归删除目录cp -r和rm -r是本实验最容易踩坑的地方少写-r会分别报“省略目录”和“无法删除目录”。如果/usr下没有写权限命令前加sudo提升权限实验环境里这是正常操作。查看文件内容这一组重点在head和tail的负数参数理解它们比背命令更值。# cat / tac正向与反向查看 cat ~/.bashrc tac ~/.bashrc # more逐页翻动查看 more ~/.bashrc # head取前几行 head -n 20 ~/.bashrc # 查看前 20 行 head -n -50 ~/.bashrc # 不显示最后 50 行只显示前面部分 # tail取后几行 tail -n 20 ~/.bashrc # 查看最后 20 行 tail -n 50 ~/.bashrc # 从第 50 行之后开始显示实验里“后面 50 行不显示只显示前面几行”用的是head -n -50注意这里的减号是“去掉末尾 N 行”的含义而tail -n 50的加号表示“从第 50 行开始”两个符号方向正好相反。我在实际看日志时更常用tail -n 100排查 Hadoop 进程崩溃基本靠它。# touch创建空文件或修改文件时间 cd /tmp touch hello ls -l hello # 查看默认时间属性 touch -d 5 days ago hello # 将文件时间改为 5 天前 # chown修改文件所有者 sudo chown root:root hello ls -l hello # 所有者变为 root # find查找文件 find ~ -name .bashrc # 在主文件夹下找 .bashrc # tar打包压缩与解压 sudo mkdir /test sudo tar -czvf /test.tar.gz /test # 打包并 gzip 压缩 sudo tar -xzvf /test.tar.gz -C /tmp # 解压到 /tmp # grep查找字符串 grep examples ~/.bashrctar -czvf里四个参数c创建包、zgzip 压缩、v显示过程、f指定文件名顺序固定解压时把c换成x即可。grep后面接双引号字符串是之后排查 Hadoop 日志最常用的检索方式建议现在就养成习惯。2.3 环境变量不是“配完就完”vim 编辑和 source 刷新实验要求配置 Java 环境变量标准做法是用 vim 打开~/.bashrc在文件末尾追加几行。vim ~/.bashrc进入 vim 后按i进入编辑模式在文件末尾追加下面四行export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export PATH$PATH:$JAVA_HOME/bin export HADOOP_HOME/usr/local/hadoop export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin编辑完按Esc输入:wq保存退出。然后必须执行刷新操作source ~/.bashrc echo $JAVA_HOME # 验证变量是否生效如果不执行source新开的终端也要重新登录才会生效。新手最容易漏掉这一步配完变量直接敲hadoop报command not found就开始怀疑环境。另外如果不会 vim也可以用echo export ... ~/.bashrc追加内容效果一样但多条变量建议还是用 vim 集中维护。3. Hadoop 伪分布式安装hadoop-3.1.3 的下载、配置和启动全过程3.1 前置准备JDK、hadoop 用户和目录权限一次理清Hadoop 跑在 JVM 上所以先确认 JDK 已经装好。Ubuntu 18.04 上我常用的是 OpenJDK 8java -version如果提示找不到 java先执行sudo apt install openjdk-8-jdk装完再确认。Java 路径后面写hadoop-env.sh要用可以提前执行readlink -f $(which java)把真实路径查出来避免配置时写错。实验要求 Hadoop 安装在/usr/local/hadoop下载好hadoop-3.1.3.tar.gz后执行cd /usr/local sudo tar -zxvf ~/hadoop-3.1.3.tar.gz sudo mv hadoop-3.1.3 hadoop sudo chown -R hadoop:hadoop /usr/local/hadooptar -zxvf的z表示解压 gzip 压缩包x解包v显示过程f指定文件。重命名成hadoop是为了后续命令短一些但要保证HADOOP_HOME配置和实际路径一致。单独建一个 hadoop 用户很有必要。Hadoop 3.x 虽然不会强制拒绝 root但用 root 启动之后会遇到很多文件属主和权限问题排查起来非常绕。sudo useradd -m hadoop -s /bin/bash sudo passwd hadoop建好之后后续所有格式化、启动、操作 HDFS 的命令都切到 hadoop 用户下执行。3.2 三个关键配置文件fs.defaultFS、tmp.dir 和副本数Hadoop 的主体配置在etc/hadoop/目录下伪分布式最少要动三个文件。先改hadoop-env.sh把 JAVA_HOME 写死。很多发行版通过 profile 已经导出了 JAVA_HOME但 Hadoop 脚本在某些场景下读不到写死最保险vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh在文件里找到export JAVA_HOME这一行改成实际 JDK 路径export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64接着改core-site.xml这是 HDFS 的入口配置configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/opt/module/hadoop-3.1.3/data/value /property /configurationfs.defaultFS决定了 HDFS 的访问地址伪分布式模式下就是localhost:9000。hadoop.tmp.dir很关键NameNode 和 DataNode 的元数据、数据块都会在这个目录下生成后面排查 DataNode 起不来就要到这里删数据。这个路径可以自定义但必须和 hdfs-site.xml 保持一致。最后是hdfs-site.xml单机伪分布式必须把副本数降为 1否则 DataNode 只有一台默认副本数 3 会导致部分副本无法写入configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name valuefile:///opt/module/hadoop-3.1.3/data/namenode/value /property property namedfs.datanode.data.dir/name valuefile:///opt/module/hadoop-3.1.3/data/datanode/value /property /configurationdfs.namenode.name.dir存元数据镜像dfs.datanode.data.dir存实际数据块。两个路径明确分开的好处是排查 Cluster-Id 不一致时能一眼定位问题文件所在位置。3.3 从格式化到 jps伪分布式启动的标准动作启动 Hadoop 之前先解决 SSH 免密登录。伪分布式虽然只有一台机器但 Hadoop 脚本内部还是会通过 SSH 连接 localhost 启动进程不配置免密的话每次启动都要输密码脚本还会卡住。ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys ssh localhost-P 表示生成密钥时不设置密码-f指定保存路径。最后执行ssh localhost如果不提示输密码说明免密配置成功。接下来是伪分布式安装里最关键、也最需要谨慎的一步格式化 NameNode。hdfs namenode -format格式化会初始化 HDFS 的元数据目录并把 NameNode 的 clusterID 写入 VERSION 文件。这个操作正常情况下只需要做一次而且必须在数据目录干净的状态下执行。如果目录里已有旧数据格式化会报目录已存在如果重复执行可能导致 NameNode 和 DataNode 的 clusterID 不一致DataNode 启动后自动退出。这个坑后文会专门展开。格式化完成后启动服务start-dfs.sh start-yarn.sh jps也可以直接用start-all.sh一次启动全部进程但这个命令在新版本已经被标记为过时我更习惯分开启动哪一步出问题能立刻定位。启动后jps命令会列出当前 Java 进程正常情况应看到NameNode DataNode SecondaryNameNode ResourceManager NodeManager五个进程一个都不能少。启动完成后浏览器访问http://localhost:9870是 NameNode 的 Web 界面http://localhost:8088是 YARN 的界面。9870 端口是 Hadoop 3.x 的新端口网上很多旧教程写 50070那是 Hadoop 2.x 的别搞混。4. HDFS 常用操作与 WordCount在单机上模拟小集群的数据搬运4.1 HDFS 目录与文件操作mkdir、put、get 的完整链路Hadoop 启动后第一步是在 HDFS 里给当前用户建目录。HDFS 的路径没有盘符所有路径都以根目录/开头。hdfs dfs -mkdir -p /user/hadoop hdfs dfs -mkdir -p /user/hadoop/test hdfs dfs -ls /user/hadoop/test-p参数和 Linux 的mkdir一样父目录不存在时自动创建。为什么一定要建/user/hadoop因为 HDFS 默认会把当前 Linux 用户名映射为 HDFS 用户目录不建的话后面执行任务写中间结果容易报权限类错误。目录建好后把本地文件上传到 HDFShdfs dfs -put ~/.bashrc /user/hadoop/test/ hdfs dfs -ls /user/hadoop/test/ hdfs dfs -cat /user/hadoop/test/.bashrc-put是上传-cat是查看文件内容。如果想反过来把 HDFS 文件拉回本地用-gethdfs dfs -get /user/hadoop/test/.bashrc /usr/local/hadoop/这个完整链路就是实验要求的“本地文件上传到 HDFS再复制回本地”。实际开发中-put和-get还常配合-du、-df查看目录容量和整体空间使用情况伪分布式环境下也能看到真实数据占用。4.2 用 WordCount 验证 MapReduce 能跑通WordCount 是 Hadoop 自带的示例程序能跑通它说明 HDFS、YARN、MapReduce 三层都正常。先准备本地输入文件cd /usr/local/hadoop mkdir wordcount_input echo hello world wordcount_input/file1.txt echo hello hadoop wordcount_input/file2.txt把输入文件上传到 HDFS 的/wordcount/input目录hdfs dfs -mkdir -p /wordcount/input hdfs dfs -put wordcount_input/* /wordcount/input/ hdfs dfs -ls /wordcount/input/然后提交任务hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wordcount/input /wordcount/output这里hadoop jar后面跟的是示例 jar 包的绝对路径路径里的版本号要和实际安装一致。最后的/wordcount/output是输出目录Hadoop 要求输出目录必须不存在否则会直接报FileAlreadyExistsException。任务跑完后查看结果hdfs dfs -cat /wordcount/output/part-r-00000输出文件以part-r-00000命名r表示 Reducer 产生的结果。第二次运行同样任务前要先删除旧输出目录hdfs dfs -rm -r /wordcount/output这个“输出目录不能存在”的规则是 WordCount 实验里最常见的报错但不是 Hadoop 不能覆盖而是它刻意避免覆盖数据防止误删中间结果。理解了这个设计后面对 HDFS 的写操作就不容易出反直觉的问题。4.3 HDFS 常用命令参数速查操作命令示例说明创建目录hdfs dfs -mkdir -p /path-p自动创建父目录查看目录hdfs dfs -ls /path列出文件与目录信息上传文件hdfs dfs -put 本地路径 HDFS路径本地文件上传到 HDFS下载文件hdfs dfs -get HDFS路径 本地路径HDFS 文件拉回本地查看内容hdfs dfs -cat /path/file查看文本文件内容删除文件hdfs dfs -rm -r /path-r递归删除目录报告容量hdfs dfs -df -h /查看 HDFS 空间使用情况数据节点状态hdfs dfsadmin -report查看各 DataNode 存活与存储状态hdfs dfsadmin -report这个命令在排查 DataNode 问题时特别有用能直接显示每个 DataNode 是否处于In Service状态。下面一章会看到很多时候界面上显示 LiveNode 为 0先跑这个命令比看网页更直接。5. 伪分布式避坑排查DataNode 起不来、Cluster-Id 不一致、格式化翻车5.1 先用 jps 和日志定位再动手删数据伪分布式环境出问题时第一反应不要是重装先看两样东西进程列表和日志。jps ls /usr/local/hadoop/logs/ tail -n 100 /usr/local/hadoop/logs/hadoop-hadoop-datanode-*.logjps只列 Java 进程如果发现 DataNode 进程消失说明它启动后异常退出了。日志文件名格式是hadoop-用户名-datanode-主机名.log直接翻最后 100 行里面通常会写明退出原因。伪分布式日志最常出现的几个关键词是clusterID、incompatible、Storage ID看到这些基本可以往格式化方向排查。5.2 高频踩坑记录与对应处理下面这些坑是我对照实验过程整理出来的每个都按“现象 → 原因 → 解决”拆开。现象 1jps只看到 NameNode、SecondaryNameNode、ResourceManager、NodeManager 和 Jps 本身DataNode 进程始终没有浏览器访问 9870 端口LiveNode 数量为 0。原因之前多次执行hadoop namenode -format每次格式化都会生成新的 clusterID但 DataNode 数据目录里的 VERSION 文件还保留旧的 clusterID。启动时 NameNode 发现 clusterID 对不上DataNode 注册失败后自动退出。解决删除core-site.xml里hadoop.tmp.dir指向的整个数据目录比如rm -rf /opt/module/hadoop-3.1.3/data然后重新执行hadoop namenode -format再用start-all.sh重启集群。这个操作会清空 HDFS 里的所有数据格式化前记得先hdfs dfs -get把需要的文件拉回本地。现象 2执行hadoop namenode -format时报Storage directory exists with an incompatible clusterID。原因namenode 目录或整个数据目录是之前格式化残留的不是干净状态。解决不要只删namenode子目录把hadoop.tmp.dir指向的整个 data 目录连同namenode、datanode一起删干净再重新格式化。删除后确认目录不存在或为空再执行格式化。现象 39870 网页打不开或页面打开但 LiveNode 一直是 0。原因可能只启动了 YARN 没启动 HDFS或者 NameNode 还在安全模式。伪分布式集群刚启动时NameNode 会先进入安全模式等待 DataNode 上报数据块。解决先jps确认 NameNode 和 DataNode 都在再执行hdfs dfsadmin -report看 DataNode 状态如果提示Safe mode is ON等待自动退出也可以执行hdfs dfsadmin -safemode leave手动退出。注意安全模式不是错误是 Hadoop 的保护机制。现象 4启动脚本卡在localhost之后要求输入密码或者ssh localhost每次都输密码。原因SSH 公钥没有正确追加到~/.ssh/authorized_keys或者该文件权限太宽松SSH 出于安全考虑拒绝使用。解决重新执行密钥生成和追加流程最后执行chmod 600 ~/.ssh/authorized_keys。生成密钥时-P 不能少否则会要求输入 passphrase启动脚本无法交互输入。现象 5用 root 用户启动 Hadoopjps进程都正常但上传数据或跑 WordCount 时报权限错误。原因HDFS 权限体系把 root 映射成超级用户但本地文件属主、YARN 临时目录这些地方会和普通用户混在一起产生属主不一致。解决从创建 hadoop 用户开始重新捋一遍/usr/local/hadoop目录属主改成hadoop:hadoop之后所有命令切到 hadoop 用户下执行。这不是必须用普通用户而是能少踩很多权限坑。5.3 重新格式化的边界哪些情况值得犹豫格式化能解决很多伪分布式问题但它是不可逆操作。执行hadoop namenode -format等于把 HDFS 里的目录、文件、数据块全部抹掉哪怕只是格式化一遍旧数据也回不来。所以格式化之前必须确认两件事第一HDFS 里有没有还没下载到本地的数据第二数据目录是否已经清理干净。如果只是某个进程起不来优先翻日志如果确认是 clusterID 不一致才考虑删数据重新格式化。更稳妥的做法是在环境刚搭好、WordCount 能跑通时就给虚拟机拍快照后面每次调配置前先拍快照格式化翻车时恢复快照比重新装系统快得多。这个习惯在我后续做 HDFS 权限实验、Yarn 调度实验时救过我很多次。6. 收尾验证与快照习惯让这套环境能复用到后续实验环境搭建完别急着关虚拟机先做三个验证动作确认这套伪分布式环境真的可用。第一个验证是进程完整性执行jps确认 NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager 五个进程都在。少任何一个都不算成功DataNode 缺失按上一章的处理方式排查。第二个验证是 WordCount 真实跑通不只看任务提交成功还要hdfs dfs -cat /wordcount/output/part-r-00000确认输出结果是每个单词的词频统计。这一步能同时证明 HDFS 存储、YARN 资源调度、MapReduce 计算三层都正常工作。第三个验证是 Web 界面浏览器打开http://localhost:9870进入Datanodes标签页能看到一个状态为 In Service 的节点再打开http://localhost:8088能看到 Active 的 ResourceManager。这两个页面是后续监控作业状态的主要入口。验证通过后我强烈建议做一次虚拟机快照。VirtualBox 操作路径是先执行stop-all.sh把 Hadoop 集群停掉然后在 VirtualBox 主界面选中虚拟机点“快照”按钮拍摄快照命名为“Hadoop 3.1.3 伪分布式可用状态”。之后无论怎么折腾都能快速恢复到这个基线。从那以后我每次都强制自己走一遍完整流程先stop-all.sh停服务再拍快照之后才动配置或格式化。这套习惯让我在实际项目里也受益匪浅——任何环境变更前留一个可回滚的基线比事后花两小时装系统省心得多。希望帮到你。本文还有配套的精品资源点击获取
返回列表