本文来自作者:鸣宇淳 在 GitChat 上的精彩分享,由于篇幅长,故分为上、中、下三篇。
本以为分为两篇就能分享完,可是内容实在太多了,不得已才分为三篇不愧是「史上最详细」
第三部分:Hadoop 伪分布式模式安装
第六步 伪分布式 Hadoop 部署过程
十三、Hadoop 所用的用户设置
1. 创建一个名字为 hadoop 的普通用户
2. 给 hadoop 用户 sudo 权限
设置权限,学习环境可以将 hadoop 用户的权限设置的大一些,但是生产环境一定要注意普通用户的权限限制。
注意:如果root用户无权修改sudoers文件,先手动为root用户添加写权限。
3. 切换到hadoop用户
[root@bigdata-senior01 ~]# su - hadoop
[hadoop@bigdata-senior01 ~]$
4. 创建存放hadoop文件的目录
5. 将hadoop文件夹的所有者指定为hadoop用户
如果存放hadoop的目录的所有者不是hadoop,之后hadoop运行中可能会有权限问题,那么就讲所有者改为hadoop。
十四、解压Hadoop目录文件
1. 复制 hadoop-2.5.0.tar.gz 到/opt/modules目录下。
2. 解压 hadoop-2.5.0.tar.gz
十五、配置 Hadoop
1. 配置 Hadoop 环境变量
追加配置:
执行:source /etc/profile 使得配置生效
验证 HADOOP_HOME 参数:
2. 配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh 文件的 JAVA_HOME参数
3. 配置 core-site.xml
[hadoop@bigdata-senior01 ~]$ sudo vim ${HADOOP_HOME}/etc/hadoop/core-site.xml
(1) fs.defaultFS 参数配置的是HDFS的地址。
(2) hadoop.tmp.dir
配置的是Hadoop临时目录,比如HDFS的NameNode数据默认都存放这个目录下,查看*-default.xml
等默认配置文件,就可以看到很多依赖${hadoop.tmp.dir}
的配置。
默认的hadoop.tmp.dir
是/tmp/hadoop-${user.name}
,此时有个问题就是 NameNode 会将 HDFS 的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空 /tmp 目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。
-
创建临时目录:
-
将临时目录的所有者修改为 hadoop
-
修改 hadoop.tmp.dir
十六、配置、格式化、启动 HDFS
1. 配置 hdfs-site.xml
dfs.replication 配置的是 HDFS存 储时的备份数量,因为这里是伪分布式环境只有一个节点,所以这里设置为1。
2. 格式化 HDFS
格式化是对 HDFS 这个分布式文件系统中的 DataNode 进行分块,统计所有分块后的初始元数据的存储在 NameNode 中。
格式化后,查看 core-site.xml 里 hadoop.tmp.dir(本例是 /opt/data 目录)指定的目录下是否有了 dfs 目录,如果有,说明格式化成功。
注意:
-
格式化时,这里注意 hadoop.tmp.dir 目录的权限问题,应该 hadoop 普通用户有读写权限才行,可以将 /opt/data 的所有者改为 hadoop。[hadoop@bigdata-senior01 hadoop-2.5.0]$ sudo chown -R hadoop:hadoop /opt/data
-
查看 NameNode 格式化后的目录。
fsimage 是 NameNode 元数据在内存满了后,持久化保存到的文件。
fsimage*.md5
是校验文件,用于校验 fsimage 的完整性。
seen_txid
是 hadoop 的版本
vession 文件里保存:
-
namespaceID:NameNode 的唯一 ID。
-
clusterID:集群 ID,NameNode 和 DataNode 的集群 ID 应该一致,表明是一个集群。
3. 启动 NameNode
4. 启动 DataNode
5. 启动 SecondaryNameNode
6. JPS 命令查看是否已经启动成功,有结果就是启动成功了。
7. HDFS 上测试创建目录、上传、下载文件
HDFS 上创建目录
上传本地文件到 HDFS 上
读取 HDFS 上的文件内容
从 HDFS上 下载文件到本地
[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/hdfs dfs -get /demo1/core-site.xml
十七、配置、启动YARN
1. 配置mapred-site.xml
默认没有mapred-site.xml文件,但是有个mapred-site.xml.template配置模板文件。复制模板生成mapred-site.xml。
添加配置如下:
指定 mapreduce 运行在 yarn 框架上。
2. 配置 yarn-site.xml
添加配置如下:
-
yarn.nodemanager.aux-services 配置了 yarn 的默认混洗方式,选择为 mapreduce 的默认混洗算法。
-
yarn.resourcemanager.hostname 指定了 Resourcemanager 运行在哪个节点上。
3. 启动 Resourcemanager
4. 启动 nodemanager
5. 查看是否启动成功
可以看到 ResourceManager、NodeManager 已经启动成功了。
6. YARN 的 Web 页面
YARN 的 Web 客户端端口号是 8088,通过 http://192.168.100.10:8088/ 可以查看。
十八、运行 MapReduce Job
在 Hadoop 的 share 目录里,自带了一些 jar 包,里面带有一些 mapreduce 实例小例子,位置在 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar,可以运行这些例子体验刚搭建好的Hadoop平台,我们这里来运行最经典的 WordCount 实例。
1. 创建测试用的 Input 文件
创建输入目录:
创建原始文件:
在本地 /opt/data 目录创建一个文件 wc.input,内容如下。
将 wc.input 文件上传到 HDFS 的 /wordcountdemo/input 目录中:
2. 运行 WordCount MapReduce Job
3. 查看输出结果目录
-
output 目录中有两个文件,_SUCCESS 文件是空文件,有这个文件说明Job执行成功。
-
part-r-00000文件是结果文件,其中-r-说明这个文件是 Reduce 阶段产生的结果,mapreduce 程序执行时,可以没有 reduce 阶段,但是肯定会有 map 阶段,如果没有 reduce 阶段这个地方有是-m-。
-
一个 reduce 会产生一个 part-r- 开头的文件。
-
查看输出文件内容。
结果是按照键值排好序的。
十九、停止 Hadoop
二十、 Hadoop 各个功能模块的理解
1. HDFS模块
HDFS 负责大数据的存储,通过将大文件分块后进行分布式存储方式,突破了服务器硬盘大小的限制,解决了单台机器无法存储大文件的问题,HDFS 是个相对独立的模块,可以为 YARN 提供服务,也可以为 HBase 等其他模块提供服务。
2. YARN 模块
YARN 是一个通用的资源协同和任务调度框架,是为了解决 Hadoop1.x 中MapReduce 里 NameNode 负载太大和其他问题而创建的一个框架。
YARN 是个通用框架,不止可以运行 MapReduce,还可以运行Spark、Storm等其他计算框架。
3. MapReduce 模块
MapReduce 是一个计算框架,它给出了一种数据处理的方式,即通过 Map 阶段、Reduce阶段来分布式地流式处理数据。它只适用于大数据的离线处理,对实时性要求很高的应用不适用。
第七步 开启历史服务
二十一、历史服务介绍
Hadoop 开启历史服务可以在 web 页面上查看 Yarn 上执行 job 情况的详细信息。可以通过历史服务器查看已经运行完的 Mapreduce 作业记录,比如用了多少个 Map、用了多少个 Reduce、作业提交时间、作业启动时间、作业完成时间等信息。
二十二、开启历史服务
开启后,可以通过 Web 页面查看历史服务器:
http://bigdata-senior01.chybinmy.com:19888/
二十三、Web 查看 job 执行历史
1. 运行一个 mapreduce 任务
2. job 执行中
3. 查看 job 历史
历史服务器的 Web 端口默认是19888,可以查看Web界面。
但是在上面所显示的某一个 Job 任务页面的最下面,Map 和 Reduce 个数的链接上,点击进入 Map 的详细信息页面,再查看某一个 Map 或者 Reduce 的详细日志是看不到的,是因为没有开启日志聚集服务。
二十四、开启日志聚集
4. 日志聚集介绍
MapReduce是在各个机器上运行的,在运行过程中产生的日志存在于各个机器上,为了能够统一查看各个机器的运行日志,将日志集中存放在HDFS上,这个过程就是日志聚集。
5. 开启日志聚集
配置日志聚集功能:
Hadoop 默认是不启用日志聚集的。在 yarn-site.xml 文件里配置启用日志聚集。
yarn.log-aggregation-enable:是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds:设置日志保留时间,单位是秒。
将配置文件分发到其他节点:
重启 Yarn 进程:
重启 HistoryServer 进程:
6. 测试日志聚集
运行一个 demo MapReduce,使之产生日志:
查看日志:
运行 Job 后,就可以在历史服务器 Web 页面查看各个 Map 和 Reduce 的日志了。
第四部分:完全分布式安装
第八步 完全布式环境部署 Hadoop
完全分部式是真正利用多台 Linux 主机来进行部署 Hadoop,对 Linux 机器集群进行规划,使得 Hadoop 各个模块分别部署在不同的多台机器上。
二十五、环境准备
1. 克隆虚拟机
-
Vmware 左侧选中要克隆的机器,这里对原有的 BigData01 机器进行克隆,虚拟机菜单中,选中管理菜单下的克隆命令。
-
选择“创建完整克隆”,虚拟机名称为 BigData02,选择虚拟机文件保存路径,进行克隆。
-
再次克隆一个名为 BigData03 的虚拟机。
2. 配置网络
修改网卡名称:
在 BigData02 和 BigData03 机器上编辑网卡信息。执行 sudo vim /etc/udev/rules.d/70-persistent-net.rules 命令。因为是从 BigData01 机器克隆来的,所以会保留 BigData01 的网卡 eth0,并且再添加一个网卡 eth1。
并且 eth0 的 Mac 地址和 BigData01 的地址是一样的,Mac 地址不允许相同,所以要删除 eth0,只保留 eth1 网卡,并且要将 eth1改名为 eth0。将修改后的 eth0 的 mac 地址复制下来,修改 network-scripts 文件中的 HWADDR 属性。
修改网络参数:
BigData02机器IP改为192.168.100.12
BigData03机器IP改为192.168.100.13
3. 配置 Hostname
BigData02 配置 hostname 为 bigdata-senior02.chybinmy.com
BigData03 配置 hostname 为 bigdata-senior03.chybinmy.com
4. 配置 hosts
BigData01、BigData02、BigData03 三台机器 hosts 都配置为:
5. 配置 Windows 上的 SSH 客户端
在本地 Windows 中的 SSH 客户端上添加对 BigData02、BigData03 机器的SSH链接。
二十六、服务器功能规划
为了和之前 BigData01 机器上安装伪分布式 Hadoop 区分开来,我们将 BigData01上的 Hadoop 服务都停止掉,然后在一个新的目录 /opt/modules/app下安装另外一个Hadoop。
二十七、在第一台机器上安装新的 Hadoop
我们采用先在第一台机器上解压、配置 Hadoop,然后再分发到其他两台机器上的方式来安装集群。
6. 解压 Hadoop 目录:
7. 配置 Hadoop JDK 路径修改 hadoop-env.sh、mapred-env.sh、yarn-env.sh 文件中的 JDK 路径:
8. 配置 core-site.xml
fs.defaultFS 为 NameNode 的地址。
hadoop.tmp.dir 为 hadoop 临时目录的地址,默认情况下,NameNode 和 DataNode 的数据文件都会存在这个目录下的对应子目录下。应该保证此目录是存在的,如果不存在,先创建。
9. 配置 hdfs-site.xml
dfs.namenode.secondary.http-address 是指定 secondaryNameNode 的 http 访问地址和端口号,因为在规划中,我们将 BigData03 规划为 SecondaryNameNode 服务器。
所以这里设置为:bigdata-senior03.chybinmy.com:50090
10. 配置 slaves
slaves 文件是指定 HDFS 上有哪些 DataNode 节点。
11. 配置 yarn-site.xml
根据规划yarn.resourcemanager.hostname
这个指定 resourcemanager 服务器指向bigdata-senior02.chybinmy.com
。
yarn.log-aggregation-enable
是配置是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds
是配置聚集的日志在 HDFS 上最多保存多长时间。
12. 配置 mapred-site.xml
从 mapred-site.xml.template 复制一个 mapred-site.xml 文件。
mapreduce.framework.name 设置 mapreduce 任务运行在 yarn 上。
mapreduce.jobhistory.address 是设置 mapreduce 的历史服务器安装在BigData01机器上。
mapreduce.jobhistory.webapp.address 是设置历史服务器的web页面地址和端口号。
二十八、设置 SSH 无密码登录
Hadoop 集群中的各个机器间会相互地通过 SSH 访问,每次访问都输入密码是不现实的,所以要配置各个机器间的
SSH 是无密码登录的。
1. 在 BigData01 上生成公钥
一路回车,都设置为默认值,然后再当前用户的Home目录下的.ssh
目录中会生成公钥文件(id_rsa.pub)
和私钥文件(id_rsa)
。
2. 分发公钥
3. 设置 BigData02、BigData03 到其他机器的无密钥登录
同样的在 BigData02、BigData03 上生成公钥和私钥后,将公钥分发到三台机器上。
二十九、分发 Hadoop 文件
-
首先在其他两台机器上创建存放 Hadoop 的目录
2. 通过 Scp 分发
Hadoop 根目录下的 share/doc 目录是存放的 hadoop 的文档,文件相当大,建议在分发之前将这个目录删除掉,可以节省硬盘空间并能提高分发的速度。
doc目录大小有1.6G。
三十、格式 NameNode
在 NameNode 机器上执行格式化:
注意:
如果需要重新格式化 NameNode,需要先将原来 NameNode 和 DataNode 下的文件全部删除,不然会报错,NameNode 和 DataNode 所在目录是在 core-site.xml
中 hadoop.tmp.dir
、 dfs.namenode.name.dir
、 dfs.datanode.data.dir
属性配置的。
因为每次格式化,默认是创建一个集群ID,并写入 NameNode 和 DataNode 的 VERSION 文件中(VERSION 文件所在目录为 dfs/name/current 和 dfs/data/current),重新格式化时,默认会生成一个新的集群ID,如果不删除原来的目录,会导致 namenode 中的 VERSION 文件中是新的集群 ID,而 DataNode 中是旧的集群 ID,不一致时会报错。
另一种方法是格式化时指定集群ID参数,指定为旧的集群ID。
三十一、启动集群
-
启动 HDFS
2. 启动 YARN
在 BigData02 上启动 ResourceManager:
3. 启动日志服务器
因为我们规划的是在 BigData03 服务器上运行 MapReduce 日志服务,所以要在 BigData03 上启动。
4. 查看 HDFS Web 页面
http://bigdata-senior01.chybinmy.com:50070/
5. 查看 YARN Web 页面
http://bigdata-senior02.chybinmy.com:8088/cluster
三十二、测试 Job
我们这里用 hadoop 自带的 wordcount 例子来在本地模式下测试跑mapreduce。
-
准备 mapreduce 输入文件 wc.input
2. 在 HDFS 创建输入目录 input
3. 将 wc.inpu t上传到 HDFS
4. 运行 hadoop 自带的 mapreduce Demo
5. 查看输出文件
【未完,请待明天文章】