1. Hadoop 框架内容
??Hadoop 是 Apache 开发的开源框架,它的核心组件有:
- HDFS(分布式文件系统):解决海量数据存储
- MAPREDUCE(分布式运算编程框架):解决海量数据计算
- YARN(作业调度和集群资源管理的框架):解决资源任务调度
??本次用的 Hadoop 的版本是 2.7.0
2. Hadoop 架构
3. Hadoop 模块之间的关系
- MapReduce 计算需要的数据和产生的结果需要 HDFS 来进行存储
- MapReduce 的运行需要有 Yarn 集群来提供资源调度
4. docker 安装单机版 Hadoop
??拉取 Hadoop 镜像
docker pull sequenceiq/hadoop-docker:2.7.0
??创建 Hadoop 容器
docker run -di --name=hadoop -p 50070:50070 -p 9000:9000 -p 8088:8088 -p 8040:8040 -p 8042:8042 -p 49707:49707 -p 50010:50010 -p 50075:50075 -p 50090:50090 sequenceiq/hadoop-docker:2.7.0
??进入到 Hadoop 容器中
docker exec -it hadoop /bin/bash
??进入 Hadoop 容器后,如果可以执行下面 mapreduce 的程序,证明安装成功
cd /usr/local/hadoop-2.7.0
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep input output 'dfs[a-z.]+'
??此时打开阿里云50070端口,然后在浏览器中访问 阿里云ip:50070,出现下面页面,docker安装成功
??在 Hadoop 容器中配置环境变量,使 Hadoop 命令行生效
vi /etc/profile
在最底部加入下面内容
export HADOOP_HOME="/usr/local/hadoop-2.7.0"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
:wq(保存并退出)
??刷新目录,使命令行生效
source /etc/profile
??查看 Hadoop 版本,测试命令行是否生效
hadoop version
5. 测试安装的 hadoop 是否可用
(1) 测试 hdfs
??使用 docker 命令将 Linux 中的文件复制到 hadoop 容器中
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
docker cp /root/read_content.lua hadoop:/usr/local/hadoop-2.7.0
??进入到 hadoop 容器看是否在 hadoop 容器的指定目录下
docker exec -it hadoop /bin/bash
cd /usr/local/hadoop-2.7.0
ls
??将容器中的文件上传到 hdfs 的 / 目录下
hadoop fs -put /usr/local/hadoop-2.7.0/read_content.lua /
??在浏览器中查看是否上传成功
(2) 测试 mapreduce
??将 jar 包上传到 hadoop 容器中
docker cp /root/hadoop-mapreduce-examples-2.7.1.jar hadoop:/usr/local/hadoop-2.7.0
??进入 hadoop 容器中执行 jar 包,测试 mapreduce 是否可用 ??这个 jar 包是计算圆周率
hadoop jar /usr/local/hadoop-2.7.0/hadoop-mapreduce-examples-2.7.1.jar pi 2 10
??后面10的数字越大,计算的圆周率越准确
6. HDFS 概述
??HDFS 分布式文件存储系统解决大数据的存储问题,它们是横跨在多台计算机上的存储系统。HDFS 有以下特点:
- 只适合于存储大文件,时效性较差
- 集群中有机器发生故障,可以自动快速恢复功能
- HDFS 为数据存储提供很强的扩展能力
- HDFS 只支持追加写入,不支持在文件中间的修改
7. HDFS 的架构
??HDFS 由四个基本组件组成:HDFS Client、NameNode、DataNode 和 Secondary NameNode
- HDFS Client
- 文件进行上传时,先由 Client 进行文件分片,分片之后分别存储到 DataNode 中,并且可以有多个副本
- 与 NameNode 交互,获取文件的位置信息
- 与 DataNode 交互,读取或写入数据
- 提供一些命令来访问 HDFS
- NameNode
- 就是 master,是 HDFS 集群的管理者
- 管理 HDFS 元数据(文件路径、文件大小、文件名字、文件权限、文件的分片信息…)
- 配置副本策略
- 处理客户端读写请求
- DataNode
- NameNode 下达命令,DataNode 执行实际的操作
- 存储实际的分片数据
- 执行数据的读写操作
- 定时向 NameNode 汇报分片信息
- Secondary NameNode
??每个分片最大是128M,上图中有3个副本,分别存储在不同的主机上。
8. HDFS 的 Shell 命令
??hadoop 环境安装好后,我们可以使用 Shell 命令对 hdfs 文件系统进行操作。如:文件的创建、删除、修改文件权限等。
(1) 查看文件列表
hadoop fs -ls / ??查看hdfs根目录下的文件列表
(2) 创建目录
hadoop fs -mkdir /dir1 ??在hdfs根目录下创建dir1文件夹 hadoop fs -mkdir -p /aaa/bbb/ccc ??在hdfs根目录下递归创建多级文件夹
(3) 将 Linux 中的文件或文件夹上传到 hdfs 中
hadoop fs -put /usr/local/hadoop-2.7.0/read_content.lua /dir1 ??将read_content.lua上传到hdfs的dir1目录下 hadoop fs -put /home / ??将home文件夹上传到hdfs的根目录
(4) 将 hdfs 上的文件拷贝到本地
??格式:hadoop fs -get hdfs系统路径 Linux本地路径
hadoop fs -get /read_content.lua /opt ??将fdfs系统根目录下的read_content.lua文件拷贝到本地Linux的opt文件中
(5) 将 hdfs 上的文件进行移动
??格式:hadoop fs -mv 源路径 目标路径
hadoop fs -mv /dir1/read_content.lua /home ??将hdfs系统的dir1目录中的read_content.lua文件移动到home目录下
(6) 删除 hdfs 上的文件或目录
hadoop fs -rm /read_content.lua ??删除根目录下的read_content.lua文件
hadoop fs -rm -r /dir1 ??删除根目录下的dir1目录
(7) 复制 hdfs 上的文件或目录
??格式:hadoop fs -cp 源路径 目标路径
hadoop fs -cp /home/read_content.lua / ??将hdfs系统的home目录下的read_content.lua文件拷贝到根目录下 hadoop fs -cp /aaa /home ??将hdfs系统的aaa目录拷贝到home目录下
(8) 显示 hdfs 上的文件内容
hadoop fs -cat /read_content.lua ??查看根目录下read_content.lua的内容
|