学习Hadoop虚拟机命令,核心答案其实就一句话:先掌握SSH免密登录、JPS进程检查、HDFS文件上传下载这三板斧,再逐步扩展到服务启动和任务管理,基本就能应付大多数入门场景了。
Hadoop虚拟机环境准备阶段,有哪些必学的系统命令?
为什么虚拟机跑Hadoop要先配置SSH免密登录?
刚把Hadoop装进虚拟机时,最头疼的往往不是Hadoop本身,而是集群节点之间的通信认证,Hadoop的DataNode和NodeManager进程需要和NameNode、ResourceManager频繁握手,如果每次都要输密码,集群根本跑不起来。SSH免密登录是启动Hadoop集群的前置条件。
在虚拟机终端里,按顺序敲这三条命令:
ssh-keygen -t rsa:生成公钥和私钥,一路回车就行ssh-copy-id hadoop@localhost:把公钥复制到本机,这里的hadoop是你创建的用户名,也可以是rootssh localhost:验证能不能无密码登录
有朋友问过,登录命令和HDFS命令哪个更重要?其实两者是配合关系,SSH管的是机器之间的通道,HDFS命令管的是数据文件的存取,少了哪个都别扭。
虚拟机上检查Hadoop进程,JPS命令怎么看?
JPS命令是Hadoop虚拟机的“体检报告”,专门用来查看Java进程是否正常启动,在Hadoop的sbin目录下执行启动脚本后,第一时间跑jps,理想情况下能看到这些进程:
NameNode:负责管理文件系统的命名空间DataNode:实际存储数据块的节点ResourceManager:管理CPU和内存资源分配NodeManager:每个节点上的资源执行者
如果发现缺少了DataNode,大概率是格式化时配置出了岔子,我建议用jps | grep -v Jps来过滤掉JPS自身进程,输出会清爽很多。
Hadoop虚拟机HDFS文件操作命令,哪些是新手高频使用的?
怎么把Windows本地文件放进虚拟机里的HDFS?
大多数新手用的虚拟机都是通过VMware或VirtualBox装的,宿主机是Windows,虚拟机是Linux,文件传输常用sftp或lrzsz工具,但真正进入HDFS后,就全看HDFS命令了。
假设你在虚拟机的/home/hadoop/目录下有个test.txt,执行:
hdfs dfs -mkdir -p /input:在HDFS根目录创建input文件夹hdfs dfs -put /home/hadoop/test.txt /input/:把本地文件上传到HDFShdfs dfs -ls /input:查看文件是否上传成功,注意看文件大小和副本数
HDFS的-ls命令和Linux的ls命令非常相似,区别在于HDFS的路径不带file://前缀,直接写hdfs://localhost:9000/这样的完整路径也能访问,但更快捷的方式是直接用相对路径,比如/input,系统会自动读取core-site.xml里的默认地址。
HDFS上传下载和查看内容,有哪些容易混淆的命令?
很多新手会把-put和-copyFromLocal搞混,行业共识认为,这两者功能完全等价,都是把本地文件复制到HDFS,唯一差别是-put还能从标准输入读取数据,-copyFromLocal则严格限定为本地文件路径。
的命令,按使用频率排名:
hdfs dfs -cat /input/test.txt:直接把内容打印到终端,适合小文件hdfs dfs -tail /input/test.txt:只看最后1KB内容,适合大日志文件hdfs dfs -head /input/test.txt:只看开头内容,Hadoop 3.x版本才支持hdfs dfs -text /input/test.txt:把SequenceFile或压缩文件转成文本格式输出
下载文件到虚拟机本地,用hdfs dfs -get /input/test.txt /home/hadoop/download/,注意目标目录必须已存在,否则会报错。
删除和移动HDFS文件,命令格式和Linux有什么区别?
HDFS命令和Linux命令长得像,但绝对不是同一个东西,删除文件用hdfs dfs -rm /input/test.txt,删除空目录用hdfs dfs -rmdir /input/empty,删除非空目录得加-r参数:hdfs dfs -rm -r /input。
移动文件是hdfs dfs -mv /input/test.txt /tmp/,复制是hdfs dfs -cp /input/test.txt /tmp/。新手最容易栽在路径上HDFS的路径默认就是根目录开始,不需要写hdfs://开头的绝对地址,但如果你改了core-site.xml里的fs.defaultFS端口,那就必须写完整路径了。
Hadoop虚拟机集群管理命令,怎么优雅地启动和停止?
启动HDFS和YARN,脚本执行顺序有讲究吗?
进入Hadoop安装目录的sbin文件夹,你会看到一堆脚本,新手建议按这个顺序执行:
start-dfs.sh:启动NameNode、DataNode和SecondaryNameNodestart-yarn.sh:启动ResourceManager和NodeManagermapred --daemon start historyserver:启动JobHistory服务,方便查看任务日志
对应的停止命令是stop-dfs.sh和stop-yarn.sh,顺序上,停止时先停YARN再停HDFS比较稳妥,业内专家指出,这样能让正在跑的任务先把状态写盘,数据更安全。
单节点和集群模式,虚拟机配置命令有哪些差异?
很多新手在虚拟机上只开了一个节点,跑的是伪分布式模式,这时候你不需要配置slaves或workers文件,所有角色都在同一台机器上,但如果你的虚拟机配置了多台镜像(比如用Cloudera QuickStartVM再加两个节点),就需要在etc/hadoop/workers文件里逐行写上每个节点的IP或主机名。
这里有个常见bug:如果你复制了虚拟机镜像,新节点的/tmp/hadoop-${user}目录还残留着旧节点的临时数据,会导致DataNode启动失败,解决办法是先执行hadoop-daemon.sh stop datanode,然后清空临时目录,再重新hdfs namenode -format格式化。
安全模式和磁盘检查命令,什么时候必须用?
HDFS有个安全模式,NameNode启动时会自动进入,此时不允许写操作,判断命令是hdfs dfsadmin -safemode get,强制退出是hdfs dfsadmin -safemode leave,但别乱用,强制退出可能会导致数据块缺失。
检查文件系统健康状态:
hdfs fsck / -files -blocks:查看文件的数据块分布是否正常hdfs dfsadmin -report:查看每个DataNode的存储容量和剩余空间hdfs balancer:数据分布不均时手动触发均衡,执行时间比较长
Hadoop虚拟机资源管理和任务提交命令,怎么监控?
YARN的任务命令有哪些?
YARN负责调度计算资源,你可能需要这些命令:
yarn application -list:查看正在运行的应用程序yarn application -status+ 应用ID:查看某个任务的详细状态yarn application -kill+ 应用ID:终止卡死的任务yarn logs -applicationId+ 应用ID:查看任务日志,排错神器
记住,应用ID通常在application_时间戳_数字格式,别把任务编号搞混了。
提交MapReduce任务,虚拟机上跑的命令长什么样?
以官方自带的WordCount示例为例,在虚拟机上执行:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output
注意输出目录/output必须不存在,否则Hadoop会直接报错,不会帮你覆盖,跑完再用hdfs dfs -cat /output/part-r-00000看结果。
对于新手,如果虚拟机内存不够用(比如只有2GB),建议在yarn-site.xml里调低yarn.nodemanager.resource.memory-mb到1024,同时把mapreduce.map.memory.mb设为512,否则任务很容易因内存溢出被系统kill掉。
Hadoop虚拟机文件配置命令,怎么查找和编辑?
配置文件在哪?修改后怎么生效?
Hadoop的配置集中在etc/hadoop/目录下,核心文件有四个:
core-site.xml:文件系统IP和端口hdfs-site.xml:副本数和NameNode元数据路径mapred-site.xml:MapReduce运行框架yarn-site.xml:资源管理器相关参数
改完配置后,不用重启整个虚拟机,但要重启Hadoop服务才生效,执行stop-all.sh和start-all.sh(老版本)或者逐个执行前面说的启动脚本。
修改配置文件前最好先备份,命令是cp core-site.xml core-site.xml.bak,统计显示,相当一部分新手因为改错配置导致NameNode起不来,只能靠备份文件回滚。
新手容易踩的坑和排查命令有哪些?
命令路径找不到,怎么办?
Hadoop安装后,命令可能在sbin和bin两个目录,如果你没配环境变量,每次都要到/usr/local/hadoop/sbin下执行,建议在~/.bashrc里加上export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin,然后source ~/.bashrc。
端口被占用,虚拟机起不来NameNode?
用netstat -tlnp | grep 9000或ss -ltnp | grep 9000查端口,NameNode默认用9000或8020端口,ResourceManager用8088,NameNode的Web页面用9870,如果端口被占,改core-site.xml里的fs.defaultFS端口即可。
日志文件在哪看?
Hadoop的日志在logs/目录下,查看NameNode日志用tail -100f logs/hadoop-hadoop-namenode-虚拟机名.log,格式类似这样,排查HDFS写入失败,90%的情况都能从日志里找到明确报错。
Hadoop虚拟机命令常见问题Q&A
Q: Hadoop虚拟机命令和Linux命令操作起来有什么区别?
A: Hadoop命令以hdfs dfs或hadoop fs开头,操作的是分布式文件系统,路径逻辑上是全局统一的,没有本地目录的挂载概念,Linux命令操作的是本地磁盘,路径跟着目录结构走,比如ls /在Linux显示根目录文件,在HDFS里则显示当前命名空间下的所有目录。
Q: 想学hadoop虚拟机命令,配置很低的老电脑能带得动吗?
A: 能带得动,但要把虚拟机内存调到至少2GB,处理器核数给到2核,并用伪分布式模式跑,只启动必要进程,再就是关闭虚拟机的图形界面,用init 3切换命令行模式,能省出不少内存,如果跑WordCount还是卡顿,可以先用一个小数据集测试,比如几百KB的文件。
Q: Hadoop虚拟机执行hdfs dfs命令时提示Connection refused,怎么排查?
A: 多数情况下是NameNode没启动成功,先执行jps确认进程是否存在,然后执行hdfs dfsadmin -report检查安全模式状态,如果再不行,用ssh localhost测试免密登录是否有效,最后一个排查方向是检查core-site.xml里的fs.defaultFS的IP地址是否写成了localhost,而虚拟机绑定的网卡是IP地址,这里建议写0.0.0或者具体IP,别用localhost。
归根结底,hadoop虚拟机命令的学习路径是环环相扣的,从SSH到JPS,再到HDFS的文件读写和YARN的任务监控,每一条命令都有明确的适用场景,你先在虚拟机里建好输入目录,用put上传一个测试文件,再用cat,最后跑一个自带示例任务,基本就能把所有核心命令串起来了。