Hadoop 是 Apache 开发的开源框架,它的核心组件有:
- HDFS(分布式文件系统):解决海量数据存储
- MAPREDUCE(分布式运算编程框架):解决海量数据计算
- YARN(作业调度和集群资源管理的框架):解决资源任务调度
本次用的 Hadoop 的版本是 2.7.0
2. Hadoop 架构 3. Hadoop 模块之间的关系- MapReduce 计算需要的数据和产生的结果需要 HDFS 来进行存储
- MapReduce 的运行需要有 Yarn 集群来提供资源调度
拉取 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 version5. 测试安装的 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 只支持追加写入,不支持在文件中间的修改
HDFS 由四个基本组件组成:HDFS Client、NameNode、DataNode 和 Secondary NameNode
- HDFS Client
- 文件进行上传时,先由 Client 进行文件分片,分片之后分别存储到 DataNode 中,并且可以有多个副本
- 与 NameNode 交互,获取文件的位置信息
- 与 DataNode 交互,读取或写入数据
- 提供一些命令来访问 HDFS
- NameNode
- 就是 master,是 HDFS 集群的管理者
- 管理 HDFS 元数据(文件路径、文件大小、文件名字、文件权限、文件的分片信息…)
- 配置副本策略
- 处理客户端读写请求
- DataNode
- NameNode 下达命令,DataNode 执行实际的操作
- 存储实际的分片数据
- 执行数据的读写操作
- 定时向 NameNode 汇报分片信息
- Secondary NameNode
- 辅助 NameNode 进行元数据的管理
每个分片最大是128M,上图中有3个副本,分别存储在不同的主机上。
hadoop 环境安装好后,我们可以使用 Shell 命令对 hdfs 文件系统进行操作。如:文件的创建、删除、修改文件权限等。
(1) 查看文件列表hadoop fs -ls / 查看hdfs根目录下的文件列表
(2) 创建目录hadoop fs -mkdir /dir1 在hdfs根目录下创建dir1文件夹
hadoop fs -mkdir -p /aaa/bbb/ccc 在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的根目录
格式: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目录下
hadoop fs -cat /read_content.lua 查看根目录下read_content.lua的内容



