分布式存储,分布式集群,多台机器
hadoop-cluster-docker
1.Docker安装
2.拉取hadoop集群镜像
3.克隆仓库并修改start.sh中的开放端口文件
4.桥接网络 docker network ls
5.运行容器并进入容器:docker exec -it hadoop-master bash
6.启动hadoop:./start-hadoop.sh
7.页面测试:本机127.0.01
HDFS集群:name node: [your ip address]:50070/ 浏览文件系统
YARN集群:resource manager: [your ip address]:8088/ 监控集群资源:MapReduce,Sprark,Flink等
8.测试 word count:word count 是一个测试 hadoop 的 shell 脚本,即计算文本中的单词个数
docker进入hadoop容器命令
docker exec -it hadoop-master bash
创建文件夹命令:hdfs dfs -mkdir /hadoop
上传命令:hdfs dfs -put file.txt /hadoop/file.txt hdfs dfs -put file1.txt /hadoop/file1.txt
删除命令:hdfs dfs -rm -r /hadoop/file.text(可删除文件与文件夹)
查看文件夹命令:hadoop fs -ls /hadoop
查看文件内容:hdfs dfs -cat /hadoop/file.txt
一个大哥带几个小弟干活:hadoop-Master,hadoop-slave1,hadoop-slave2
MapReduce是计算框架,代码层面的组件,没有集群之说
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2
Hadoop Distributed File Sytem分布式文件系统
推荐全部使用 hadoop fs
hadoop fs -mkdir [-p] …
path 为待创建的目录
-p选项的行为与Unix mkdir -p非常相似,它会沿着路径创建父目录
hadoop fs -mkdir /ifnxs
hadoop fs -ls [-h] [-R] [ …]
path 指定目录路径
-h 人性化显示文件size
-R 递归查看指定目录及其子目录
hadoop fs -ls -h /
# 本地文件系统
hadoop fs -ls file:///
# HDFS分布式文件系统
hadoop fs -ls hdfs://hadoop-slave1:8020/
# 直接根目录,没有指定协议,将加载都去fs.defaultFS值(默认为当前文件的HDFS目录)
hadoop fs -ls /
hadoop fs -put [-f] [-p] …
-f 覆盖目标文件(已存在下)
-p 保留访问和修改时间,所有权和权限
localsrc 本地文件系统(客户端所在机器)
dst 目标文件系统(HDFS)
echo 1 > 1.txt #创建一个值为1的txt文件
hadoop fs -put 1.txt / #将1.txt上传到HDFS的根目录下
hadoop fs -cat …
读取指定文件全部内容,显示在标准输出控制台
注意:对于大文件内容读取,慎重
hadoop fs -cat /ifnxs/1.txt
hadoop fs -get [-f] [-p] …
下载文件到本地文件系统指定目录,localdst必须是目录
-f 覆盖目标文件(已存在下)
-p 保留访问和修改时间,所有权和权限
hadoop fs -get /ifnxs/1.txt ./2.txt
hadoop fs -cp [-f] …
-f 覆盖目标文件(已存在下)
hadoop fs -cp /ifnxs/1.txt /ifnxs/3.txt
hadoop fs -appendToFile …
将所有给定本地文件的内容追加到给定dst文件
dst如果文件不存在,将创建该文件
如果为-,则输入为从标准输入中读取
hadoop fs -appendToFile 2.txt 3.txt /1.txt
hadoop fs -mv …
移动文件到指定文件夹下
可以使用该命令移动数据,重命名文件的名称
hadoop fs -mv /ifnxs/1.txt /ifnxs/333.txt
写
读
分布式计算框架
提交命令:hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2 (yarn jar也行)
提交到YARN集群上分布式执行
流程:连接Resourcemanager(yarn)请求资源
输出路径一定是不存在的路径否则会报错
1.将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理
2.一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle
3.Shuffle是MapReduce程序的核心与精髓,也是慢的原因
通用的集群资源管理(管理内存和CPU),任务调度平台(大家来申请资源,YARN为他们分配资源)
YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者。接收用户的作业提交,并通过NM分配、管理各个机器上的计算资源。
YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况。
用户提交的每个应用程序均包含一个AM。应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。
没有最佳的策略,只有符合业务场景的策略
FIFO Scheduler是一个先进先出的思想,即先提交的应用先运行。
Capacity Scheduler容量调度是Apache Hadoop3.x默认调度策略。该策略允许多个组织共享整个集群资源,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。
队列A提交大程序,队列B提交小程序 (可根据部门业务不同需求划分队列)
使所有应用在平均情况下随着时间的流逝可以获得相等的资源份额。