定义:
大数据指无法在一定时间范围内用常用的软件工具进行捕捉,管理和处理的数据集合,是需要新处理
模式才能具有更强的决策力,洞察发现力和流程优化的能力的海量、高增长率和多样化的信息产业。
作用:
企业租住利用相关数据和分析可以帮助他们降低成本、提高效率、开发新产品、做出更明智的业务决策。
五点特性
数量Volume: TB级、记录日志、事务、表文件
速度Velocity: 批处理、多进程、数据流、实时(比如预测天气)
种类Variety: 结构化、非结构化、多因素、概率性(任何数据都可以做大数据)
Hadoop 特点:
高可用、 高扩展性、 高效性、 高容错性、 低成本
是一种分析和处理海量数据的软件平台
是一款开源软件,使用JAVA开发
可以提供一个分部式基础架构
Hadoop平台组件
HDFS
- 分布式文件系统
MapReduce
- 分布式计算框架
Yarn
- 集群资管理系统
Hadoop生态系统:
大数据运维需要管理的常用组件:
-
Zookeeper 分布式协作服务
-
YARN 集群资源管理系统
-
HDFS 分布式文件系统
-
Oozie 作业流调度系统
-
Flume 日志收集工具
大数据程序员需要掌控的:
-
HBase 实时分布式数据库
-
Sqoop 数据库同步工具
-
MapReduce 分布式离线计算框架
-
Tez DAG计算框架
-
Sterm 流式计算框架
HDFS结构角色
1、Client (负责数据切块)
-
Block 数据切块均匀的分布在所有磁盘上
-
每块缺省64MB大小、每块可以锁个副
2、NameNode
-
Master节点,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理所有客户端请求。
3、SecondaryNode (具体存储数据的地方)
- 定期合并fsimage和fsedits,推送给NameNode
- 紧急情况下,可以辅助恢复NameNode
注:但SecondaryNode并非NameNode的热备
4、Datanode (存储实际的数据、汇报信息给NameNode)
-
Datanode使用
-
fsimage(文件块的映射关系) 记录数据存储的位置
-
fsedits (数据变更日志)
原理:
client 先和 Namenode交互,获取存取文件的位置、
再与 DataNode交互,读取和写入数据
MapReduce角色和结构:
JAVA实现的分布式计算框架
1、JobTracker
-
master节点,只有一个
-
管理所有作业
-
作业/任务的监控,错误处理等
-
将任务分解成一系列任务,并分派给TaskTracker
2、TaskTracker
-
slave节点,一般是多台
-
运行MapTask 和 ReduceTask
-
并与JobTracker交互,汇报任务状态
3、MapTask 分派一个个统计
- 解析每条数据记录,传递给用户编写的Map(),并执行,将输出结果
- 写入本地磁盘(如果为Map-only作业,直接写入HDFS)
4、ReducerTask 统计完汇总
- 从MapTask的执行结果中,远程读取输入数据,对数据进行排序,
- 将数据按照分组传递给用户编写的reduce函数执行
Yarn角色和结构
Yarn是Hadoop的一个通用的资源管理系统
-核心思想:
-
将 JobTracker、TaskTacker进行分离,几大组件构成
-
ResourceManager 全局资源管理器
-
NodeManager 每个节点(RM)代理
-
ApplicationMaster 表示每个应用
-
每一个 ApplicationMaster 有多个 Container 在 NodeManager 上运行
1、Resourcemanager
-
处理客户端请求
-
启动/监控 ApplicationMater
-
监控 NodeManager
-
资源分配与调度
2、Nodemanager
-
单个节点上的资源管理
-
处理来自 ResourceManager 的命令
-
处理来自 ApplicationMaster 的命令
3、ApplicationMaster
-
数据切分
-
为应用程度申请资源,并分配给内部任务
-
热舞监控与容错
4、Container
-
对任务运行环境的抽象,封装了CPU、内存等
-
多维资源以及环境变量,启动命令等任务运行相关的信息资源分配与调度
5、Client
-
用户与 YARN 交互的客户端程序
-
提交应用程序,监控应用程序状态,杀死应用程序等
Hadoop 部署有三种模式
- 单机、伪分布式、完全分布式
HDFS 完全分布式系统配置
-
环境配置文件 hadoop-env.sh
-
核心配置文件 core-site.xml
-
HDFS配置文件 hdfs-site.xml
-
节点配置文件 slaves
步骤一:环境准备
1)配置主机名为nn01,ip为192.168.1.21,配置yum源(系统源)
2)安装java环境
[root@nn01 ~]# yum -y install java-1.8.0-openjdk-devel
[root@nn01 ~]# java -version
[root@nn01 ~]# jps
3)安装hadoop
[root@nn01 ~]# tar -xf hadoop-2.7.6.tar.gz
[root@nn01 ~]# mv hadoop-2.7.6 /usr/local/hadoop
[root@nn01 ~]# cd /usr/local/hadoop/
[root@nn01 hadoop]# ls
bin include libexec NOTICE.txt sbin
etc lib LICENSE.txt README.txt share
[root@nn01 hadoop]# ./bin/hadoop //报错,JAVA_HOME没有找到
4)解决报错问题
[root@nn01 hadoop]# rpm -ql java-1.8.0-openjdk
[root@nn01 hadoop]# cd ./etc/hadoop/
[root@nn01 hadoop]# vim hadoop-env.sh
25 export \
JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre"
33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
测试单机版Hadoop
[root@nn01 ~]# cd /usr/local/hadoop/
[root@nn01 hadoop]# ./bin/hadoop
[root@nn01 hadoop]# mkdir /usr/local/hadoop/aa
[root@nn01 hadoop]# ls
bin etc include lib libexec LICENSE.txt NOTICE.txt aa README.txt sbin share
[root@nn01 hadoop]# cp *.txt /usr/local/hadoop/aa
[root@nn01 hadoop]# ./bin/hadoop jar \
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount aa bb
//wordcount为参数 统计aa这个文件夹,存到bb这个文件里面(这个文件不能存在,要是存在会报错,是为了防止数据覆盖)
[root@nn01 hadoop]# cat bb/part-r-00000 //查看
配置Hadoop
准备四台虚拟机,由于之前已经准备过一台,所以只需再准备三台新的虚拟机即可,安装hadoop,使所有节点可以ping通,配置SSH信任关系
步骤一:环境准备
1)三台机器配置主机名为node1、node2、node3,配置ip地址(ip如图-1所示),yum源(系统源)
2)编辑/etc/hosts(四台主机同样操作,以nn01为例)
[root@nn01 ~]# vim /etc/hosts
192.168.1.21 nn01
192.168.1.22 node1
192.168.1.23 node2
192.168.1.24 node3
3)安装java环境,在node1,node2,node3上面操作(以node1为例)
[root@node1 ~]# yum -y install java-1.8.0-openjdk-devel
4)部署SSH信任关系
[root@nn01 ~]# vim /etc/ssh/ssh_config //第一次登陆不需要输入yes
Host *
GSSAPIAuthentication yes
StrictHostKeyChecking no
[root@nn01 .ssh]# ssh-keygen -N ‘’ -f /root/.ssh/id_rsa
5)测试信任关系
步骤二:配置hadoop
1)修改slaves文件
[root@nn01 ~]# cd /usr/local/hadoop/etc/hadoop
[root@nn01 hadoop]# vim slaves
node1
node2
node3
2)hadoop的核心配置文件core-site
[root@nn01 hadoop]# vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://nn01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop</value>
</property>
</configuration>
[root@nn01 hadoop]# mkdir /var/hadoop //hadoop的数据根目录
[root@nn01 hadoop]# ssh node1 mkdir /var/hadoop
[root@nn01 hadoop]# ssh node2 mkdir /var/hadoop
[root@nn01 hadoop]# ssh node3 mkdir /var/hadoop
3)配置hdfs-site文件
[root@nn01 hadoop]# vim 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> //申明谁是namenode 小秘 和主机端口
<value>nn01:50090</value> 主机端口
</property>
<property>
<name>dfs.replication</name> // dfs.replication 切块的数据存几份
<value>2</value>
</property>
</configuration>
4)同步配置到node1,node2,node3
[root@nn01 hadoop]# yum –y install rsync //同步的主机都要安装rsync
[root@nn01 hadoop]# for i in 22 23 24 ; do rsync -aSH --delete /usr/local/hadoop/
\ 192.168.1.$i:/usr/local/hadoop/ -e 'ssh' & done
[1] 23260
[2] 23261
[3] 23262
5)查看是否同步成功
[root@nn01 hadoop]# ssh node1 ls /usr/local/hadoop/
[root@nn01 hadoop]# ssh node2 ls /usr/local/hadoop/
[root@nn01 hadoop]# ssh node3 ls /usr/local/hadoop/
步骤三:格式化
[root@nn01 hadoop]# cd /usr/local/hadoop/
[root@nn01 hadoop]# ./bin/hdfs namenode -format //格式化 namenode
[root@nn01 hadoop]# ./sbin/start-dfs.sh //启动
[root@nn01 hadoop]# jps //验证角色
23408 NameNode
23700 Jps
23591 SecondaryNameNode
[root@nn01 hadoop]# ./bin/hdfs dfsadmin -report //查看集群是否组建成功
Live datanodes (3): //有三个角色成功