大数据介绍
大数据的由来
大数据: 随着计算技术的发展,互联网的普及,信息的积累已经到了一个非常庞大的地步,信息的增长也在不断的加快,随着互联网、物联网建设的加快,信息更是爆炸是增长,收集、检索、统计这些信息越发困难,必须使用新的技术来解决这些问题.
什么是大数据
大数据的定义:
-大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产
-是指从各种各样类型的数据中,快速获取得有价值的信息
大数据能做什么:
-企业组织利用相关数据分析帮助他们降低成本、提高效率、开发新产品、做出更明智的业务决策等
-把数据集合并后进行分析得出的信息和数据关系性、用来察觉商业趋势、判定研究质量、避免疾病扩散、打击犯罪或测定即时交通路况等
-大规模并行处理数据库,数据挖掘电网,分布式文件系统或数据库,计算机平和可扩展的存储系统等
大数据特性
大数据的5V特性是什么
-Volume(大体量): 可从数百TB到数十数百PB、甚至EB的规模
-Variety(多样性): 大数据包括各种格式和形态的数据
-Velocity(时效性):很多大数据需要在一定的时间限度下得到及时处理
-Veracity(准确性):处理的结果要保证一定的准确性
-Value(大价值): 大数据包含很多深度的价值,大数据分析挖掘和利用将带来巨大的商业价值
大数据与Hadoop
Hadoop是什么
-Hadoop是一种分析和处理海量数据的软件平台
-Hadoop是一款开源软件,使用JAVA开发
-Hadoop可以提供一个分布式基础架构
Hadoop特点:
-高可靠性、高扩展性、高效性、高容错性、低成本
Hadoop
Hadoop起源
1.2003年开始Google陆续发表了3篇论文
-GFS,MapReduce,BigTable
2.GFS
-GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用
-可以运行于廉价的普通硬件上,提供容错功能
3.MapReduce
-MapReduce是针对分布式并行计算的一套编程模型,由Map和Reduce组成,Map是映射,把指令分发到多个worker上,Reduce是规约,把worker计算出的结果合并
4.BigTable
-BigTable是存储结构化数据
-BigTable建立在GFS,Scheduler,Lock Service和MapReduce之上
-每个Table都是一个多维的稀疏图
5.GFS、MapReduce和BigTable三大技术被称为Google的三驾马车,虽然没有公布源码,但发布了这三个产品的详细设计论
6.Yahoo资助的Hadoop,是按照这三篇论文的开源Java实现的,但在性能上Hadoop比Google要差很多
-GFS —> HDFS
-MapReduce —> MapReduce
-BigTable —> Hbase
Hadoop组件
Hadoop常用组件
HDFS: Hadoop分布式文件系统(核心组件)
MapReduce: 分布式计算框架(核心组件)
Yarn: 集群资源管理系统(核心组件)
Zookeeper: 分布式协作服务
HBase: 分布式列数据库
Hive: 基于Hadoop的数据仓库
Sqoop: 数据同步工具
Pig:基于Hadoop的数据流系统
Mahout: 数据挖掘算法库
;Flume: 日志收集工具
Hadoop核心组件
Hadoop生态系统
HDFS结构
HDFS角色及概念
Hadoop体系中数据存储管理的基础,是一个高度容错的系统,用于在低成本的通用硬件上运行
角色和概念: -Client -Namenode -Sconedarynode -Datanode
NameNode: 分配存储计算管理
-master节点,管理HDFS的名称空间和数据块映射信息,配置副本策略(处理存放几副本),处理所有客户端请求
Secondary NameNode:
-定期合并fsimage(存放记录,文件映射数据)和fsedits(补丁文件),推送给NameNode
-紧急情况下,可辅助恢复NameNode
但Sedcondary NameNode并非NameNode的热备
DataNode :存储的具体位置
-数据存储节点,存储实际的数据
-汇报存储信息给NameNode
(client问NameNode存储位置,NameNode返回信息给client,client进行位置存储,返回信息给NameNode存储完成)
Client:
-切分文件
-访问HDFS
-与NameNode交互,获取文件位置信息
-与Datanode交互,读取和写入数据
Block:
-每块缺省128MB大小
-每块可以多个副本
MapReduce结构
MapReduce结构及概念
源自于Google的MapReduce论文,JAVA实现的分布式计算框架
角色概念:
-JobTracker
-TaskTracker
-Map Task
-Reducer Task
Jobtracker;
-Master节点只有一个
-管理所有作业/任务的监控、错误处理等
-将任务分解成一系列任务,并分派给TaskTracker
TaskTracker;
-Slave节点,一般是多台
-运行Map Task和Reduce Task
-并与JobTaskTracker交互,汇报任务状态
Map Task:解析每条数据记录,传递给用户编写的map()并执行,将输出结果写入本地磁盘
-如果为map-only作业,直接写入HDFS
Reducer Task: 从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的Reduce函数执行
Yarn结构
Yarn角色及概念
Yarn是Hadoop的一个通用的资源管理系统
Yarn角色:
-Resourcemanager
-Nodemanager
-ApplicationMaster
-Container
-Client
Resourcemanager; -处理客户端请求
-启动/监控ApplicationMaster
-监控Nodemanager
-资源分配与调度
NodeManager
-单个节点上的资源管理
-处理来自ResourceManager的命令
-处理来自ApplicationMaster
Container:
-对任务运行环境的抽象,封装CPU、内存等
-多维资源以及环境变量、启动命令等任务运行相关的信息资源分配与调度
ApplicationMaster:
-数据切片
-为应用程序申请资源,并分配给内部任务
-任务监控与容错
Client:
-用户与Yarn交互的客户端程序
-提交应用程序、监控应用程序状态,杀死应用程序等
Yarn的核心思想:
将JobTracker和Tacker进行分离,它由下面几大构成组件:
-ResourceManager一个全局的资源管理器
-NodeManager每个节点(RM)代理
-ApplicationMaster表示每个应用
-每一个ApplicationMaster有多个Container在NodeManager上运行
Hadoop安装与配置
Hadoop介绍
Hadoop模式
Hadoop的部署模式有三种:单机 , 伪分布式 , 完全分布式
单机模式
Hadoop的单机模式安装非常简单
-获取软件 : http://hadoop.apache.org
安装配置Java环境,安装jps工具 : Openjdk和Openjdk-devel
-设置环境变量,启动运行
-Hadoop-env.sh
JAVA_HOME=“JAVA安装路径”
HADOOP_CONF_DIR=“hadoop配置文件路径”
Hadoop的单机模式安装很简单,只需要配置号环境变量即可运行,这个模式一般用来学习和测试Hadoop的功能
-测试 --统计词频
[root@nn01 ~]# yum -y install java-1.8.0-openjdk-devel
[root@nn01 hadoop]# tar -xf hadoop-2.7.7.tar.gz
[root@nn01 hadoop]# mv hadoop-2.7.7 /usr/local/hadoop
[root@nn01 hadoop]# cd /usr/local/hadoop
[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.161-2.b14.el7.x86_64 /jre"
33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
[root@nn01 ~]# cd /usr/local/hadoop/
[root@nn01 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.
[root@nn01 hadoop]# mkdir /usr/local/hadoop/input
[root@nn01 hadoop]# ls
bin etc include lib libexec LICENSE.txt NOTICE.txt input README.txt sbin share
[root@nn01 hadoop]# cp *.txt /usr/local/hadoop/input
[root@nn01 hadoop]# ./bin/hadoop jar \
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount input output //wordcount为参数 统计input这个文件夹,存到output这个文件里面(这个文件不能存在,要是存在会报错,是为了防止数据覆盖)
[root@nn01 hadoop]# cat output/part-r-00000 //查看
伪分布式
伪分布式的安装和完全分布式类似,区别是所有角色安装在一台机器上,使用本地磁盘,一般生产环境都会使用完全分布式,伪分布式一般是用来学习和测试Hadoop的功能
伪分布式的配置和完全分布式配置类似
Hadoop配置文件及格式
文件格式:
-Hadoop-env.sh
JAVA_HOME
HADOOP_CONF_DIR
-xml文件配置格式
关键字
变量值
描述
HDFS
HDFS分布式文件系统
完全分布式
系统规划:
主机 | 角色 | 软件 |
---|---|---|
192.168.1.60 nn01 | NameNode,SecondaryNameNode | HDFS |
1.61 node1 | Datanode | HDFS |
1.62 node2 | Datanode | HDFS |
1.63 node3 | Datanode | HDFS |
搭建完全分布式
基础环境准备:
-新开启3台机器
-禁用SELinux SELINUX=disabled
-禁用firewalld
# systemctl stop firewall
#systemctl mask firewall
-安装java-1.8.0-openjdk-devel
在三台机器上配置/etc/hosts (所有主机都能ping通namenode的主机名,namenode能ping通所有节点)
java -version 验证java安装
jps 验证角色
配置SSH信任关系(NameNode)
-注意:不能出现要求输入yes的情况,每台机器都要能登录成功,包括本机!!!
-/etc/sshssh_config
StrictHostKeyChecking no
# ssh-keygen
#ssh-copy-id 192.168.1.$i
[root@nn01 ~]# vim /etc/ssh/ssh_config //第一次登陆不需要输入yes
Host *
GSSAPIAuthentication yes
StrictHostKeyChecking no
[root@nn01 .ssh]# ssh-keygen
[root@nn01 .ssh]# for i in 61 62 63 64 ; do ssh-copy-id 192.168.1.$i; done
//部署公钥给nn01,node1,node2,node3
[root@nn01 .ssh]# ssh node1 #测试ssh是否完好
HDFS完全分布式系统配置:
-环境配置文件: hadoop-env.sh
-核心配置文件: core-site.xml
-HDFS配置文件: hdfs-site.xml
-节点配置文件:slaves
-hadoop 官方手册 ==https://hadoop.apache.org/docs/ ==
https://hadoop.apache.org/docs/r2.7.7/hadoop (name字段不可修改,value字段可以修改自定义的内容,description描述信息可以不写)
环境配置文件hadoop-env.sh
-Openjdk的安装目录:JAVA_HOME
-Hadoop配置文件的存放目录: HADOOP_CONF_DIR
核心配置文件core-site.xml
-fs.defaultFS : 文件系统配置参数
-hadoop.tmp.dir : 数据目录配置参数
[root@nn01 hadoop]# vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name> #默认的文件系统
<value>hdfs://nn01:9000</value> #使用每个主机的数据存储
</peoperty>
<property>
<name>hadoop.tmp.dir</name> #所有核心数据的存储路径
<value>/var/hadoop</value>
</property>
</configuration>
HEFS配置文件hdfs-site.xml
-NameNode:地址声明
dfs.namenode.http-address
Secondartnamenode : 地址声明
dfs.namenode.secondary.http-address
文件冗余份数:
dfs.replication
[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]# vim hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>nn01:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>nn01:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
节点配置文件slaves
-只写Datanode节点的主机名称
node1
node2
node3
-同步配置
-Hadoop索引所有节点的配置参数完全一样,在一台配置好后,把配置文件同步到其他所有主机上
[root@nn01 hadoop]# for i in 62 63 64 ; do rsync -aSH --delete /usr/local/hadoop/
\ 192.168.1.$i:/usr/local/hadoop/ -e 'ssh' & done
[1] 23260
[2] 23261
[3] 23262
HDFS完全分布式配置:
-本机创建/var/hadoop文件夹
# mkdir /var/hadoop
-在那么node上执行格式化操作
# ./bin/hdfs namenode -format
-启动集群
# ./sbin/start-dfs.sh
[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): //有三个角色成功
节点验证:
-NameNode上
-bin/hdfs dfsadmin -report