大数据的定义
大数据,指的是所涉及的资料量规模巨大到无法通过目前的主流软件工具,在合理 时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资 讯。
大数据的三个特点
3Vs:
-Volume(大量)数据量大,从 TB 级别跃升到 PB 级别
-Variety(多样)数据类型繁多
·非结构化:文本、图形、声音等
·半结构化:日志
·结构化数据:行列规整的表单数据
·多结构化数据:以上三种类型混合的数据
-Velocity(高速)数据的时效性,数据仅在一个短暂的时间范围有价值。
Hadoop 项目起始于 2002 年,创始人是 Doug Cutting 4. Hadoop 的两个核心组成部分
-分布式文件系统——HDFS(Nutch Distributed File System)
·数据被分割成小块存于上千的节点上
-分布式数据处理架构——MapReduce
·MapReduce 在数据节点上处理,降低 I/O 成本
·MapReduce 只是一个软件架构,充分灵活,是开发者易于实现多种多样的应用程序。
Hadoop 的优点
-高可靠性
·Hadoop 按位存储和处理数据的能力值得人们信赖。
-高扩展性
·Hadoop 是在可用的计算机集簇间分配数据并完成计算业务的,这些集簇可以方便地 扩展到数以千计的节点中。
-高效性
·Hadoop 能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速 度非常快。
-高容错性
Hadoop 能够自动的保存数据的多个副本,并且能够自动将失败的任务重新分配。
-低成本
·与一体机、商用数据仓库等相比,Hadoop 是开源的,项目的软件成本因此会大大降 低。
Hadoop 生态系统构成
项目名称 说明
Ambari 整合的 Hadoop 集群管理工具,包括安装、监控和维护
Flume 分布式日志收集系统
HBase 分布式、面向列的开源数据库,适用于非结构大数据存储
HCatalog 用于管理 Hadoop 产生的数据的表存储管理系统
Hive 基于 HDFS 的数据仓库工具可以将结构化的文件映射为一张数据库表, 提供类 SQL 语言 Hive QL
Hue Hadoop 图形界面管理工具,可以浏览文件及发出 Hive/Pig 指令
Pig 用于大数据分析工具,包含一个能产生 MapReduce 程序的编译器及查 询语言 Pig Latin
Sqoop 用于 Hadoop 系统与传统数据库间进行数据交换的工具
ZooKeeper 是一个分布式应用程序协调服务器
Mahout 数据挖掘算法库
说,可以配置一台机器的 Hadoop 集群,伪分布式是完全分布式的一个特例。
-完全分布式模式:Hadoop 守护进程运行在一个集群上。
注意:所谓分布式要启动守护进程 ,即:使用分布式 hadoop 时,要先启动一些准备 程序进程,然后才能使用比如 start-dfs.sh start-yarn.sh。而本地模式不需要启动这些守 护进程
主要进程:
NameNode、SecondaryNameNode 和 JobTracker —— Hadoop 主节点主要进程
DataNode 和 TaskTracker —— Hadoop 从节点主要进程 作用:
Hadoop 主节点是集群的核心,负责协调和管理对所有从节点的数据访问和计算工作。 NameNode:记录文件是如何分割成数据块,以及存储数据块的数据节点的信息;对内 存和 I/O 进行集中管理。
SecondaryNameNode:负责监控 HDFS 状态的辅助后台进程;不接受或记录任何实时的 数据变化;定期与 NameNode 通信,并定期保存 HDFS 元数据的快照,从而降低由于 NameNode 宕机所带来的损失;可以作为备用的 NameNode。 JobTracker:负责将应用程序与 Hadoop 系统对接;确认处理文件,并为所执行任务分配 指定的节点主机;负责监控所运行的任务,一旦发现某任务失败,将重启任务。 Hadoop 从节点担任着数据分布式存储和计算工作。
DataNode:负责将 HDFS 数据块读写到本地文件系统;客服端直接与 DataNode 服务器 的进程进行读/写访问。
TaskTracker:与 DataNode 进程结合进行工作;独立管理其所在从节点上的任务进程; 可以产生多个 JVM 进程,以并行处理多个 Map 和 Reduce 任务;与 JobTracker 进行定时 通讯联络。
·故障检测和自动快速恢复是 HDFS 一个非常核心的设计目标。
HDFS 针对大数据集方面的设计目标是什么
·运行在 HDFS 之上的应用程序通常具有很大量的数据集,典型的 HDFS 文件大小是 GB
到 TB 的级别。
·因此,HDFS 被设计为可支持大文件存储。
·它应该能提供整体上很高的数据传输带宽,能在一个集群里扩展到数百个节点,而且 还应该支持千万级别的文件。
不适用 HDFS 的主要场景有哪些
-将 HDFS 用于要求低延迟数据访问的场景
·由于 HDFS 是为搞数据吞吐量应用而设计的,必然一高延迟为代价。
-存储大量小数据文件
·HDFS 中元数据(文件的基本信息)存储在 NameNode 的内存中,而 NameNode 为单 点进程。这样小文件数量达到一定程度时,NameNode 内存就吃不消了。
HDFS 系统结构图
-一个 HDFS 集群有一个 NameNode,它的管理文件命名空间和调度客户端访问文件的主 服务器。
-多个 DataNode,通常是一般是一个节点一个,负责管理它所在节点的存储。
HDFS 系统的主要功能组件的作用(Block,Rack,DataNode,NameNode)
Block (数据块):大文件会被分割成多个 Block 进行存储,Block 大小默认为 64MB。每 一个 Block 会在多个 DataNode 上存储多个副本,默认值为 3。
Rack (机架):一个 Block 的三个副本通常会保存在两个或者两个以上的机架中(当然 是机架中的服务器),这样做的目的是做防灾容错,因为发生一个机架掉电或者一个机 架的交换机故障的概率还是较高的。
DataNode: 负责处理来自文件系统客户端的读/写请求,并进行数据块的读写、删除和 复制。当然大部分容错机制都是在 DataNode 上实现的。
NameNode: 负责管理文件目录、文件和 Block 的对应关系,以及 Block 和 DataNode
的映射关系。
当 HDFS 客户端执行读文件操作时:
当 HDFS 客户端执行写文件操作时:
进入、退出、查看安全模式的命令 进入:hadoop dfsadmin -safemode enter 退出:hadoop dfsadmin -safemode leave
查看:hadoop dfsadmin -safemode get (获取安全模式是否开启的信息)
hadoop dfsadmin -report (查看 HDFS 文件系统的基本信息和统计信息)
列举与 HDFS 相关的主要 Java 类及其作用
与 HDFS 相关的 API 位于 org.apache.hadoop.fs 包中。下面列出了几个常用类及其说明:
中间结果
Reducer 任务的数量是由用户自行定义的。(注*)
实现 writableComparable 接口,同时实现接口中以下方法:
·readFieIds 方法
·write 方法
·compareTo 方法
可根据需要声明字段,并提供对应的 get/set 方法
可根据需要覆盖 toString、equals 等对象管理方法
字段、构造器、方法的声明应符合 JavaBean 规范
简要介绍 Pig Latin 语言(P159)
·Pig Latin 是 Pig 专用的脚本语言,是类似于 SQL 的面向数据流的语言。
·这套脚本语言提供了对数据进行排序、过滤、求和、分组、关联等功能,同时,也允 许用户自定义一些函数,以满足某些特殊的数据处理需求。
·当需要处理海量数据时,先使用 Pig Latin 语言编写脚本程序,然后在 Pig 中执行 Pig Latin
程序。
·Pig 将用户编写的 Pig Latin 程序编译为 MapReduce 作业程序,并上传到集群中运行。
·对于用户来说,底层 MapReduce 工作是完全透明的,用户只要了解 SQL-Like 的 Pig Latin
语言就可以处理海量数据。
Pig 的两种工作模式,及其相应的执行方法
给定一组数据,写出相应功能的 pig 处理命令
A = LOAD ‘data.txt’ AS (id, name, score, class); – 载入数据
B = GROUP A BY class; – 分组
C = FOREACH B GENERATE group, COUNT($1); – 按组计数
DUMP C – 输出结果
Pig 的数据类型,及其含义
Pig 的数据模型包括以下四种类型:
列举 Pig Latin 的常用操作命令及其功能
Pig Latin 是一种面向数据流的语言。与 SQL 相比,Pig Latin 更容易跟踪变量的变化情况。
解释 GROUP,GROUP ALL 操作
写出 DESCRIBE 命令的输出结果
DESCRIBE 是一个调试命令,其作用是返回一个指定关系的结构。
分别写出查询表、排序、条件查询、分组对应的 MYSQL/PIG 语句
·SELECT * FROM TMP_TABLE LIMIT 50; (前 50 行)
·tmp_table_limit = LIMIT tmp_table 50; DUMP tmp_table _limit;
·SELECT USER FROM TMP_TABLE; (查询某些列)
·tmp_table_user = FOREACH tmp_table GENERATE user; DUMP tmp_table_user;
·SELECT USER AS USER_NAME, AGE AS USER_AGE FROM TMP_TABLE; (为列取别名)
·tmp_table_column_alias = FOREACH tmp_table GENERATE user AS user_name, age AS user_age;
DUMP tmp_table_column_alias;
排序☹(P185)
· SELECT * FROM TMP_TABLE ORDER BY AGE;
·tmp_table_order = ORDER tmp_table BY age ASC; DUMP tmp_table_order;
条件查询☹(P186)
·SELECT * FROM TMP_TABLE WHERE AGE>20;
·tmp_table_where = FILTER tmp_table by age > 20; DUMP tmp_table_where;
SELECT * FROM TMP_TABLE A JOIN TMP_TABLE_2 B ON A.AGE = B.AGE;
tmp_table_inner_join = JOIN tmp_table BY age, tmp_table_2 BY age; DUMP tmp_table_inner_join;
·Hive QL:
SELECT userinfo., choice. FROM userinfo JOIN choice ON (userinfo.id = choice.userid);
tmp_table_left_join = JOIN tmp_table BY age LEFT OUTER, tmp_table_2 BY age; DUMP tmp_table_left_join;
·Hive QL:
SELECT userinfo., choice. FROM userinfo LEFT OUTER JOIN choice ON (userinfo.id = choice.userid);
tmp_table_right_join = JOIN tmp_table BY age RIGHT OUTER, tmp_table_2 BY age; DUMP tmp_table_right_join;
·Hive QL:
SELECT userinfo., choice. FROM userinfo RIGHT OUTER JOIN choice ON (userinfo.id = choice.userid);
tmp_table_full_join = JOIN tmp_table BY age FULL OUTER, tmp_table_2 BY age; DUMP tmp_table_full_join;
·Hive QL:
SELECT userinfo.* FROM userinfo FULL OUTER JOIN choice ON (userinfo.id = choice.userid);
补:
多表交叉查询(笛卡儿积)
·SELECT * FROM TMP_TABLE, TMP_TABLE_2;
·tmp_table_cross = CROSS tmp_table,tmp_table_2; DUMP tmp_table_cross;
分组☹(P191)
·SELECT * FROM TMP_TABLE GROUP BY IS_MALE;
·tmp_table_group = GROUP tmp_table BY is_male; DUMP tmp_table_group;
分组并统计
·SELECT IS_MALE, COUNT(*) FROM TMP_TABLE GROUP BY IS_MALE;
·tmp_table_group_count = GROUP tmp_table BY is_male; Tmp_table_group_count = FOREACH tmp_table_group_count GENERATE group,
COUNT($1);
DUMP tmp_table_group_count;
去重
·SELECT DISTINCT IS_MALE FROM TMP_TABLE;
·tmp_table_distinct = FOREACH tmp_table GENERATE tmp_table GENERATE is_male; tmp_table_distinct = DISTINCT tmp_table_distinct;
DUMP tmp_table_distinct;
解释 pig 版 wordcount 程序☹(P194)
·Pig 版的词频统计程序 WordCount,文件名为 WordCount.pig,实现代码如下: 1 inp = load ‘wcin/*’ as (line:chararray);
2 words = foreach inp generate fllattern(TOKENIZE(line)) as word; 3 grpd = group words by word;
4 wcnt = group words by word; 5 DUMP wcnt;
Hive 的组成
Hive 包括以下组件:
MAP
不限 一组无序的键值对。键的类型必须是原子 的,值可以是任何类型,同一个映射的键的 类型必须相同,值得类型也必须相同
Map(‘a’,1,‘b’,2)
STRUCT 不限 一组命名的字段,字段类型可以不同 Struct(‘a’,1,1,0)
TERMINATED BY ‘\t’
CREATE TABLE Choice(userid INT , classname STRING) ROW FORMAT DELIMITED FIELEDS TERMINATED BY ‘\t’
CREATE TABLE ClassInfo(teacher STRING , classname STRING) ROW FORMAT DELIMITED FIELEDS TERMINATED BY ‘\t’
修改表:
hive>alter table mutill1 rename to mutill11;(重命名)
hive>alter table mutill11 add counms(grade string);(增加字段) hive>describe mutill1;
删除表:
hive>drop table mutill1;
hive>dfs -rmr /user/hive/warehouse/mutill1/* (对于托管表只删除表中数据但保留表的 元数据,可以在 HDFS 上直接删除数据文件)
Hive 服务器的启动方法
hive --service hiveserver -p 10021 hiveserver 指明启动 JDBC 服务
-p 选项用于指明服务器对外提供的访问端口
写出 Hive-JDBC 的编程步骤
HBase 数据库的主要特点 大:一个表可以包含上亿行,上百万列;
面向列:面向列(族)的存储和权限控制,列(族)的独立检索; 稀疏:对于为空(Null)的列,不占用存储空间
行键可以是任意字符串(最大长度 64KB),并按照字典序列进行存储。