大数据
概念
海量数据,具有⾼增⻓率、数据类型多样化、⼀定时间内⽆法使⽤常规软件⼯具进⾏捕 捉、管理和处理的数据集合。
特征
-
Volume:巨⼤的数据量
-
Variety:数据类型多样化
--(1):结构化的数据 即有固定格式和有限⻓度的数据。
--(2):半结构化的数据 是⼀些XML或者HTML的格式的数据。
--(3):⾮结构化的数据 现在⾮结构化的数据越来越多,就是不定⻓、⽆固定格式的数据,例如⽹ ⻚、语⾳,视频等。
-
Velocity: 数据增⻓速度快
-
Value:价值密度低
应⽤场景
⼤数据让数据产⽣各种"价值"。可以说,⼤数据的核⼼作⽤就 是"数据价值化",这个过程就是⼤数据要做的主要事情。那么就可以概括成:
⼯作流程
数据源
数据采集或者同步
常⽤数据采集导⼊框架: - sqoop: ⽤于RDBMS与HDFS之间数据导⼊与导出 - flume: 采集⽇志⽂件数据,动态采集⽇志⽂件,数据流 flume采集到的数据,⼀份给HDFS,⽤于做离线分析;⼀份给Kafka,实时处理 - kafka: 主要⽤于实时的数据流处理 flume与kafka都有类似消息队列的机制,来缓存⼤数据环境处理不了的数据
数据存储
常⽤数据存储框架 - HDFS、 HBase、ES
数据清洗
即对数据进⾏过滤,得到具有⼀定格式的数据源 常⽤框架(⼯具):MapReduce、Hive(ETL)、SparkCore、sparksql等
数据分析
对经过数据清洗后的数据进⾏分析,得到某个指标 常⽤框架(⼯具):MapReduce、Hive、SparkSQL、impala(impa:le)、kylin
数据展示
即将数据分析后的结果展示出来,也可以理解为数据的可视化、以图或者表具体的形式展 示出来 常⽤⼯具: metastore、Javaweb、hcharts、echarts
Hadoop
版本
- Apache Hadoop(社区版): 原⽣的Hadoop、开源、免费、社区活跃,更新速度快, 适合学习阶段 - Cloudera Hadoop(CDH版):最成型的商业发⾏版本。有免费版和收费版本。版本划 分清晰,版本更新速度快,对⽣态圈的其他软件做了很好的兼容性,安全性、稳定性都有 增强。⽀持多种安装⽅式(Cloudera Manager、YUM、RPM、Tarball) - Hortonworks Hadoop(HDP):完全开源,安装⽅便,提供了直观的⽤户安装界⾯和 配置⼯具
组成部分
hadoop2.0以后的四个模块: - Hadoop Common:Hadoop模块的通⽤组件 - Hadoop Distributed File System:分布式⽂件系统 - Hadoop YARN:作业调度和资源管理框架 - Hadoop MapReduce:基于YARN的⼤型数据集并⾏计算处理框架 hadoop3.0新扩展的两个模块: - Hadoop Ozone:Hadoop的对象存储机制 - Hadoop Submarine:Hadoop的机器学习引擎
hadoop生态
* Hbase 是⼀个可扩展的分布式数据库,⽀持⼤型表格的结构化数据存储。 HBase是Apache 的Hadoop项⽬的⼦项⽬。HBase不同于⼀般的关系数据库,它是⼀个适合于⾮结构化 数据存储的数据库。另⼀个不同的是HBase基于列的,⽽不是基于⾏的模式。 * Hive 数据仓库基础架构,提供数据汇总和临时查询,可以将结构化的数据⽂件映射为⼀张 数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进⾏运 ⾏。Hive提供的是⼀种结构化数据的机制,定义了类似于传统关系数据库中的类SQL语 ⾔:Hive QL,通过该查询语⾔,数据分析⼈员可以很⽅便地运⾏数据分析 业务。 * Spark Hadoop数据的快速和通⽤计算引擎。 Spark提供了⼀个简单⽽富有表现⼒的编程模 型,⽀持⼴泛的应⽤程序,包括ETL,机器学习,流处理和图计算。 * ZooKeeper ⼀个⾯向分布式应⽤程序的⾼性能协调服务,是Hadoop和Hbase的重要组件。它是 ⼀个为分布式应⽤提供⼀致性服务的软件,提供的功能包括:配置维护、域名服务、分 布式同步、组服务等。 * Sqoop(数据ETL/同步⼯具) Sqoop是SQL-to-Hadoop的缩写,主要⽤于传统数据库和Hadoop之前传输数据。 数据的导⼊和导出本质上是Mapreduce程序,充分利⽤了MR的并⾏化和容错性。 * Flume(⽇志收集⼯具) Cloudera开源的⽇志收集系统,具有分布式、⾼可靠、⾼容错、易于定制和扩展的 特点。它将数据从产⽣、传输、处理并最终写⼊⽬标的路径的过程抽象为数据流,在具 体的数据流中,数据源⽀持在Flume中定制数据发送⽅,从⽽⽀持收集各种不同协议数 据。同时,Flume数据流提供对⽇志数据进⾏简单处理的能⼒,如过滤、格式转换等。 * Kafka(分布式消息队列) Kafka是Linkedin于2010年12⽉份开源的消息系统,它主要⽤于处理活跃的流式 数据。这些数据包括⽹站的pv、⽤户访问了什么内容,搜索了什么内容等。这些数据通 常以⽇志的形式记录下来,然后每隔⼀段时间进⾏⼀次统计处理。 * Ambari ⽤于供应,管理和监控Apache Hadoop集群的基于Web的⼯具。Ambari⽬前已⽀持 ⼤多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、 Sqoop和Hcatalog等。Ambari还提供了⼀个⽤于查 看集群健康状况的仪表板,例如热图以及可视化查看MapReduce,Pig和Hive应⽤程 序的功能以及⽤于诊断其性能特征的功能,以⽅便⽤户使⽤。 * Avro 数据序列化系统。可以将数据结构或者对象转换成便于存储和传输的格式,其设计 ⽬标是⽤于⽀持数据密集型应⽤,适合⼤规模数据的存储与交换。Avro提供了丰富的数 据结构类型、快速可压缩的⼆进制数据格式、存储持久性数据的⽂件集、远程调⽤RPC 和简单动态语⾔集成等功能。 * Cassandra 可扩展的多主数据库,没有单点故障。是⼀套开源分布式NoSQL数据库系统。 * Chukwa 于管理⼤型分布式系统的数据收集系统(2000+以上的节点, 系统每天产⽣的监控数 据量在T级别)。它构建在Hadoop的HDFS和MapReduce基础之上,继承了Hadoop的 可伸缩性和鲁棒性。Chukwa包含⼀个强⼤和灵活的⼯具集,提供了数据的⽣成、收 集、排序、去重、分析和展示等⼀系列功能,是Hadoop使⽤者、集群运营⼈员和管理 ⼈员的必备⼯具。 * Mahout Apache旗下的⼀个开源项⽬,可扩展的机器学习和数据挖掘库 * Pig ⽤于并⾏计算的⾼级数据流语⾔和执⾏框架。它简化了使⽤Hadoop进⾏数据分析的 要求,提供了⼀个⾼层次的、⾯向领域的抽象语⾔:Pig Latin。 * Tez ⼀个基于Hadoop YARN的通⽤数据流编程框架,它提供了⼀个强⼤⽽灵活的引擎, 可执⾏任意DAG任务来处理批处理和交互式⽤例的数据Hado™⽣态系统中的Hive™, Pig™和其他框架以及其他商业软件(例如ETL⼯具)正在采⽤Tez,以替代 Hadoop™MapReduce作为底层执⾏引擎。 * Oozie(⼯作流调度器) ⼀个可扩展的⼯作体系,集成于Hadoop的堆栈,⽤于协调多个MapReduce作业的执 ⾏。它能够管理⼀个复杂的系统,基于外部事件来执⾏,外部事件包括数据的定时和数 据的出现。 * Pig(ad-hoc脚本) 由yahoo!开源,设计动机是提供⼀种基于MapReduce的ad-hoc(计算在query时发 ⽣)数据分析⼯具,通常⽤于进⾏离线分析。它定义了⼀种数据流语⾔—Pig Latin,它 是MapReduce编程的复杂性的抽象,Pig平台包括运⾏环境和⽤于分析Hadoop数据集的 脚本语⾔(Pig Latin)。
Hadoop安装部署
本地模式搭建
- 特点: 本地模式,即运⾏在单台机器上,没有分布式思想,使⽤的是本地⽂件系统。 - ⽤途: 本地模式主要⽤于对MapReduce程序的逻辑进⾏调试,确保程序的正确。由于在本 地模式下测试和调试MapReduce程序较为⽅便,因此,这种模式适宜⽤在开发阶段。
环境搭建: JDK的安装
检查是否已经安装过或是否有内置的JDK,如果有,将其卸载
# 卸载之前的原因,主要是需要保证安装的JDK版本的正确性。 # rpm -qa | grep jdk #如果有,请卸载 # rpm -e xxxxxxxx --nodeps #将查询到的内置jdk强制卸载
上传jdk1.8到指定路径
使⽤MobaXterm或者FinalShell直接上传即可,上传到 /root/softwares 下
解压jdk到/usr/local/下
# cd /root/softwares && tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/loca
更名操作
# 更改名字,是为了后续时候的时候⽅便,不⽤再写后⾯的版本号 # cd /usr/local # mv jdk1.8.0_221/ jdk
配置环境变量
# vim /etc/profile ...上述内容省略,在末尾添加即可... # Java Environment export JAVA_HOME=/usr/local/jdk export PATH=$PATH:$JAVA_HOME/bin
重新引导,使得环境变量⽣效
# source /etc/profile
验证,验证⾃⼰的Java环境是否搭建完成
# 以下命令均可,只要弹出的不是”未找到命令“的提示即可 # java -version # javac
Hadoop的安装
上传Hadoop到Linux
使⽤MobaXterm或者FinalShell上传到 /root/softwares 下即可
解压
# cd /root/softwares && tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local
更名
# cd /usr/local # mv hadoop-2.7.6/ hadoop
配置Hadoop的环境变量
# vim /etc/profile ...上述内容省略,在最下⽅添加即可... # Hadoop Environment export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
重新引导,使得环境变量⽣效
# source /etc/profile
验证是否配置成功
# 如果弹出的信息不是“未找到命令”,说明配置完成 # hadoop version
Hadoop的⽬录说明
- bin => hadoop的⼆进制执⾏命令⽂件存储⽬录 - sbin => hadoop的执⾏脚本存储⽬录 - etc => hadoop的配置⽂件存储⽬录 - lib/libexec => hadoop的资源库存储⽬录 - share => hadoop的共享资源、开发⼯具和案例存储⽬录 - include => hadoop的⼯具脚本存储⽬录
程序案例演示: pi
直接计算pi的结果
# cd /usr/local/hadoop # hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar pi 10 10
伪分布式集群搭建
伪分布式模式介绍
1.特点 - 在⼀台机器上安装,使⽤的是分布式思想,即分布式⽂件系统,⾮本地⽂件系 统。 - Hdfs涉及到的相关守护进程(namenode,datanode,secondarynamenode) 都运⾏在⼀台机器上,都是独⽴的java进程。 2. ⽤途 ⽐Standalone mode 多了代码调试功能,允许检查内存使⽤情况,HDFS输⼊输 出,以及其他的守护进程交互。
伪分布式搭建环境准备
总纲
1. 确保防⽕墙是关闭状态。 2. 确保NAT模式和静态IP的确定 (192.168.10.101) 3. 确保/etc/hosts⽂件⾥, ip和hostname的映射关系 4. 确保免密登陆localhost有效 5. jdk和hadoop的环境变量配置
防⽕墙关闭确认
# systemctl stop firewalld # systemctl disable firewalld.service # systemctl stop NetworkManager # systemctl disable NetworkManager #最好也把selinux关闭掉,这是linux系统的⼀个安全机制,进⼊⽂件中将 SELINUX设置为disabled # vi /etc/selinux/config ......... SELINUX=disabled .........
配置/etc/hosts⽂件
-- 进⼊hosts⽂件,配置⼀下ip和hostname # vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.10.101 主机1 <====添加本机的静态IP和本机的主机名之间的映射关系
确保ssh对localhost的免密登陆认证有效
# 1. 使⽤rsa加密技术,⽣成公钥和私钥。⼀路回⻋即可 # ssh-keygen -t rsa # 2. 进⼊~/.ssh⽬录下,使⽤ssh-copy-id命令 # ssh-copy-id root@localhost # 3. 进⾏验证,去掉第⼀次的询问(yes/no) # ssh localhost
安装Jdk和Hadoop,配置相关环境变量
-1. 上传和解压两个软件包 # tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/ # tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local/ -2. 进⼊local⾥,给两个软件更名 # cd /usr/local/ # mv 1.8.0_221/ jdk # mv hadoop-2.7.6/ hadoop -3. 配置环境变量 # vi /etc/profile .....省略........... #java environment export JAVA_HOME=/usr/local/jdk export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH #hadoop environment export HADOOP_HOME=/usr/local/hadoop export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
伪分布式相关⽂件配置
core-site.xml的配置
# cd $HADOOP_HOME/etc/hadoop # vi core-site.xml <configuration> <!-- 配置分布式⽂件系统的schema和ip以及port,默认8020--> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:8020/</value> </property> </configuration> 扩展: hadoop1.x的默认端⼝是9000,hadoop2.x的默认端⼝是8020,使⽤哪⼀个都可以
hdfs-site.xml的配置
# vi hdfs-site.xml <configuration> <!-- 配置副本数,注意,伪分布模式只能是1。--> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
hadoop-env.sh的配置:指定jdk的环境
# vi hadoop-env.sh ................ # The java implementation to use. export JAVA_HOME=/usr/local/jdk ..................
格式化NameNode
# hdfs namenode -format
启动HDFS
启动伪分布式
# start-dfs.sh
jps命令查看守护进程
从上图我们可以看到,启动脚本会开启分布式⽂件系统上的相关进程: namenode datanode secondarynamenode
WebUI查看
可以在浏览器上输⼊:192.168.10.101:50070 来查看⼀下伪分布式集群的信息 --1. 浏览⼀下⻚⾯上提示的ClusterID,BlockPoolID --2. 查看⼀下活跃节点(Live Nodes)的个数,应该是1个 Compiled:编译 hadoop是由kshvachk⼯具集成的 Cluster ID:集群id Block Pool ID:datanode节点的block池的id,每个datanode节点的都要⼀样
程序案例演示:wordcount程序
准备要统计的两个⽂件,存储到/root/data/下
--1. 创建data⽬录 # mkdir ~/data --2. 将以下两个⽂件上传到data⽬录下 - poetry1.txt - poetry2.txt
在hdfs上创建存储⽬录
# hdfs dfs -mkdir /input
将本地⽂件系统上的上传到hdfs上
$ hdfs dfs -put ~/data/poetry* /input/
运⾏⾃带的单词统计程序wordcount
# cd $HADOOP_HOME # hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /input /out
查看part-r-00000⽂件
# hdfs dfs -cat /out/part-r-00000
完全分布式集群搭建
完全分布式模式介绍
完全分布式,指的是在真实环境下,使⽤多台机器,共同配合,来构建⼀个完整的分布式 ⽂件系统。 在真实环境中,hdfs中的相关守护进程也会分布在不同的机器中,⽐如: -1. namenode守护进程尽可能的单独部署在⼀台硬件性能相对来说⽐较好的机器中。 -2. 其他的每台机器上都会部署⼀个datanode守护进程,⼀般的硬件环境即可。 -3. secondarynamenode守护进程最好不要和namenode在同⼀台机器上。
切记,切记,切记: 实际⽣产环境中,我们不会使⽤root⽤户来搭建和管理hdfs,⽽是使⽤普通⽤户。这⾥ 为了⽅便学习,我们才使⽤的root⽤户。 注意,注意,注意: 1.如果你是从伪分布式过来的,最好先把伪分布式的相关守护进程关闭:stop-all.sh 2.删除原来伪分布式的相关设置 如果原来使⽤的是默认路径,现在已经没有⽤了 如果原来使⽤的跟现在全分布式路径⼀样,因为这⾥跟之前的初始化的内容不⼀样,⽽且 这个⽂件要让系统⾃动⽣成 综上:要删除掉namenode和datanode的⽬录
守护进程布局
我们搭建hdfs的完全分布式,顺便搭建⼀下yarn。hdfs和yarn的相关守护进程的布 局如下:
主机1: namenode,datanode,ResourceManager,nodemanager 主机2: datanode,nodemanager,secondarynamenode 主机3: dat