首先需要搭建hadoop环境
如果没有可以阅读这篇文章:https://blog.csdn.net/2202_75334392/article/details/132863607?spm=1001.2014.3001.5501
然后
启动Hadoop
(1) Hadoop的三种Shell命令
1. hadoop fs
2. hadoop dfs
3. hdfs dfs
hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
hadoop dfs只能适用于HDFS文件系统
hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统
(2)Hadoop HDFS的常用命令
常用命令 功能
-help [cmd] 显示命令的帮助信息
学习HDFS的相关指令,都可以通过-help查询语法,比如:
-appendToFile <localsrc> ... <dst>从本地追加信息到HDFS文件系统上
-ls(r) <path> 显示当前目录下所有文件
-du(s) <path> 显示目录中所有文件大小
-count[-q] <path> 显示目录中文件数量
-mv <src> <dst> 移动多个文件到目标目录
-cp <src> <dst> 复制多个文件到目标目录
-rm(r) 删除文件(夹)
-rmdir 删除空文件夹
-put <localsrc> <dst> 本地文件复制到hdfs
-copyFromLocal <localsrc> ... <dst> 同put
-moveFromLocal 从本地文件移动到hdfs,本地的文件将被删除
-get <src> <localdst> 复制文件到本地,可以忽略crc校验
-getmerge <src> <localdst> 将源目录中的所有文件排序合并到一个文件中
-cat <src> 在终端显示文件内容
-text <src> 在终端显示文件内容
-copyToLocal [-ignoreCrc] <src> <localdst> 复制到本地
-moveToLocal <src> <localdst> 移动到本地,暂未
-mkdir <path> 创建文件夹
-touchz <path> 创建一个空文件
(3) 集群测试
(1)上传文件到集群
- 上传小文件
本地Linux的准备工作:
[atguigu@hadoophww ~]$ cd /usr/local/hadoop
[atguigu@hadoophww hadoop]$ mkdir wcinput
[atguigu@hadoophww hadoop]$ cd wcinput
[atguigu@hadoophww wcinput]$ vim word.txt
word.txt中可以输入实验心得
HDFS上的准备工作:
[atguigu@hadoophww wcinput]$ hadoop fs -mkdir /wordcount
[atguigu@hadoophww wcinput]$ hadoop fs -put word.txt /wordcount
WEBUI查看
上传大文件
上传一个超过128M的文件,验证下HDFS的分块。
[atguigu@hadoophww wcinput]$ hadoop fs -put hadoop-3.1.3.tar.gz /hww/hadoop
以此为例,来看下大型文件的分块和存储位置。
(2)上传文件后查看文件存放在什么位置
查看HDFS文件存储路径(根据每个人配置的时候,选定的datanode路径进行查询)
[atguigu@hadoophww subdir0]$
cd /usr/local/hadoop/tmp/dfs/data/current/BP-891536792-192.168.116.80-1661602338471/current/finalized/subdir0/subdir0
(3)块拼接,验证文件的分块(根据自己上传文件的实际情况进行拼接)
[atguigu@hadoophww subdir0]$ cat blk_1073741848>>tmp.tar.gz
[atguigu@hadoophww subdir0]$ cat blk_1073741849>>tmp.tar.gz
[atguigu@hadoophww subdir0]$ cat blk_1073741850>>tmp.tar.gz
[atguigu@hadoophww subdir0]$ sudo tar -zxvf tmp.tar.gz
(4)下载
[atguigu@hadoophww ~]$ hadoop fs -get /hww/hadoop/hadoop-3.1.3.tar.gz /usr/local/hadoop/tmp
(5)执行wordcount程序
[atguigu@hadoophww ~]$ cd /usr/local/hadoop/share/hadoop/mapreduce
[atguigu@hadoophww mapreduce]$ hadoop jar hadoop-mapreduce-examples-3.1.3.jar wordcount /wordcount /output2
[atguigu@hadoophww mapreduce]$ hadoop fs -ls /output2
[atguigu@hadoophww mapreduce]$ hadoop fs -cat /output2/part-r-00000
看到Map和Reduce都执行百分百的时候,说明mapreduce程序执行成功。
查看下结果
(6) 编写Hadoop集群常用脚本 (提升)
- Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.4/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.4/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.4/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.4/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.4/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.4/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
2.查看三台服务器Java进程脚本:jpsall
#! /bin/bash
for host in hadoop102 hadoop103 hadoop104 hadoop100
do
echo --------- $host ----------
ssh $host jps
done
3,分发/home/atguigu/bin目录,保证自定义脚本在三台机器上都可以使用
[root@hadoop102 bin]# xsync /usr/local/hadoop/bin
4.xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a)scp:需要多次执行
(b)期望脚本:
xsync要同步的文件名称
(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[atguigu@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/home/atguigu/bin:/opt/module/jdk1.8.0_212/bin
(3)脚本实现
(a)在/home/atguigu/bin目录下创建xsync文件
[root@hadoop102 bin]# vim xsync
(b)修改脚本 xsync 具有执行权限
[root@hadoop102 bin]# chmod +x xsync
(c)测试脚本
[root@hadoop102 bin]# xsync /usr/local/hadoop/bin
将新增的对应文档都传输到集群的机器当中。