1.概念总结:拥有海量数据,具有高增长率、数据类型多样化、一定时间内无法使用常规软件工具进行捕捉、 管理和处理的数据集合。
2.特征:(4v)
3.大数据的应用场景:
-记录已经发生的一切
-描述正在发生的一切
-预测将要发生的一切
注:大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。
例如:、
OFO故障告警
星期天,我扫一UFO,刚扫完… 一黄框蹦跶出来,温馨提示:“编号***车16人已上报维修,左侧脚踏板可能已坏,建议您换一辆,以免影响您行程”, 差点影响俺见富婆的速度,点赞赞赞
尿不湿与啤酒的故事
- 周末,已婚小明来到全球零售巨头沃尔玛,溜达溜达,买打啤酒
- 咦,还有尿不湿,顺便给娃带包尿不湿
- 强大数据分析发现,买啤酒的很多还买尿不湿。从此,啤酒+尿不湿组合卖,销量果真与日俱增
- 这就是啤酒+尿不湿的故事
- 由于受启发,于是有了红酒+??
4.企业中大数据的一般工作流程
5.大数据与云计算和物联网之间的关系
云计算的概念:云计算是以虚拟技术为核心,进行统一管理硬件设施,平台、软件等;它通过网络提供了可伸缩的、廉价的分布式计算能力;它用出租的方式提供给用户,用户只要花低价,在具备网络接入条件的地方,就可以随时随地获得所需的各种IT资源;类似于国家统一管理水,电,煤气等等。
物联网的概念:物联网是物物相连的互联网,是互联网的延伸,它利用局部网络或互联网等通信技术把传感器、控制器、机器、人员和物等通过新的方式连在一起,形成人与物、物与物相连,实现信息化和远程管理控制。
这三者都代表了IT领域最新的技术发展趋势,三者既有区别又有联系。从云计算和大数据概念的诞生到现在,二者之间的关系非常微妙,既密不可分,又千差万别。因此,不能把云计算和大数据割裂开来作为截然不同的两类技术来看待。此外,物联网也是和云计算、大数据相伴相生的技术。
而三者的区别就在于:
-大数据侧重于对于海量数据的存储、处理与分析,从海量数据中发现价值,服务于生产和生活。
-云计算本质上旨在整合和优化各种IT资源并通过网络以服务的方式,廉价地提供给用户
-物联网的发展目标是实现物物相连,应用创建是物联网发展的核心
从整体上看,大数据、云计算和物联网这三者是相辅相成的:物联网的传感器源源不断的产生的大量数据,构成了大数据的重要数据来源,没有物联网的飞速发展,就不会带来数据产生方式的变革,即由人工产生阶段转向自动产生阶段,大数据时代也不会这么快到来。同时,物联网需要借助于云计算和大数据技术,实现物联网大数据的存储、分析和处理。
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)。
2.集群搭建
暂无,后期整理
1.比较全分布式,单机,伪分布式区别
从数据存储的形式区分:分布式文件系统和本地系统
单机:没有分布式的概念,存储在本地系统,所有的节点都存放在一台主机上,用于测试
伪分布式:有分布式概念,数据存储在分布式系统,所有的节点都存放在一台主机上,拥有集群所有的节点,都处于一台主机,用于测试,测试集群的结构
全分布式:有分布式概念,数据存储在分布式系统,拥有集群所有的节点,分别处于不同的主机,用于生产
2.启动脚本和关闭脚本介绍
启动脚本
– start-dfs.sh 用于启动hdfs集群的脚本
– start-yarn.sh 用于启动yarn守护进程
– start-all.sh 用于启动hdfs和yarn
关闭脚本
– stop-dfs.sh 用于关闭hdfs集群的脚本
– stop-yarn.sh 用于关闭yarn守护进程
– stop-all.sh 用于关闭hdfs和yarn
单个守护进程脚本
– hadoop-daemons.sh 用于单独启动或关闭hdfs的某一个守护进程的脚本
– hadoop-daemon.sh 用于单独启动或关闭hdfs的某一个守护进程的脚本
reg:
hadoop-daemon.sh [start|stop]
[namenode|datanode|secondarynamenode]
-- yarn-daemons.sh 用于单独启动或关闭hdfs的某一个守护进程的脚本
-- yarn-daemon.sh 用于单独启动或关闭hdfs的某一个守护进程的脚本
reg:
yarn-daemon.sh {start|stop}[resourcemanager|nodemanager]
4.集群守护进程不能开启的情况
HDFS其实就是一个分布式的文件系统,我们可以使用一些命令来操作这个分布式文件系统上的文件。
- 访问HDFS的命令:
hadoop dfs — 已过时
hadoop fs – 使用范围更大
hdfs dfs --范围相对较小
hadoop fs 和 hdfs dfs之间没有太大的区别
- 小技巧
1. 在命令行中输入hdfs,回车后,就会提示hdfs后可以使用哪些命令,其中有一个是dfs。
2. 在命令行中输入hdfs dfs,回车后,就会提示dfs后可以添加的一些常用shell命令。
- 注意事项 分布式文件系统的路径在命令行中,要从/开始写,即绝对路径。
1.创建目录
[-mkdir [-p] ...] #在分布式文件系统上创建目录 -p,多层级创建
2.上传指令
[-put [-f][-p] [-l] ... ] #将本地文件系统的文件上传到分布式文件系统
3.查看指令
[-ls [-d][-h] [-R][ ...]] \#查看分布式文件系统的目录里内容 调用格式:hdfs dfs -ls /
[-cat [-ignoreCrc] ...] \#查看分布式文件系统的文件内容 调用格式:hdfs dfs -cat /xxx.txt
[-tail [-f] ] \#查看分布式文件 系统的文件内容 调用格式:hdfs dfs -tail /xxx.txt
注意:默认最多查看1000行
4.下载指令
[-copyToLocal [-p][-ignoreCrc] [-crc] ... ] 注意:本地路径的文件夹可以不存在
[-moveToLocal ] 注意:从hdfs的某个路径将数据剪切到本地,已经被遗弃了
[-get [-p][-ignoreCrc] [-crc] ... ] 调用格式:同copyToLocal
5.删除命令
[-rm [-f][-r|-R] [-skipTrash] ...] 注意:如果删除文件夹需要加-r
[-rmdir [--ignore-fail-on-non-empty] ...] 注意:必须是空文件夹,如果非空必须使用rm删除
6.查看磁盘利用率和文件大小
[-df [-h][ ...]] 查看分布式系统的磁盘使用情况
[-du [-s][-h] ...] \#查看分布式系统上当前路径下文件的情况
-h: human 以人类可读的方式显示
7.向分布式文件系统中的文件里追加内容
[-appendToFile ... ] 调用格式:hdfs dfs -appendToFile 本地文件 hdfs上的文件
注意:不支持在中间随意增删改操作
8.修改权限的
跟本地的操作一致,-R是让子目录或文件也进行相应的修改
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] PATH...]
[-chown [-R][OWNER][:[GROUP]] PATH...]
9.修改文件的副本数
[-setrep [-R][-w] ...] 调用格式:hadoop fs -setrep 3 / 将hdfs根目录及子目录下的内容设置成3个副本
注意:当设置的副本数量与初始化时默认的副本数量不一致时,集群会作出反应,比原来多了会自动进行复制.
10.查看文件的状态
hdfs dfs [generic options] -stat [format] ...
命令的作用:当向hdfs上写文件时,可以通过dfs.blocksize配置项来设置文件的block的大小。
这就导致了hdfs上的不同的文件block的大小是不相同的。有时候想知道hdfs上某个文件的block
大小,可以预先估算一下计算的task的个数。stat的意义:可以查看文件的一些属性。
调用格式:hdfs dfs -stat [format] 文件路径
format的形式:
%b:打印文件的大小(目录大小为0)
%n:打印文件名
%o:打印block的size
%r:打印副本数
%y:utc时间 yyyy-MM-dd HH:mm:ss
%Y:打印自1970年1月1日以来的utc的微秒数
%F:目录打印directory,文件打印regular file
注意:
1)当使用-stat命令但不指定format时,只打印创建时间,相当于%y
2)-stat 后面只跟目录,%r,%o等打印的都是0,只有文件才有副本和大小
11.测试
hdfs dfs [generic options] -test -[defsz]
参数说明: -e:文件是否存在 存在返回0 -z:文件是否为空 为空返回0 -d:是否是路径(目录) ,是返回0
调用格式:hdfs dfs -test -d 文件
实例:hdfs dfs -test -d /shelldata/111.txt && echo "OK" || echo "no"
解释:测试当前的内容是否是文件夹 ,如果是返回ok,如果不是返回no
12.创建空文件
hdfs dfs [generic options] -touchz ...
调用格式:hdfs dfs touchz /hadooptest.txt
13.显示当前文件夹及子文件夹的数量
hdfs dfs [generic options] -count [-q][-h] ...
调用格式:hdfs dfs -count /hadoop
14.合并下载
hdfs dfs [generic options] -getmerge [-nl]
调用格式:hdfs dfs -getmerge hdfs上面的路径 本地的路径
实例:hdfs dfs -getmerge /hadoopdata/*.xml /root/test.test
15.移动hdfs中的文件(更名)
hdfs dfds [generic options] -mv ...
调用格式:hdfs dfs -mv /hdfs的路径1 /hdfs的另一个路径2
实例:hfds dfs -mv /aaa /bbb 这里是将aaa整体移动到bbb中
16.复制hdfs中的文件到hdfs的另一个目录 "
hdfs dfs [generic options] -cp [-f][-p | -p[topax]] ...
调用格式:hdfs dfs -cp /hdfs路径_1 /hdfs路径_2
在存储方式上,我们可以将这四个文件存储在同一个服务器上(当然大于1TB的文件需要切分),我们需要使用一个文件来记录这种存储的映射关系吧。用户是可以通过这种映射关系来找到节点硬盘相应的文件的。那么缺点也就暴露了出来:
第一、负载不均衡。
因为文件大小不一致,势必会导致有的节点磁盘的利用率高,有的节点磁盘利用率低。
第二、网络瓶颈问题。
一个过大的文件存储在一个节点磁盘上,当有并行处理时,每个线程都需要从这个节点磁盘上读取 这个文件的内容,那么就会出现网络瓶颈,不利于分布式的数据处理。
3. HDFS的块大小
HDFS上的块大小为什么会远远大于传统文件?
不适合存储小文件解释:
1. 从存储能力出发(固定内存)
因为HDFS的文件是以块为单位存储的,且如果文件大小不到128M的时候,是不会占用整个块的 空间的。但是,这个块依然会在内存中占用150个字节的元数据。因此,同样的内存占用的情况 下,大量的小文件会导致集群的存储能力不足。
例如: 同样是128G的内存,最多可存储9.2亿个块。如果都是小文件,例如1M,则集群存储的 数据大小为9.2亿1M = 877TB的数据。但是如果存储的都是128M的文件,则集群存储的数据大小 为109.6PB的数据。存储能力大不相同.
2.从内存占用出发(固定存储能力)
同样假设存储1M和128M的文件对比,同样存储1PB的数据,如果是1M的小文件存储,占用的内 存空间为1PB/1Mb150Byte = 150G的内存。如果存储的是128M的文件存储,占用的内存空间为 1PB/128M*150Byte = 1.17G的内存占用。可以看到,同样存储1PB的数据,小文件的存储比起大 文件占用更多的内存。
dfs.datanode.data.dir
file://${hadoop.tmp.dir}/dfs/data
HDFS的优点
HDFS的缺点