大型架构及配置技术大数据(一)之大数据,Hadoop,Hadoop安装与配置,HDFS
一、大数据
1.大数据的由来
随着计算机技术的发展,互联网的普及,信息的积累已经到了一个非常庞大的地步,信息的增长也在不断的加快,随着互联网,物联网建设的加快,信息更是爆炸式增长,收集,检索,统计这些信息越发困难,必须使用新的技术来解决这些问题
2.大数据的定义
大数据指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,需要新处理模式才能具有更强的决策力,洞察发现力和优化能力的海量,高增长率和多样化的信息资产
是指从各种各样类型的数据中,快速获得有价值的信息
3.大数据的作用
企业组织利用相关数据分析帮助他们降低成本,提高效率,开发新产品,做出更明智的业务决策等
把数据集合并后进行分析得出的信息和数据关系性,用来察觉商业趋势,判定研究质量,避免疾病扩散,打击犯罪或测定即时交通状况
大规模并行处理数据库,数据挖掘电网,分布式文件系统或数据库,云计算平和可扩展的存储系统等
4.大数据特性
数量(Volume):
TB级
记录/日志
事务
表和文件
速度(Velocity):
批处理
实时
多进程
数据流
真实性(Veracity):
可信性
真伪性
来源和信誉
有效性
可审计性
种类(Variety):
结构化
非结构化
多因素
概率性
价值(Value):
统计学
事件性
相关性
假设性
5.大数据与Hadoop
Hadoop是一种分析和处理海量数据的软件平台
Hadoop是一款开源软件,使用JAVA开发
hadoop可以提供一个分布式基础架构
特点:
高可靠性,高扩展性,高效性,高容错性,低成本
二、Hadoop
1.Hadoop起源
2003年开始Google陆续发表了3篇论文
GFS,MapReduce,BigTable
GFS
GFS是一个可扩展的分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用
MapReduce
MapReduce是针对分布式并行计算的一套编程模型,由Map和Reduce组成,Map是映射,把指令分发到多个worker上,Reduce是规约,把worker计算出的结构合并
BigTable
BigTable是存储结构化数据
BigTable建立在GFS,Scheduler,Lock Service和MapReduce之上
每个Table都是一个多维的系数图
GFS,MapReduce和BigTable三大技术被称为Google的三驾马车,虽然没有公布源码,但发布了三个产品的详细设计论
Yahoo资助的Hadoop,是按照这三篇论文的开源Java实现的,但在性能上Hadoop比Google要差很多
GFS ---> HDFS
MapReduce ---> MapReduce
BigTable ---> Hbase
2.Hadoop常用组件
HDFS:Hadoop分布式文件系统(核心组件)
MapReduce:分布式计算框架(核心组件)
Yarn:集群资源管理系统(核心组件)
Zookeeper:分布式协作服务
Hbase:分布式列存数据库
Hive:基于Hadoop的数据仓库
Sqoop:数据同步工具
Pig:基于Hadoop的数据流系统
Mahout:数据挖掘算法库
Flume:日志收集工具
3.Hadoop核心组件
4.Hadoop生态系统
5.HDFS结构
6.HDFS角色及概念
Hadoop体系中数据存储管理的基础,是一个高度容错的系统,用于低成本的通用硬件上运行
角色和概念:
Client
Namenode
Secondarynode
Datanode
NameNode
Master节点,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理所有客户端请求
Secondary NameNode
定期合并fsimage和fsedits,推给NameNode
紧急情况下,可辅助恢复NameNode
但Secondary NameNode并非NameNode的热备
DataNode
数据存储节点,存储实际的数据
汇报存储信息给NameNode
Client
切分文件
访问HDFS
与NameNode交互,获取文件位置信息
与DataNode交互,读取和写入数据
Block
每块缺省128MB
每块可以多个副本
7.MapReduce结构
8.MapReduce角色及概念
源自于Google的MapReduce论文,JAVA实现的分布式计算框架
角色和概念:
JobTracker
Master节点只有一个
管理所有作业/任务的监控,错误处理等
将任务分解成一系列任务,并分派给Task Tracker
TaskTracker
Slave节点,一般是多台
运行Map Task和Reduce Task
并与JobTracker交互,汇报任务状态
Map Task
解析每条数据记录,传递给用户编写的map()并执行,将输出结果写入本地磁盘
如果为map-only作业,直接写入HDFS
Reduce Task
从Map Task的执行结果中,远程读取用户 数据,对数据进行排序,将数据按照分组传递给用户编写的reduce的函数执行
9.Yarn结构
10.Yarn角色及概念
Yarn是Hadoop的一个通用的资源管理系统
Yarn角色
Resourcemanager
Nodemanager
ApplicationMaster
Container
Client
ResourceManager
处理客户端请求
启动/监控ApplicationMaster
监控NodeManager
资源分配与调度
NodeManager
单个节点上的资源管理
处理来自ResourceManager的命令
处理来自ApplicationMaster的命令
Container
对任务运行行环境的抽象,封装了CPU、内存等
多维资源以及环境变量、启动命令等任务运行相关的信息资源分配与调度
ApplicationMaster
数据切分
为应用程序申请资源,并分配给内部任务
任务监控与容错
Client
用户与Yarn交互的客户端程序
提交应用程序、监控应用程序状态,杀死应用程序等
11.Yarn的核心思想
将JobTracker和TaskTacker进行分离,它由下面几大构成组件
ResourceManager一个全局的资源管理器
NodeManager每个节点(RM)代理
ApplicationMaster表示每个应用
每一个ApplicationMaster有 多个Container在NodeManager上运行
三、Hadoop安装与配置
1.Hadoop的部署模式有三种
单机
伪分布式
完全分布式
2.单机模式
Hadoop的单机模式安装非常简单
获取软件
http://hadoop.apache.org
安装配置Java环境,安装jps工具
安装Openjdk和Openjdk-devel
设置环境变量,启动运行
hadoop-env.sh
JAVA HOME= "JAVA安装路径"
HADOOP_ CONF DIR= "hadoop配置文件路径"
Hadoop的单机模式安装很简单,只需配置好环境变量即可运行,这个模式一般用来学习和测试Hadoop的功能
[[email protected] ~]# yum -y install java-1.8.0-openjdk-devel
[[email protected] ~]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
[[email protected] ~]# jps
2215 Jps
[[email protected] ~]# tar -xf hadoop-2.7.7.tar.gz
[[email protected] ~]# mv hadoop-2.7.7 /usr/local/hadoop
[[email protected] ~]# chown -R 0.0 /usr/local/hadoop
[[email protected] ~]# rpm -ql java-1.8.0-openjdk
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre/bin/policytool
[[email protected] ~]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
25 export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/ jre"
33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
[[email protected] ~]# /usr/local/hadoop/bin/hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
CLASSNAME run the class named CLASSNAME
or
where COMMAND is one of:
fs run a generic filesystem user client
version print the version
jar <jar> run a jar file
note: please use "yarn jar" to launch
YARN applications, not this command.
checknative [-a|-h] check native hadoop and compression libraries availability
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
classpath prints the class path needed to get the
credential interact with credential providers
Hadoop jar and the required libraries
daemonlog get/set the log level for each daemon
trace view and modify Hadoop tracing settings
Most commands print help when invoked w/o parameters.
[[email protected] ~]# mkdir /usr/local/hadoop/input
[[email protected] ~]# cp /usr/local/hadoop/*.txt /usr/local/hadoop/input
[[email protected] ~]# /usr/local/hadoop/bin/hadoop jar \
> /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar \
> wordcount /usr/local/hadoop/input /usr/local/hadoop/output
[[email protected] ~]# cat /usr/local/hadoop/output/part-r-00000 ==>>查看
3.伪分布式
伪分布式的安装和完全分布式类似,区别是所有角色安装在一台机器上,使用本地磁盘,一般生产环境都会使用完全分布式,伪分布式般是用来学习和测试Hadoop的功能
伪分布式的配置和完全分布式配置类似
4.Hadoop配置文件及格式
文件格式
Hadoop-env.sh
JAVA HOME
HADOOP CONF DIR
xml文件配置格式
<property>
<name>关键字</name>
<value>变量值< /value>
<description>描述< /description>
</property>
四、HDFS分布式文件系统(搭建完全分布式)
1.完全分布式
系统规划
主机名 IP地址 软件 角色
nn60 192.168.4.60/24 HDFS NameNode SecondaryNameNode
node61 192.168.4.61/24 HDFS DataNode
node62 192.168.4.62/24 HDFS DataNode
node63 192.168.4.63/24 HDFS DataNode
2.基础环境准备
新开启3台虚拟机
禁用selinux
禁用firewalld
安装java-1.8.0-openjdk devel
在3台机器上配置/etc/hosts
注意 :所有主机都能ping通namenode的主机名 ,namenode能ping通所有节点
java -version 验证java安装
jps 验证角色
[[email protected] ~]# vim /etc/hosts ==>>每台机器都配置
192.168.4.60 nn60
192.168.4.61 node61
192.168.4.62 node62
192.168.4.63 node63
[[email protected] ~]# yum -y install java-1.8.0-openjdk-devel ==>>所有机器都配置
3.配置SSH信任关系(NameNode)
注意:不能出现要求输入yes的情况,每台机器都要能登录成功,包括本机! ! !
/etc/ssh/ssh_ config
StrictHostKeyChecking no
[[email protected] ~]# vim /etc/ssh/ssh_config ==>>所有机器都配置
60 StrictHostKeyChecking no
[[email protected] ~]# ssh-******
[[email protected] ~]# for i in 60 61 62 63;do ssh-copy-id 192.168.4.$i;done
4.HDFS完全分布式系统配置
环境配置文件: hadoop-env.sh
核心配置文件: core-site.xml
HDFS配置文件: hdfs-site.xml
节点配置文件: slaves
5.环境配置:文件hadoop-env.sh
OpenJDK的安装目录: JAVA_HOME
Hadoop配置文件的存放目录: HADOOP_CONF_DIR
6.核心配置文件core-site.xml
fs.defaultFS : 文件系统配置参数
hadoop.tmp.dir :数据目录配置参数
[[email protected] ~]# vim /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://nn60:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop</value>
</property>
</configuration>
[[email protected] ~]# mkdir /var/hadoop ==>>hadoop的数据根目录
7.HDFS配置文件hdfs-site.xml
Namenode : 地址声明
dfs.namenode.http-address
Secondarynamenode :地址声明
dfs.namenode.secondary.http-address
文件冗余份数
dfs.replication
[[email protected] ~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>nn60:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>nn60:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
8.节点配置文件slaves
只写DataNode节点的主机名称
node61
node62
node63
同步配置
Hadoop所有节点的配置参数完全一样,在一台配置好后,把配置文件同步到其它所有主机上
[[email protected] ~]# vim /usr/local/hadoop/etc/hadoop/slaves
node61
node62
node63
[[email protected] ~]# for i in 61 62 63;do rsync -aSH /usr/local/hadoop/ 192.168.4.$i:/usr/local/hadoop/ -e 'ssh' & done
[1] 3971
[2] 3972
[3] 3973
[[email protected] ~]# ssh node61 ls /usr/local/hadoop/
bin
etc
include
input
lib
libexec
LICENSE.txt
NOTICE.txt
output
README.txt
sbin
share
10.HDFS完全分布式配置
在本机创建/var/hadoop文件夹
在namenode.上执行格式化操作
启动集群
[[email protected] ~]# /usr/local/hadoop/bin/hdfs namenode -format ==>>格式化namenode
[[email protected] ~]# /usr/local/hadoop/sbin/start-dfs.sh ==>>启动集群
11.JPS验证角色
NameNode验证
DataNode验证
[[email protected] ~]# jps ==>>验证角色
4803 Jps
4167 NameNode
4350 SecondaryNameNode
12.节点验证
NameNode_上
bin/hdfs dfsadmin -report
[[email protected] ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report ==>>查看集群是否组建成功
Live datanodes (3): ==>>有三个角色成功