链接:https://www.jianshu.com/p/0d4a365ef350
第一部分:Linux环境安装
Hadoop是运行在Linux,虽然借助工具也可以运行在Windows上,但是建议还是运行在Linux系统上,第一部分介绍Linux环境的安装、配置、Java JDK安装等。
第二部分:Hadoop本地模式安装
Hadoop 本地模式只是用于本地开发调试,或者快速安装体验 Hadoop,这部分做简单的介绍。
第三部分:Hadoop伪分布式模式安装
学习 Hadoop 一般是在伪分布式模式下进行。这种模式是在一台机器上各个进程上运行 Hadoop 的各个模块,伪分布式的意思是虽然各个模块是在各个进程上分开运行的,但是只是运行在一个操作系统上的,并不是真正的分布式。
第四部分:完全分布式安装
完全分布式模式才是生产环境采用的模式,Hadoop 运行在服务器集群上,生产环境一般都会做HA,以实现高可用。
第五部分:Hadoop HA安装
HA是指高可用,为了解决Hadoop单点故障问题,生产环境一般都做HA部署。这部分介绍了如何配置Hadoop2.x的高可用,并简单介绍了HA的工作原理。
第一部分 :Linux环境安装
1. 服务器规划
hostname | ip | name |
---|---|---|
bigdata-senior01 | 192.168.0.101 | CentOSSerer01 |
bigdata-senior02 | 192.168.0.102 | CentOSSerer02 |
bigdata-senior03 | 192.168.0.103 | CentOSMYsqlDB_master |
2. 环境配置
一、修改 Hostname
- 临时修改 hostname
[root@localhost Desktop]# hostname bigdata-senior01.chybinmy.com
这种修改方式,系统重启后就会失效。
- 永久修改 hostname
想永久修改,应该修改配置文件 /etc/sysconfig/network。
命令:[root@bigdata-senior01 ~] vim /etc/sysconfig/network
打开文件后,
NETWORKING=yes #使用网络
HOSTNAME=bigdata-senior01.chybinmy.com #设置主机名
二、配置Host
命令:[root@bigdata-senior01 ~] vim /etc/hosts
添加hosts: 192.168.0.101 bigdata-senior01
三、关闭防火墙
四、关闭selinux
selinux是Linux一个子安全机制,学习环境可以将它禁用。
sudo vim /etc/sysconfig/selinux
五、安装JDK
- 删除centos自带的openjdk
[wj@master hadoop]$ rpm -qa | grep java
java-1.7.0-openjdk-1.7.0.191-2.6.15.5.el7.x86_64
python-javapackages-3.4.1-11.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.191-2.6.15.5.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
tzdata-java-2018e-3.el7.noarch
javapackages-tools-3.4.1-11.el7.noarch
java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
[root@master ~]# rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
[root@master ~]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.191-2.6.15.5.el7.x86_64
[root@master ~]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
[root@master ~]# rpm -e --nodeps tzdata-java-2018e-3.el7.noarch
[root@master ~]# rpm -e --nodeps javapackages-tools-3.4.1-11.el7.noarch
[root@master ~]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
安装参考https://www.jianshu.com/p/a30b42bbfc09
第二部分:Hadoop安装
一、 Hadoop 所用的用户设置
1. 创建一个名字为 hadoop 的普通用户
2. 给 hadoop 用户 sudo 权限
设置权限,学习环境可以将 hadoop 用户的权限设置的大一些,但是生产环境一定要注意普通用户的权限限制。
注意:如果root用户无权修改sudoers文件,先手动为root用户添加写权限。
3. 切换到hadoop用户
<pre>
[root@bigdata-senior01 ~]# su - hadoop[hadoop@bigdata-senior01 ~]$
</pre>
4. 创建存放hadoop文件的目录
- 将hadoop文件夹的所有者指定为hadoop用户
如果存放hadoop的目录的所有者不是hadoop,之后hadoop运行中可能会有权限问题,那么就讲所有者改为hadoop。
二、
解压Hadoop目录文件
1. 复制 hadoop-2.5.0.tar.gz 到/opt/modules目录下。
- 解压 hadoop-2.5.0.tar.gz
十五、配置 Hadoop
1. 配置 Hadoop 环境变量
追加配置:
export HADOOP_HOME="/opt/modules/hadoop-2.10.0"
export PATH=$HADDOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
执行:source /etc/profile 使得配置生效
验证 HADOOP_HOME 参数:
- 配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh 文件的 JAVA_HOME参数
3. 配置 core-site.xml
[hadoop@bigdata-senior01 ~]{HADOOP_HOME}/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata-senior01:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>
</property>
</configuration>
(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
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>bigdata-senior01:9000</value>
</property>
</configuration>
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
- 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 框架上。
<configuration>
<property>
<name>mapreduce.framwork.name</name>
<value>yarn</value>
</property>
</configuration>
2. 配置 yarn-site.xml
添加配置如下:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata-senior01</value>
</property>
</configuration>
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 文件
创建输入目录:
./bin/hdfs dfs -mkdir -p /wordcountdemo/input
创建原始文件:
在本地 /opt/data 目录创建一个文件 wc.input,内容如下。
hadoop mapreduce hive
hbase spark hadoop
hive spart
将 wc.input 文件上传到 HDFS 的 /wordcountdemo/input 目录中:
[hadoop@bigdata-senior01 hadoop-2.10.0]$ ./bin/hdfs dfs -put /opt/data/wc.input /wordcountdemo/input
2. 运行 WordCount MapReduce Job
[hadoop@bigdata-senior01 hadoop-2.10.0]$ ./bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount /wordcountdemo/input /wordcountdemo/output
- 查看输出结果目录
./bin/hdfs dfs -ls /wordcountdemo/output
[hadoop@bigdata-senior01 hadoop-2.10.0]$ ./bin/hdfs dfs -ls /wordcountdemo/output1
Found 2 items
-rw-r--r-- 1 hadoop supergroup 0 2020-06-17 15:47 /wordcountdemo/output1/_SUCCESS
-rw-r--r-- 1 hadoop supergroup 52 2020-06-17 15:47 /wordcountdemo/output1/part-r-00000
output 目录中有两个文件,_SUCCESS 文件是空文件,有这个文件说明Job执行成功。
part-r-00000文件是结果文件,其中-r-说明这个文件是 Reduce 阶段产生的结果,mapreduce 程序执行时,可以没有 reduce 阶段,但是肯定会有 map 阶段,如果没有 reduce 阶段这个地方有是-m-。
一个 reduce 会产生一个 part-r- 开头的文件。
查看输出文件内容。
[hadoop@bigdata-senior01 hadoop-2.10.0]$ ./bin/hdfs dfs -cat /wordcountdemo/output/part-r-00000
hadoop 2
hbase 1
hive 2
mapreduce 1
spark 1
spart 1
结果是按照键值排好序的。
十九、停止 Hadoop
二十、 Hadoop 各个功能模块的理解
- HDFS模块
HDFS 负责大数据的存储,通过将大文件分块后进行分布式存储方式,突破了服务器硬盘大小的限制,解决了单台机器无法存储大文件的问题,HDFS 是个相对独立的模块,可以为 YARN 提供服务,也可以为 HBase 等其他模块提供服务。
- YARN 模块
YARN 是一个通用的资源协同和任务调度框架,是为了解决 Hadoop1.x 中MapReduce 里 NameNode 负载太大和其他问题而创建的一个框架。
YARN 是个通用框架,不止可以运行 MapReduce,还可以运行Spark、Storm等其他计算框架。
- MapReduce 模块
MapReduce 是一个计算框架,它给出了一种数据处理的方式,即通过 Map 阶段、Reduce阶段来分布式地流式处理数据。它只适用于大数据的离线处理,对实时性要求很高的应用不适用。
第七步 开启历史服务
二十一、历史服务介绍
Hadoop 开启历史服务可以在 web 页面上查看 Yarn 上执行 job 情况的详细信息。可以通过历史服务器查看已经运行完的 Mapreduce 作业记录,比如用了多少个 Map、用了多少个 Reduce、作业提交时间、作业启动时间、作业完成时间等信息。
二十二、开启历史服务
开启后,可以通过 Web 页面查看历史服务器:
http://bigdata-senior01.chybinmy.com:19888/
二十三、Web 查看 job 执行历史
1. 运行一个 mapreduce 任务
- job 执行中
3. 查看 job 历史
历史服务器的 Web 端口默认是19888,可以查看Web界面。
但是在上面所显示的某一个 Job 任务页面的最下面,Map 和 Reduce 个数的链接上,点击进入 Map 的详细信息页面,再查看某一个 Map 或者 Reduce 的详细日志是看不到的,是因为没有开启日志聚集服务。
二十四、开启日志聚集
4. 日志聚集介绍
MapReduce是在各个机器上运行的,在运行过程中产生的日志存在于各个机器上,为了能够统一查看各个机器的运行日志,将日志集中存放在HDFS上,这个过程就是日志聚集。
- 开启日志聚集
配置日志聚集功能:
Hadoop 默认是不启用日志聚集的。在 yarn-site.xml 文件里配置启用日志聚集。
yarn.log-aggregation-enable:是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds:设置日志保留时间,单位是秒。
将配置文件分发到其他节点:
重启 Yarn 进程:
重启 HistoryServer 进程:
6. 测试日志聚集
运行一个 demo MapReduce,使之产生日志:
查看日志:
运行 Job 后,就可以在历史服务器 Web 页面查看各个 Map 和 Reduce 的日志了。