大数据期末复习题

大数据课程复习题
  1. 大数据的定义
    大数据,指的是所涉及的资料量规模巨大到无法通过目前的主流软件工具,在合理 时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资 讯。

  2. 大数据的三个特点
    3Vs:
    -Volume(大量)数据量大,从 TB 级别跃升到 PB 级别
    -Variety(多样)数据类型繁多
    ·非结构化:文本、图形、声音等
    ·半结构化:日志
    ·结构化数据:行列规整的表单数据
    ·多结构化数据:以上三种类型混合的数据
    -Velocity(高速)数据的时效性,数据仅在一个短暂的时间范围有价值。

  3. Hadoop 项目起始于 2002 年,创始人是 Doug Cutting 4. Hadoop 的两个核心组成部分
    -分布式文件系统——HDFS(Nutch Distributed File System)
    ·数据被分割成小块存于上千的节点上
    -分布式数据处理架构——MapReduce
    ·MapReduce 在数据节点上处理,降低 I/O 成本
    ·MapReduce 只是一个软件架构,充分灵活,是开发者易于实现多种多样的应用程序。

  4. Hadoop 的优点
    -高可靠性
    ·Hadoop 按位存储和处理数据的能力值得人们信赖。
    -高扩展性
    ·Hadoop 是在可用的计算机集簇间分配数据并完成计算业务的,这些集簇可以方便地 扩展到数以千计的节点中。
    -高效性
    ·Hadoop 能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速 度非常快。
    -高容错性
    Hadoop 能够自动的保存数据的多个副本,并且能够自动将失败的任务重新分配。
    -低成本
    ·与一体机、商用数据仓库等相比,Hadoop 是开源的,项目的软件成本因此会大大降 低。

  5. Hadoop 生态系统构成

项目名称 说明
Ambari 整合的 Hadoop 集群管理工具,包括安装、监控和维护
Flume 分布式日志收集系统
HBase 分布式、面向列的开源数据库,适用于非结构大数据存储
HCatalog 用于管理 Hadoop 产生的数据的表存储管理系统
Hive 基于 HDFS 的数据仓库工具可以将结构化的文件映射为一张数据库表, 提供类 SQL 语言 Hive QL
Hue Hadoop 图形界面管理工具,可以浏览文件及发出 Hive/Pig 指令
Pig 用于大数据分析工具,包含一个能产生 MapReduce 程序的编译器及查 询语言 Pig Latin
Sqoop 用于 Hadoop 系统与传统数据库间进行数据交换的工具
ZooKeeper 是一个分布式应用程序协调服务器
Mahout 数据挖掘算法库

  1. Hadoop 的三种运行模式
    -独立(本地/单机)运行模式:无需任何守护进程,所有的程序都运行在同一个 JVM 上 执行。在独立模式下调试 MR 程序非常高效方便。所以一般该模式主要是在学习或者开 发阶段调试使用。
    -伪分布式模式:Hadoop 守护进程运行在本地机器上,模拟一个小规模的集群,换句话

说,可以配置一台机器的 Hadoop 集群,伪分布式是完全分布式的一个特例。
-完全分布式模式:Hadoop 守护进程运行在一个集群上。

注意:所谓分布式要启动守护进程 ,即:使用分布式 hadoop 时,要先启动一些准备 程序进程,然后才能使用比如 start-dfs.sh start-yarn.sh。而本地模式不需要启动这些守 护进程

  1. Hadoop 集群的构成,主从节点内部各自运行的主要进程,及其作用 构成:Hadoop 系统由两个核心子系统和多个扩展子系统组成。

主要进程:
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 进行定时 通讯联络。

  1. HDFS 针对硬件故障方面的设计目标是什么
    ·整个 HDFS 系统可能是由数百上千或千个存储着文件数据片段的服务组成。
    ·因此硬件故障是常态,而非异态。

·故障检测和自动快速恢复是 HDFS 一个非常核心的设计目标。

  1. HDFS 针对大数据集方面的设计目标是什么
    ·运行在 HDFS 之上的应用程序通常具有很大量的数据集,典型的 HDFS 文件大小是 GB
    到 TB 的级别。
    ·因此,HDFS 被设计为可支持大文件存储。
    ·它应该能提供整体上很高的数据传输带宽,能在一个集群里扩展到数百个节点,而且 还应该支持千万级别的文件。

  2. 不适用 HDFS 的主要场景有哪些
    -将 HDFS 用于要求低延迟数据访问的场景
    ·由于 HDFS 是为搞数据吞吐量应用而设计的,必然一高延迟为代价。
    -存储大量小数据文件
    ·HDFS 中元数据(文件的基本信息)存储在 NameNode 的内存中,而 NameNode 为单 点进程。这样小文件数量达到一定程度时,NameNode 内存就吃不消了。

  3. HDFS 系统结构图
    -一个 HDFS 集群有一个 NameNode,它的管理文件命名空间和调度客户端访问文件的主 服务器。
    -多个 DataNode,通常是一般是一个节点一个,负责管理它所在节点的存储。

  4. HDFS 系统的主要功能组件的作用(Block,Rack,DataNode,NameNode)

  • Block (数据块):大文件会被分割成多个 Block 进行存储,Block 大小默认为 64MB。每 一个 Block 会在多个 DataNode 上存储多个副本,默认值为 3。

  • Rack (机架):一个 Block 的三个副本通常会保存在两个或者两个以上的机架中(当然 是机架中的服务器),这样做的目的是做防灾容错,因为发生一个机架掉电或者一个机 架的交换机故障的概率还是较高的。

  • DataNode: 负责处理来自文件系统客户端的读/写请求,并进行数据块的读写、删除和 复制。当然大部分容错机制都是在 DataNode 上实现的。

  • NameNode: 负责管理文件目录、文件和 Block 的对应关系,以及 Block 和 DataNode
    的映射关系。

  1. HDFS 客户端执行读文件操作的工作流程

当 HDFS 客户端执行读文件操作时:

  • 客户端向 NameNode 发出打开指定文件请求;
  • NameNode 在元数据中找到该文件与 DataNode 之间数据块的映射关系,并将此数据返 回给客户端;
  • 客户端按照映射关系,向指定 Data№de 发出读数据请求,并进而获取数据;
  • 如果第 3 步出现故障,客户端将根据映射从另外的 DataNode 上读取同样的数据,这 体现了 HDFS 的容错能力;
  • 客户端向 NameNode 发出关闭文件请求,以结束此次文件读操作。
  1. HDFS 客户端执行写文件操作的工作流程

当 HDFS 客户端执行写文件操作时:

  • 客户端向 NameNode 发出创建文件请求,NameNode 计算出该文件与 DataNode 之间 数据块映射关系的元数据,并将此数据返回给客户端;
  • 客户端按照映射关系,向第一个 DataNode 发出写数据请求,并进而写入数据;
  • HDFS 根据映射关系,将同样的数据块写入到另外两个 DataNode 主机上;
  • DataNode 写数据块成功后,向前一个 DataNode 返回应答结果;
  • 第一个 DataNode 将最终应答结果返回给客户端;
  • 客户端向 NameNode 发出关闭文件请求,以结束此次文件写操作。
  1. HDFS 文件操作命令的通用格式,给出创建子目录、列举文件、上传文件、查看文件、 下载文件和删除文件的命令
    通用格式:hadoop fs|dfs - [args]
  • cmd 表示具体的操作命令
  • args 表示命令所需的参数
  • 创建子目录:hadoop fs -mkdir /user/trunk (在 user/目录下创建 trunk 子目录)
  • 列举文件:hadoop fs -ls /user (列出 user/目录下所有文件和子目录 r 递归)
  • 上传文件:hadoop fs -put test.txt /user/trunk
  • 查看文件:hadoop fs -cat /user/trunk/test.txt (查看尾部内容为 -tail)
  • 下载文件:hadoop fs -get /user/trunk/test.txt
  • 删除文件:hadoop fs -rm /user/trunk/test.txt
  1. HDFS 文件路径的 URI 格式
    scheme://authority/path
  • scheme:协议名,file 或 hdfs
  • authority:NameNode 主机名+端口号
  • path:文件路径 Eg:hdfs://winstar:9000/user/trunk/test.txt
  1. 描述 HDFS 文件系统的安全模式特点和主要工作
  • 特点:
    ·当 Hadoop 启动时,NameNode 首先进入安全模式,此时不会出现数据块的写操作。
    ·安全模式下,如果 DataNode 丢失的数据块达到一定比例,系统会一直处于安全模式 中。
  • 主要工作
    ·在安全模式下,NameNode 会受到各个 DataNode 发送来的数据块列表报告。当整个 系统达到安全标准时,HDFS 自动离开安全模式。
    ·若检测到副本数不足的数据块,该块会被复制到其他数据节点,以达到最小副本数。
  1. 进入、退出、查看安全模式的命令 进入:hadoop dfsadmin -safemode enter 退出:hadoop dfsadmin -safemode leave
    查看:hadoop dfsadmin -safemode get (获取安全模式是否开启的信息)
    hadoop dfsadmin -report (查看 HDFS 文件系统的基本信息和统计信息)

  2. 列举与 HDFS 相关的主要 Java 类及其作用
    与 HDFS 相关的 API 位于 org.apache.hadoop.fs 包中。下面列出了几个常用类及其说明:

  • FileSystem 一用于封装文件系统(包括 HDFS)的基类。类中提供了创建文件、拷贝文 件、删除文件、目录列表等相关文件操作的 API。
  • FiIeStatus 一用于封装文件属性信息的类,如文件长度、属主和组、最后修改时间等。
  • FSDataInputStream 和 FSDataOutputStream 生一读文件流和写文件流。它们分别继承 自 java.io.DataInputStream 和 java.io.DataOutputStream
  • FileUtiI 一文件操作的工具类,是对 FiIeSystem 类文件操作相关功能的补充。
  • Path 一用于封装文件名或路径的类。
  1. Mapreduce 处理模型和主要抽象方法
  • 处理模型
    ·采用“分而治之”的思想,将大规模数据集的操作分发给一个主节点管理下 的多个 从节点共同完成,然后通过整合各从节点的中间结果,得到最终结果。
  • 抽象方法
    ·map()方法:负责将任务分解为许多个子任务执行。
    ·reduce()方法:负责将这些子任务的处理结果进行汇总.
    ·这两个方法的具体功能由用户根据需求自行设计实现。
  1. Mapreduce 处理的数据集的特点
  • 待处理的数据集可以被分解为许多小数据集
  • 每个小数据集都可以被并行处理
  1. Mapreduce 总体处理过程图
  • MapReduce 确定待处理的数据块数,以及每个记录在数据块中的位置;
  • 对数据块中的所有记录执行相应的算法处理。处理数据块的每一个程序实例就是一 个 Mapper 任务;
  • 对每个节点 Mapper 任务产生的中间结果在其本地进行整合(这一步是可选的);
  • 根据分区要求,将 Mapper 产生的结果划分为组;
  • 将 Mapper 产生的结果整合成单一结果,这就是 Reduce 阶段,处理 Mapper 结果的 每一个程序实例就是一个 Reducer 任务。
  1. 解释 Map 阶段的处理流程
    Map 阶段的处理过程如下:
  • 将 lnput Split 进一步分解为键值;
  • 为每一个 Split 创建一个 Mapper 任务,执行用户自定义的 map()方法,得到计算的

中间结果;

  • 将中间结果按 K2 进行排序,并将 Key 值相同的 value 组合到一起形成一个列表集合
    (List),进而形成列表组;
  • 最后根据 Key 值的范围将这些列表组进行分组,对应不同的 Reducer 任务。
  1. 解释 Reduce 阶段的处理流程
    Reduce 阶段的处理过程如下:
  • Reducer 将从不同 Mapper 任务接收来的数据整合在一起并进行排序;
  • 调用用户自定义的 reduce()方法,对输入的进行相应的处理,得到键值 对并输出到 HDFS 上。

Reducer 任务的数量是由用户自行定义的。(注*)

  • 在 mapred-site.xml 配置文件中有一个表示 Reducer 数量的属性 mapred.reduce.tasks, 其默认值是 1。
  1. 解释程序 wordcount 中的主要函数原理(P136)
  • InputSplit (分解文件)
  • Mapper(按行抽取)
  • Combiner (本地排序,归并)
  • Reducer (全局归并)
  1. 什么是反向索引(Inverted Index),基本原理是什么(P139)
  • 反向索引是文档检索系统中最为常用的数据结构,被广泛应用于全文搜索引擎。
  • 基本原理:其基本原理是存储某个单词(或词组)在一个文档或一组文档中存储位置 的映射,及提供一种根据内容来查询文档的方式。
  1. 列举 Mapreduce 框架的主要数据类型类 这些内置的数据类型位于 org.apache.hadoop.io 包中:
  • BooleanWritable – 布尔型数值
  • ByteWritable – 字节型数值
  • DoubleWritable – 双精度型数值
  • FloatWritable – 浮点型数值
  • IntWritable – 整型数值
  • LongWritable – 长整型数值
  • NullWritable – 空值,当 Key 或 Value 为空值时用
  • Text – UTF-8 文本字符串
  1. 如何实现 Mapreduce 自定义数据类型 如果现有内置数据类型不能满足应用程序需要,还可以自定义数据类型类。自定义数据类型 类应符合以下要求:
  • 实现 writableComparable 接口,同时实现接口中以下方法:
    ·readFieIds 方法
    ·write 方法
    ·compareTo 方法

  • 可根据需要声明字段,并提供对应的 get/set 方法

  • 可根据需要覆盖 toString、equals 等对象管理方法

  • 字段、构造器、方法的声明应符合 JavaBean 规范

  1. 简要介绍 Pig Latin 语言(P159)
    ·Pig Latin 是 Pig 专用的脚本语言,是类似于 SQL 的面向数据流的语言。
    ·这套脚本语言提供了对数据进行排序、过滤、求和、分组、关联等功能,同时,也允 许用户自定义一些函数,以满足某些特殊的数据处理需求。
    ·当需要处理海量数据时,先使用 Pig Latin 语言编写脚本程序,然后在 Pig 中执行 Pig Latin
    程序。
    ·Pig 将用户编写的 Pig Latin 程序编译为 MapReduce 作业程序,并上传到集群中运行。
    ·对于用户来说,底层 MapReduce 工作是完全透明的,用户只要了解 SQL-Like 的 Pig Latin
    语言就可以处理海量数据。

  2. Pig 的两种工作模式,及其相应的执行方法

  • 本地模式:pig -x local
  • MapReduce 模式:pig 或 pig -x mapreduce
  1. Pig 的三种运行模式
  • Grunt SheII —— 类似于 Linux SheII 形式的命令行交互方式,即 grunt>提示符方式。
  • 脚本文件 —— 将一系列 Pig 命令组织在一个脚本文件中集中执行的方式。
  • 代码嵌入 —— 是指将 Pig 命令嵌入到 Java 语言中执行的方式。
  1. 给定一组数据,写出相应功能的 pig 处理命令
    A = LOAD ‘data.txt’ AS (id, name, score, class); – 载入数据
    B = GROUP A BY class; – 分组
    C = FOREACH B GENERATE group, COUNT($1); – 按组计数
    DUMP C – 输出结果

  2. Pig 的数据类型,及其含义
    Pig 的数据模型包括以下四种类型:

  • FieId:存放一个原子的数据,可以是一个字符串,一个数字等。 例如,‘lucy’
  • Tuple:Field 的序列,其中的每个 FieId 可以是任何一种数据类型。 例如,(‘lucy’,‘1234’)
  • Bag:Tuple 的集合,每个 Tuple 可以包含不同数目不同类型的 Field。 例如,{(‘lucy’,‘1234’) (‘jack’,(‘iPod’,‘apple’))}
  • Map:一组键值对的组合,在一个关系中的键值对必须是唯一的。 例如:[name#Mike,phone#1391234]
  1. Pig 数据类型与关系型数据库的对比
    Bag>TupIe>FieId
  • Bag 对应关系型数据库中的表
  • Tuple 对应表中的行
  • Field 尾对应行中的字段
  • 两者的区别在于,Pig 不要求每个 Bag 中的 TupIe 必须包含相同数目和相同类型的
    Field。
  1. 列举 Pig Latin 的常用操作命令及其功能
    Pig Latin 是一种面向数据流的语言。与 SQL 相比,Pig Latin 更容易跟踪变量的变化情况。

  2. 解释 GROUP,GROUP ALL 操作

  • GROUP…BY 语句用来对关系中的数据进行分组。
  • GROUP 语句会创建一个新关系。
    ·关系中的第一个字段是分组字段,其别名为 group;
    ·第二个字段是包含与原关系模式相同的被分组字段的包。
  • GROUP 不仅支持对键值进行分组(即把键值相同的元组放在一起),还可以使用表 达式最为分组键。
  • GROUP 语句还提供特殊的分组操作:ALL 分组。
  • ALL 将一个关系中所有元组放入一个包。
  • ALL 分组常用于计算关系中的元组个数。
  1. 写出 DESCRIBE 命令的输出结果
    DESCRIBE 是一个调试命令,其作用是返回一个指定关系的结构。

  2. 分别写出查询表、排序、条件查询、分组对应的 MYSQL/PIG 语句

  • 查询☹(P182)
    ·SELECT * FROM TMP_TABLE;
    ·DUMP tmp_table ;

·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;

  1. 解释内联接、左外联接、右外联接、全联接的含义与关系☹( Pig P187/ Hive QL P228)
  • 内联接(交集)
    ·内联结使用比较运算符根据每个表共有的列的值匹配两个表中的行。
    ·My SQL/Pig:

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);

  • 左外联接(左全集)
    ·左外联结的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是连接列 所匹配的行。
    ·如果左表的某行在右表中没有匹配行,则在相关联的结果集中右表的所有选择列均为 空值。
    ·My SQL/Pig:
    SELECT * FROM TMP_TABLE A LEFT JOIN TMP_TABLE_2 ON B ON A.AGE = B.AGE;

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);

  • 右外联接(右全集)
    ·右外联结是左外联结的反向联结,将返回右表的所有行。
    ·如果右表的某行在左表中没有匹配行,则将为左表返回空值。
    ·My SQL/Pig:
    SELECT * FROM TMP_TABLE A RIGHT JOIN TMP_TABLE_2 ON B ON A.AGE = B.AGE;

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);

  • 全外联接(并集)
    ·全外联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个 表的选择列表的列包含空值。
    ·如果表之间有匹配行,则整个结果集包含基表的数据值。
    ·My SQL/Pig:
    SELECT * FROM TMP_TABLE A LEFT JOIN TMP_TABLE_2 B ON A.AGE = B.AGE; UNION SELECT * FROM TMP_TABLE A LEFT JOIN TMP_TABLE_2 BON A.AGE = B.AGE;
    UNION SELECT * FROM TMP_TABLE A RIGHT JOIN TMP_TABLE_2 BON A.AGE = B.AGE;

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);

  • 半联接
    ·半联接是 Hive 所特有的。Hive 不支持 IN 操作,但拥有替代方案:left semi join,称为 半联接。
    ·半联接是指所连接的表不能在查询列中,只能出现在 on 子句中。
    ·Hive QL:
    SELECT userinfo * FROM userinfo LEFT SEMI 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;

  1. 解释 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;

  2. Hive 的组成
    Hive 包括以下组件:

  • 用户接口 —— 包括 Hive SheII、Thrift 客户端、Web 端口等
  • Thrift 服务器 —— 当 Hive 以服务器模式运行时,可以作为 Thrift 服务器供客户端 连接
  • 解析器 —— 解析并执行 Hive QL 语句,由解释器、编译器、优化器和执行器组成
  • 元数据库 —— 存储 Hive 元数据,通常使用 MySQL 或 Derby 数据库
  • Hadoop —— 数据仓库存储于 HDFS 上,并由 MapReduce 执行解析器生成的查询计 划
  1. Hive 可以提供哪些形式的操作模式
  • Hive Shell 服务
  • JDBC/ODBC 服务
  • Thrift 服务
  • Web 接口服务
  1. 简述 HiveQL
  • Hive QL 是一种类 SQL 语言,它与大部分 SQL 语法兼容,并且有些特点是 SQL 所无 法企及的:
    ·例如多表查询、支持 CREATE TABLE AS SELECT 和集成 MapReduce 脚本等。
  • 当然,Hive QL 并不安全支持 SQL 标准:
    ·例如它不支持更新操作和事务,它的子查询和联结(Join)操作也很局限。
    ·这些是由其底层 Hadoop 平台决定的。
  1. Hive 数据存放位置的类型
  • 基本数据类型
    类型 大小 描述 示例
    TINYINT 1 字节(8 位) 有符号整数 1
    SMALLINT 2 字节(16 位) 有符号整数 1
    INT 4 字节(32 位) 有符号整数 1
    BIGINT 8 字节(64 位) 有符号整数 1
    FLOAT 4 字节(32 位) 单精度浮点数 1.0
    DOUBLE 8 字节(64 位) 双精度浮点数 1.0
    BOOLEAN - true/false true
    STRING <=2GB 字符串 ‘qu’, “si”
  • 复杂数据类型
    类型 大小 描述 示例
    ARRAY 不限 一组有序字段。字段的类型必须相同 Array(1,2)

MAP
不限 一组无序的键值对。键的类型必须是原子 的,值可以是任何类型,同一个映射的键的 类型必须相同,值得类型也必须相同
Map(‘a’,1,‘b’,2)
STRUCT 不限 一组命名的字段,字段类型可以不同 Struct(‘a’,1,1,0)

  1. 给出创建表、修改表、删除表的 HiveQL 语句 创建表:
    CREATE TABLE UserInfo(id INT , name STRING) ROW FORMAT DELIMITED FIELEDS

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 上直接删除数据文件)

  1. Hive 服务器的启动方法
    hive --service hiveserver -p 10021 hiveserver 指明启动 JDBC 服务
    -p 选项用于指明服务器对外提供的访问端口

  2. 写出 Hive-JDBC 的编程步骤

  • 使用 DriverManager 类注册特定于厂商的 JDBC 驱动程序
    Class.forName(“org.apache.hadoop.hive.jdbc.HiveDriver”);
  • 建立与 DBMS 的会话连接
    String url=“jdbc:hive://localhost:10021”/default";
    Connection con=DriverManager.getConnection(url, “root”,"1234 ");
  • 创建 Hives QL 查询包裹对象
    Statement stmt=con.createStatement();
  • 提交查询并接收结果
    String sql=“SELECT * FROM student”; ResuItSet res=stmt.executeQuery(sql);
  • 从结果包裹对象中提取数据
    使用 ResultSet 接口中的方法提取查询返回的数据。 while(res.next()){ System.out.println(res.getString(1)+"\t"+
    res.getString(2)+ ‘’\t’’+res.getInt(3)+ “\t”+res.getString(4));
    }
  1. HBase(无限大表数据库)的主要特点 Big Table 的主要特点
  • 非关系型数据库
  • 一个稀疏的、分布式的、持久化存储的多维度排序 Map
  • 设计目标是快速且可靠地处理 PB 级别的数据,并能够部署到上千台机器上

HBase 数据库的主要特点 大:一个表可以包含上亿行,上百万列;
面向列:面向列(族)的存储和权限控制,列(族)的独立检索; 稀疏:对于为空(Null)的列,不占用存储空间

  1. HBase 的表结构(P252) HBase(以表的形式存储数据)的组织形式: 每个表由行和列组成;
    每行由“行键”来唯一标识; 每个列属于一个特定的列族(Column Family); 表中由行和列确定的存储单元称为一个单元(Cell); 每个单元保存了同一份数据的多个版本,由时间戳(TimeStamp)来标识
  • 创建表:
    create <表名>,<列族名 1>,<列族名 2>, … ,<列族名 n> 表名:student 列族名:name,profile,score hbase(mian):001:0>create ‘student’, ‘name’, ‘profile’, ‘score’
  • 列出表结构
    describe <表名> hbase(mian):002:0>describe ‘student’ Table stuent is ENABLED
    COLUMN FAMLIES DESCRIPTION
  • 设计表

行键可以是任意字符串(最大长度 64KB),并按照字典序列进行存储。

你可能感兴趣的:(hadoop,hdfs,hive)