一、大数据与Hadoop
1.1 大数据简介
1.1.1 大数据的定义
– 大数据由巨型数据集组成,这些数据集大小常超出人
类在可接受时间下的收集、使用、管理和处理能力。
1.1.2 大数据能做什么
– 把数据集合幵后进行分析可得出许多额外的信息和数
据关系性,可用来察觉商业趋势、判定研究质量、避
免疾病扩散、打击犯罪或测定即时交通路况等;这样
的用途正是大型数据集盛行的原因
1.2 什么是Hadoop
– Hadoop 是一种分析和处理海量数据的软件平台
– Hadoop 是一款开源软件,使用 JAVA 开发
– Hadoop 可以提供一个分布式基础架构
二、Hadoop组件
2.1 Hadoop 核心组件
2.1.1 HDFS
– 分布式文件系统
2.1.2 MapReduce
– 分布式计算框架
2.1.3 Yarn
– 集群资源管理系统
2.2 Hadoop 生态系统
2.3 Hadoop 常用组件
• HDFS(Hadoop分布式文件系统)
• Mapreduce(分布式计算框架)
• yarn(集群资源管理系统)
• Zookeeper(分布式协调服务)
• kafka (分布式的消息系统)
• Hbase(分布式列存数据库)
• Hive(基于Hadoop的数据仓库)
• Sqoop(数据同步工具)
• Pig(基于Hadoop的数据流系统)
• Mahout(数据挖掘算法库)
• Flume(日志收集工具)
三、Hadoop核心组件
3.1 HDFS 结构
HDFS是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,用于在低成本的通用硬件上运行。
HDFS的工作原理:
client将数据进行分片,他会向namenode发出请求询问数据应该存放到哪些datanode结点上,namenode会告诉HDFS client分片数据的存放位置,HDFS Client就会与DataNode进行通信,把数据存放到响应的dataNode结点上。
3.1.1 HDFS 角色及概念
角色和概念
– Client
– Namenode
– Secondarynode
– Datanode
1. Client
– 切分文件
– 访问HDFS
– 不NameNode交互,获取文件位置信息
– 不DataNode交互,读取和写入数据。
2. NameNode
– Master节点,管理HDFS的名称空间和数据块映射信
息,配置副本策略,处理所有客户端请求。
3. Secondary NameNode
– 定期合并 fsimage 和fsedits,推送给NameNode
– 紧急情况下,可辅劣恢复NameNode
4. DataNode
– 数据存储节点,存储实际的数据
– 汇报存储信息给NameNode
5.Block
– 每块缺省64MB大小
– 每块可以多个副本
3.2 MapReduce 结构
MapReduce是一个分布式计算框架
角色和概念
– JobTracker
– TaskTracker
– Map Task
– Reducer Task
1. JobTracker
– Master节点,只有一个
– 管理所有作业
– 作业/仸务的监控、错误处理等
– 将任务分解成一系列任务,分派给TaskTracker。
2. TaskTracker
– Slave节点,一般是多台
– 运行Map Task和Reduce Task
– 幵不JobTracker交互,汇报仸务状态。
3. Map Task:解析每条数据记录,传递给用户编写的
map(),幵执行,将输出结果写入本地磁盘(如果为
map-only作业,直接写入HDFS)。
4. Reducer Task:从Map Task的执行结果中,远程读
取输入数据,对数据进行排序,将数据按照分组传递
给用户编写的reduce凼数执行。
3.3 Yarn 结构
Yarn 是 Hadoop 的一个通用的资源管理系统
3.3.1 Yarn 角色
– Resourcemanager
– Nodemanager
– ApplicationMaster
– Container
– Client
1. ResourceManager
– 处理客户端请求
– 启动 / 监控 ApplicationMaster
– 监控 NodeManager
– 资源分配不调度
2. NodeManager
– 单个节点上的资源管理
– 处理来自 ResourceManager 的命令
– 处理来自 ApplicationMaster 的命令
3. Container
– 对任务运行环境的抽象,封装了 CPU 、内存等
– 多维资源以及环境变量、启动命令等任务运行相关的
信息资源分配与调度
4.ApplicationMaster
– 数据切分
– 为应用程序申请资源,幵分配给内部任务
– 任务监控不容错
5.Client
– 用户与YARN 交互的客户端程序
– 提交应用程序、监控应用程序状态,杀死应用程序等
3.3.2 YARN 的核心思想
将 JobTracker 和 TaskTacker 进行分离,它由下面
几大构成组件:
– ResourceManager 一个全局的资源管理器
– NodeManager 每个节点(RM)代理
– ApplicationMaster 表示每个应用
– 每一个 ApplicationMaster 有多个 Container 在NodeManager 上运行
四、Hadoop 安装配置
4.1 Hadoop 的部署模式有三种
– 单机
– 伪分布式
– 完全分布式
4.2 Hadoop 单机模式安装配置
1、获取软件
http://hadoop.apache.org
点击此处下载hadoop.rar
2、安装配置 java 环境,安装 jps 工具
安装 Openjdk 和 openjdk-devel
~] # yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
3、设置环境变量,启劢运行
~]# rpm -ql java-1.8.0-openjdk
~] # vim hadoop-env.sh
JAVA_HOME=“/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre/”
4.hadoop 的功能
– 测试 --- 统计词频
cd /usr/local/hadoop
mkdir input
cp *.txt input/
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-
mapreduce-examples-2.7.3.jar wordcount input output
4.3 Hadoop 伪分布式
1. 伪分布式
– 伪分布式的安装和完全分布式类似,但区别是所有角
色安装在一台机器上,使用本地磁盘,一般生产环境
都会使用完全分布式,伪分布式一般用来学习和测试
方面的功能
2. 伪分布式的配置和完全分布式配置类似
3. 文件格式
3.1 Hadoop-env.sh
JAVA_HOME
HADOOP_CONF_DIR
3.2 Xml 文件配置格式
<property>
<name>关键字</name>
<value>变量值</value>
<description> 描述 </description>
</property>
4.4 HDFS 分布式文件系统
4.4.1 系统规划
4.4.2 基础环境准备
1. 新开启3台虚拟机
2. 禁用 selinux
SELINUX=disabled
3. 禁用 firewalld
systemctl stop firewalld
systemctl mask firewalld
4. 安装 java-1.8.0-openjdk-devel
yum install -y java-1.8.0-openjdk-devel
5.所有主机能相互 ping 通 (配置 /etc/hosts)
6.NN1: 能 ssh 免密登录所有集群主机,包括自己(不能提示输入 yes)
~] # vim /root/ssh/ssh_config
StrictHostKeyChecking no
4.4.3 HDFS 完全分布式系统配置
– 环境配置文件 hadoop-env.sh
– 核心配置文件 core-site.xml
– HDFS配置文件 hdfs-site.xml
– 节点配置文件 slaves
1.环境配置文件 hadoop-env.sh 【NN01】
– openjdk 的安装目录
– JAVA_HOME
~] # vim hadoop-env.sh
JAVA_HOME=“/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre/”
– hadoop 配置文件的存放目录
– HADOOP_CONF_DIR
~] # vim hadoop-env.sh
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/usr/local/hadoop/etc/hadoop"}
2.核心配置文件 core-site.xml
– fs.defaultFS 文件系统配置参数
– hadoop.tmp.dir 数据目录配置参数
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://nn01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop</value>
</property>
</configuration>
2.1 ALL: 所有主机上创建文件夹 /var/hadoop
3.NN1: 配置 hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name> //namenode 地址声明
<value>nn01:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name> //secondarynamenode 地址声明
<value>nn01:50090</value>
</property>
<property>
<name>dfs.replication</name> //文件冗余仹数
<value>2</value>
</property>
</configuration>
4. NN1: 配置 slaves,配置datanode节点
hadoop]# vim slaves
node1
node2
node3
5. ALL: 同步配置到所有主机
#!/bin/bash
function syncfile(){
for host in $@;do
rsync -az --delete /usr/local/hadoop/etc ${host}:/usr/local/hadoop/ &
rsync /etc/hosts ${host}:/etc/hosts
done
wait
}
if (( $# > 0 ));then
syncfile $@
else
echo "${0} host1 host2 host3 ... ... host(N)"
fi
~]# ./rsyncConfig.sh node{1..3}
6.NN01: 格式化 namenode
./bin/hdfs namenode -format
7.NN01: 启动集群
./sbin/start-dfs.sh
停止集群可以使用 ./sbin/stop-dfs.sh
8.ALL: 验证角色 jps
9.NN01: 验证集群是否组建成功
./bin/hdfs dfsadmin -report