Hadoop概述
Hadoop起源
Google三篇论文
GFS->HDFS
MapReduce->MR<stype>
BigTable->HBase
Hadoop三大发行版本
Apache Hadoop
官网地址:http://hadoop.apache.org/releases.html
下载地址:https://archive.apache.org/dist/hadoop/common/
Cloudera Hadoop
官网地址:https://www.cloudera.com/downloads/cdh/5-10-0.html
下载地址:http://archive-primary.cloudera.com/cdh5/cdh/5/
Hortonworks Hadoop
官网地址:https://hortonworks.com/products/data-center/hdp/
下载地址:https://hortonworks.com/downloads/#data-platform
Hadoop的优势
1、高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
2、高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
3、高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务的处理速度。
4、高容错性:能够自动将失败的任务重新分配。
Hadoop模块组成
新版本新增Ozone
Hadoop各模块架构
Hadoop Distributed File System
HDFS架构
1、NameNode:存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。
2、DataNode:在本地文件系统存储文件块数据,以及块数据的校验和。
3、Secondary NameNode:每隔一段时间对NameNode元数据备份。
YARN架构
1、Client:提交作业
2、ResourceManager:
1)处理客户端请求
2)监控NodeManager
3)启动或监控ApplicationMaster
4)资源的分配和调度
3、NodeManager:
1)管理单个节点上的资源
2)处理来自ResourceManager的命令
3)处理来自ApplicationMaster的命令
4、ApplicationMaster:
1)负责数据的切分
2)为应用程序申请资源并分配给内部任务
3)任务的监控和容错
5、Container:
容器,表示一个抽象资源,封装了某个节点的多维度资源,如内存、cpu、磁盘、网络等。
MapReduce架构
MapReduce将计算过程分为两个阶段:Map和Reduce
1)Map阶段并行处理输入数据
2)Reduce阶段对Map结果进行汇总
Linux脚本
SSH免密登录
公私钥生成后放在~/.ssh里面id_rsa&id_rsa.pub,该目录中authorized_keys文件中存放的是别的节点发过来的公钥。
# -t 选择编解码格式
ssh-keygen -t rsa
# 发送公钥至对应节点
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
分发脚本
前提:配置好ssh免密登录
集群状态脚本
群起集群脚本
Hadoop集群
集群配置
集群部署规划
Hadoop102 | Hadoop103 | Hadoop104 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode Datanode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
配置Linux环境
1)配置hostname
vim /etc/hostname
#重启服务器
reboot
2)配置hosts
vim /etc/hosts
3)配置静态ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33(网卡)
#修改下面两个
#[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
BOOTPROTO=static
ONBOOT=yes
添加下面的内容
#IP地址
IPADDR=192.168.1.102
#网关
GATEWAY=192.168.1.2
#域名解析器
DNS1=114.114.114.114
DNS2=8.8.8.8
#重启网络服务
systemctl restart network
#测试网络连接
ping www.baidu.com
配置核心配置文件
cd $HADOOP_HOME/etc/hadoop
配置core-site.xml
<configuration>
<!--指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9820</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 通过web界面操作hdfs的权限 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
<!-- 后面hive的兼容性配置 -->
<property>
<name>hadoop.proxyuser.atguigu.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.atguigu.groups</name>
<value>*</value>
</property>
</configuration>
配置hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
配置yarn-site.xml
<configuration>
<!-- Reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量通过从NodeManagers的容器继承的环境属性,对于mapreduce应用程序,除了默认值 hadoop op_mapred_home应该被添加外。属性值 还有如下-->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 解决Yarn在执行程序遇到超出虚拟内存限制,Container被kill -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 后面hive的兼容性配置 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
</configuration>
配置mapred-site.xml
<configuration>
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
注意
配置好后通过分发脚本分发配置文件 xsync ./
配置集群
配置workers
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
增加如下内容:
hadoop102
hadoop103
hadoop104
同步workers
xsync /opt/module/hadoop-3.1.3/etc/workers
启动集群
集群初始化
注意:如果是第一次启动集群,需要在NameNode所在节点格式化,格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后在删除data和logs数据。
#格式化namenode
hdfs namenode -format
#启动HDFS
sbin/start-dfs.sh
#启动YARN(注意:要在配置了ResourceManager的节点启动YARN)
sbin/start-yarn.sh
集群启动失败
哪个服务没开启,就查看/opt/module/hadoop-3.1.3/data文件夹中的对应日志文件。
集群ID不一致错误(重复格式化namenode造成)
查看集群ID(可以不做)
cat /opt/module/hadoop-3.1.3/data/dfs/data/current/VERSION
cat /opt/module/hadoop-3.1.3/data/dfs/name/current/VERSION
停止集群服务
#需要删除所有节点中的对应文件,可以写一个脚本运行
删除$HADOOP_HOME/data
删除$HADOOP_HOME/logs
删除/tmp/*
删除脚本
各模块端口号
模块 | Web端口号 | 程序端口号 |
---|---|---|
HDFS (NameNode) | 9870 | 9820 |
Secondary NameNode | 9868 | |
DataNode | 9864 | 9866 |
Yarn | 8088 | 8032 |
历史服务器 (在NameNode配置) | 19888 | 10020 |
集群启动和停止
1)各模块单独启动停止
单独启动停止hdfs单个组件
hdfs --daemon start xxx
hdfs --daemon stop xxx
单独启动停止yarn单个组件
yarn --daemon start xxx
yarn --daemon stop xxx
2)整体启动停止
整体启动停止hdfs
start-dfs.sh
stop-dfs.sh
整体启动停止yarn
start-yarn.sh
stop-yarn.sh
补充:集群有时网络出现错误,可能是NetworkManager与Network冲突,停止NetworkManager。
配置历史服务器
1)配置mapred.site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
2)分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
3)启动历史服务器(NameNode节点)
mapred --daemon start historyserver
4)查看服务是否启动
jps
5)查看历史服务器web
http://hadoop102:19888/jobhistory
配置日志聚集
1)配置yarn-site.xml
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 访问路径-->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 保存的时间7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
2)分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
3)关闭NodeManager、ResourceManager、HistoryServer
(在ResourceManager所在节点)stop-yarn.sh
(在NameNode所在节点)mapred --daemon stop historyserver
4)启动NodeManager、ResourceManager、HistoryServer和Timelineserver
(在ResourceManager所在节点)start-yarn.sh
(在ResourceManager所在节点)yarn --daemon start timelineserver
(在NameNode所在节点)mapred --daemon start historyserver
配置集群时间同步
1)关闭ntp服务和自启动
sudo systemctl stop ntpd
sudo systemctl disable ntpd
2)修改ntp配置文件
sudo vim /etc/ntp.conf
3)修改如下配置
1)授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
改为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
2)集群在局域网中,不使用其他互联网上的时间
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
改为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
3)当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步
添加
server 127.127.1.0
fudge 127.127.1.0 stratum 10
4)修改ntpd文件
sudo vim /etc/sysconfig/ntpd
5)修改如下配置
添加
#让硬件时间与系统时间一起同步
SYNC_HWCLOCK=yes
6)重启ntpd服务与设置开机自启
systemctl start ntpd
systemctl enable ntpd
7)在其他机器配置
#在其他机器配置10分钟与时间服务器同步一次
sudo crontab -e
#编写定时任务
*/10 * * * * /usr/sbin/ntpdate hadoop102
#修改任意机器时间
date -s "2017-9-11 11:11:11"
#十分钟后查看机器是否与时间服务器同步
date
#或者手动同步时间
/usr/sbin/ntpdate hadoop102