版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目1Hadoop基础知识1.Hadoop是由哪个项目发展来的?答:2002年,开源组织Apache成立开源搜索引擎项目Nutch,但在Nutch开发过程中,始终无法有效地将计算任务分配到多台计算机上。2004年前后,Google陆续发表三大论文GFS、MapReduce和BigTable。于是Apache在其Nutch里借鉴了GFS和MapReduce思想,实现了Nutch版的NDFS和MapReduce。但Nutch项目侧重搜索,而NDFS和MapReduce则更像是分布式基础架构,因此,2006年,开发人员将NDFS和MapReduce移出Nutch,形成独立项目,称为Hadoop。2.Hadoop主要有哪些版本?答:目前Hadoop的发行版除了Apache的开源版本之外,还有华为发行版、Intel发行版、Cloudera发行版(CDH)、Hortonworks发行版(HDP)、MapR等,所有这些发行版均是基于ApacheHadoop衍生出来的。ApacheHadoop版本分为两代,第一代Hadoop称为Hadoop1.0,第二代Hadoop称为Hadoop2.0。第一代Hadoop包含三个大版本,分别是0.20.x,0.21.x和0.22.x,其中,0.20.x最后演化成1.0.x,变成了稳定版,而0.21.x和0.22.x增加了NameNodeHA等新的重大特性。第二代Hadoop包含两个版本,分别是0.23.x和2.x,它们完全不同于Hadoop1.0,是一套全新的架构,均包含HDFSFederation和YARN两个系统,相比于0.23.x,2.x增加了NameNodeHA和Wire-compatibility两个重大特性。3.简要描述Hadoop的体系结构,分析1.x与2.x版本间的区别。答:Hadoop2.x相比Hadoop1.x最大的变化是增加了YARN组件,YARN是一个资源管理和任务调度的框架,主要包含三大模块:ResourceManager(RM)、NodeManager(NM)和ApplicationMaster(AM)。其中,ResourceManager负责所有资源的监控、分配和管理;ApplicationMaster负责每一个具体应用程序的调度和协调;NodeManager负责每一个节点的维护。对于所有的applications,RM拥有绝对的控制权和对资源的分配权。而每个AM则会和RM协商资源,同时和NodeManager通信来执行和监控task。4.简要描述分布式系统的优点有哪些。答:分布式系统的主要优点是:(1)经济:微处理机提供了比大型主机更好的性能价格比(2)速度:分布式系统总的计算能力比单个大型主机更强(3)固有的分布性:一些应用涉及空间上分散的机器(4)可靠性:如果一个机器崩溃,整个系统还可以运转(5)渐增:计算能力可以逐渐增加项目2Hadoop安装与配置练习安装VMware和CentOS?略。参考第19页至第27页练习下载并安装Hadoop系统?略。参考第30页至第40页简要描述配置伪分布Hadoop和分布式Hadoop的主要区别。略。练习启动和停止Hadoop?答:运行sbin目录下的start-all.sh完成hadoop的启动,运行stop-all.sh停止Hadoop。项目3HDFS技术HDFS的特点有哪些?答:HDFS的优点包括(1)适合大数据处理:(2)高容错性(3)适合批处理(4)通过移动计算而不是移动数据(5)采用流式文件访问(6)可构建在廉价机器上;HDFS的缺点包括:(1)低延时数据访问很吃力(2)小文件存储并不擅长(3)不能完成并发写入和文件随机修改。HDFS是如何读取数据的?答:HDFS数据读取使用HDFS提供的客户端开发库进行读取。(1)程序向远程的Namenode发起RPC请求;(2)Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的datanode地址;(3)客户端拿到block的位置信息后调用FSDataInputStreamAPI的read方法并行的读取block信息,block默认有3个副本,所以每一个block只需要从一个副本读取就可以。客户端开发库会选取离客户端最接近的datanode来读取block。(4)读取完当前block的数据后,关闭与当前的datanode连接,并为读取下一个block寻找最佳的datanode;返回给客户端。(5)当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。(6)读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读取。元数据节点、数据节点和辅助元数据节点的功能分别是什么?答:元数据节点NameNode是管理者,负责管理文件系统名字空间和控制外部客户机的访问。DataNode的功能包括:(1)保存Block,每个块对应一个元数据信息文件。(2)启动DataNode线程的时候会向NameNode汇报Block信息;(3)通过向NameNode发送心跳保持与其联系(3秒一次),如果NameNode10分钟没有收到DataNode的心跳,则认为其已经丢失,并将其上的Block复制到其他DataNode。辅助元数据节点SecondaryNameNode,会周期性的将EditsLog文件中记录对HDFS的操作合并到一个FsImage中文件中,然后清空EditsLog文件。NameNode的重启就会加载最新的一个FsImage文件,并重新创建一个EditsLog文件来记录HDFS操作HDFSShell的命令格式是什么样的?答:文件系统shell包含各种shelllike命令,可以直接和HDFS文件系统进行交互,就像对其它系统的支持一样。所有的FSshell命令使用的都是URI路径作为参数。URI格式是scheme://authority/path。URI的scheme是hdfs,表示分布式HDFS系统,scheme是file,表示本地系统。项目4MapReduce技术简述MapReduce的执行过程?答:MapReduce作业的执行过程是:在客户端启动一个作业。向JobTracker请求一个JobID。将运行作业所需要的资源文件复制到HDFS上,包括MapReduce程序打包的jar文件、配置文件和客户端计算所得的计算划分信息。JobTracker接收到作业后,将其放在一个作业队列里,等待作业调度器对其进行调度,当作业调度器根据自己的调度算法调度到该作业时,会根据输入划分信息为每个划分创建一个map任务,并将map任务分配给TaskTracker执行。TaskTracker每隔一段时间会给JobTracker发送一个心跳,告诉JobTracker它依然在运行。当JobTracker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。当JobTracker查询状态时,它将得知任务已完成,便显示一条消息给用户。简述MReduce的输入格式?答:使用MapReduce编程,只需定义好map和reduce函数输入和输出<key.value>对的类型。Hadoop根据输入文件的格式RecordReader来解析文件中的<key,value>对,默认情况下,一行代表一个<key,value>对。InputFormat是一个接口,定义了输入文件如何被Hadoop分块。getSplit(JobContextcontext)方法负责将一个大数据在逻辑上拆分成一个或多个InputSplit。createRecordReader(inputSplit,TaskAttemptContextcontext)方法根据InputSplit定义的方法,返回一个能够读取分片记录的RecordReader。设置MapReduce的输入格式可以在驱动类中使用Job对象的setInputFormat()方法完成。简述shuffile的过程?shuffle过程实际上是个数据处理过程,即Map输出结果进行分区、分组、排序和归纳,然后作为输入传给reducer。分区:用于划分键值空间。Partitioner负责控制Map输出结果key的分割。key(或者一个key子集)被用于产生分区。分组:reduce方法每次接收的是一组具有相同key的value值,所以每个reduce方法每次只能对相同key所对应的值进行计算。但有时用户会期望不同的key所对应的value值能在一次reduce方法调用时进行操作,这时就需要用户进行自定义分组的操作了。排序:排序(sort)是MapReduce计算过程的核心部分。用户可以根据自己的需求自定义排序形式,也可以使用默认的字典排序。自定义排序时需要继承WritableComparator类,重写compare方法,对于接收key的类型,可通过当前类构造方法的super来指定。归纳:一台可以存在很多Map任务,同时不同的Map任务也可能存在于不同机器上,而相对Map较少的Reduce任务,会从多个已经分好区、排好序的Map任务输出中拖拽至本地Reduce所在JVM相应的分区中。拖拽回来的数据由于来自多个不同的Map输出,所以通常会存在相同的Key的<key,value>值,他们会按顺序归并。这个过程并不是等待所有Map任务完成才进行,而是通过参考合并因子属性值进行多轮归并操作,最后一趟归并可能来自内存也可能来自磁盘。在Reduce函数中,默认每次处理一组具有相同key的value值,最终将计算结果输出至文件系统中。项目5HadoopI/O操作简述SequenceFile和MapFile的存储过程?答:SequenceFile完成新记录的添加操作API为fileWriter.append(key,value);SequenceFile的格式是由一个header跟随一个或多个记录组成。前三个字节是一个BytesSEQ代表着版本号,同时header也包括key的名称,valueclass,压缩细节,metadata,以及Syncmarkers。Syncmarkers的作用在于可以读取任意位置的数据。(2)MapFile是排序后的SequenceFile,其目录结构由data和index两部分组成。index作为文件的数据索引,在MapFile被访问的时候,索引文件会被加载到内存,通过索引映射关系可迅速定位到指定Record所在文件位置。简述数据块检测程序的流程?答:数据块检测程序原理是在DataNode节点上开启一个后台线程,用来定期验证存储在其之上的所有块,防止物理介质出现损减情况儿造成数据损坏。DataBlockScanner被DataNode节点用来检测它所管理的所有Block数据块的一致性,因此,对已DataNode节点上的每一个Block,它都会每隔scanPeriodms利用Block对应的校验和文件来检测该Block一次,看看这个Block的数据是否已经损坏。DataBlockScanner在其内部使用了日志记录器来持久化保存每一个Block上一次扫描的时间,DataNode节点在启动之后通过日志文件来恢复之前所有Block的有效时间。另外,DataNode对Block的验证还会在向某一个客户端传送Block的时候来更行该Block的扫描时间(REMOTE_READ方式),这是因为DataNode向客户端传送一个Block的时候要必须校验该数据块。Hadoop中都有哪些压缩格式?答:HDFS常见的压缩格式为GZIP、BZIP2、LZO、Snappy和LZ4。gzip格式是同时使用了LZ77算法和哈夫曼编码的一个无损数据压缩算法。它是一个标准压缩算法,压缩和解压缩可以在自由、通用的压缩库zlib上找到。bzip2是JulianSeward开发并按照自由软件/开源软件协议发布的数据压缩算法及程序。bzip2比传统的gzip或者zip的压缩效率高。LZO是Lempel-Ziv-Oberhumer的缩写。该算法是无损压缩算法,参考实现程序是线程安全的,如果LZO文件已经预处理过程中被索引了,那么LZO文件是可切分的。LZ4是面向字节的LZ77压缩方案,是无损数据压缩算法。他的压缩率稍逊于LZO,但它的压缩速度和解压缩速度比LZO要快。Hadoop序列化的目的是什么?序列化就是将结构化的数据转化为字节流,以便进行网络传输或磁盘存储。通过序列化,把一个对象经I/O流传输到目标位置。项目6HBase技术简述HBase体系架构?HBase采用Master/Slave架构搭建集群。由一个HMaster服务器带多个HRegionServer服务器组成。HMaster负责管理所有的HRegionServer,每个HRegionServer负责存储许多Hregion(HBase逻辑表的分块)。HBase使用Zookeeper存放集群的元数据和状态信息,同时实现HMaster的容错处理。Hmaster是HBase集群的主节点,主要负责HBase中Table和Region的管理工作,它会通知每个HRegionServer要维护哪些HRegion。在HBase集群中可以启动多个HMaster,一般情况下会启动两个HMaster,非活动的HMaster会定期和活动HMaster通信以获取最新状态,从而保证自己是实时更新的。HRegion是HBase集群上分布式存储和负责均衡的最小单位,与HDFS中文件块的概念类型。HBase使用表(Table)来组织和管理数据,当表的大小超过阈值时,HBase会根据RowKey(行的主键)按字典顺序将表水平切割成多个HRegion。HRegionServer一般和DataNode在同一台机器上,以实现数据的本地性。一般情况下,一台机器上只运行一个HRegionServer。HRegionServer负责数据的读写服务,用户通过HRegionServer可以实现对数据的访问,同时HRegionServer还管理本地Region和Table中的数据。ZooKeeper存储了HBase中两张特殊的数据表的位置,分别是-ROOT-(根数据表)和.META.(元数据表)HBase中表、行、列族分别是什么?HBase中表是在schema定义时被预先声明的。HBase中的行是逻辑上的行,物理上模型上行是按列族(colomnfamily)分别存取的。HBase中的列被分组为列族。列族的所有列成员具有相同的前缀。练习HBase的安装过程?略参考第112页至第115页使用HBaseAPI完成创建表和删除表的操作?packagecom.simple.create{publicstaticvoidmain(String[]args)throwsIOException{//1.配置文件设置//创建用于客户端的配置类实例Configurationconfig=HBaseConfiguration.create();//设置连接zookeeper的地址//hbase客户端连接的时zookeeperconfig.set(“hbase.zookeeper.quorum”,”:2181”);//2.表描述相关信息//创建表描述器并命名表明为account1HTableDescriptortableDesc=newHTableDescriptor(TableName,valueOf(”account1”));//创建列族描述器并命名一个列族名为baseInfoHColumnDescriptorcolumnDesc1=newHColumnDescriptor(“baseinfo”);//设置列族的最大版本数columnDesc1.setMaxVersions(5);HColumnDescriptorcolumnDesc2=newHColumnDrscriptor(“contacts”);columnDesc2.setMaxversions(3);tableDesc.addFamily(columnDesc1):tableDesc.addFamily(columnDesc2)://3.实例化HBaseAdmin、创建表//根据配置文件创建HBaseAdmin对象HBaseAdminhbaseAdmin=newHBaseAdmin(config);hbaseAdmin.createTable(tableDesc);//释放资源hbaseAdmin.close();}}项目7ZooKeeper技术1.简述ZooKeeper的特征和架构。(1)ZooKeeper的数据模型。ZooKeeper拥有一个层次的命名空间。这就是一个文件系统,只不过文件系统中的文件还可以具有目录的功能。另外,指向节点的路径必须用规范的绝对路径来表示,并用斜线“/”来分割。(2)ZooKeeper会话及状态。ZooKeeper客户端通过句柄ZooKeeper服务建立一个会话。这个会话一旦创建,句柄将以CONNECTING状态开始启动。客户端尝试连接到其中一个ZooKeeper服务器,如果连接成功,它的状态将变为CONNECTED。一般情况下只有这两种状态。如果一个可恢复的错误发生,如会话终结或认证失败,或者应用程序明确地关闭了句柄,句柄将会转入关闭状态。为了创建一个客户端会话,应用程序必须提供一个由主机(IP和主机名)和端口所组成的连接字符串,这个字符串标识了要连接的目标主机及主机端口。ZooKeeper客户端将选择服务器列表中的任意一个服务器并尝试连接。如果连接失败,那么客户端将自动尝试连接服务器列表中的其他服务器,直到连接成功。(3)ZooKeeperwatches。ZooKeeper可以为所有的读操作设置watch,这些读操作包括exists()、getChildren()及getData()。watch事件是一次性的触发器,当watch的对象状态发生改变时,将会触发此对象上所设置的watch对应的事件。(4)ZooKeeperACL。ZooKeeper使用ACL来对Znode进行访问控制。ACL的实现和UNIX文件访问许可非常相似。它使用许可位来对一个节点的不同操作进行运行或禁止的权限控制。但是,和标准UNIX不同的是,ZooKeeper节点有user、group和world三种标准模式,且没有节点所有者的概念。(5)ZooKeeper的一致性保证。ZooKeeper的读写速度非常快。另外,在进行读操作时,ZooKeeper依然能够为旧数据提供服务。这些都是由ZooKeeper所提供的一致性保证的。2.简述ZooKeeperd的工作原理和数据模型。ZooKeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议称为Zab协议。Zab协议有两种模式,它们分别是恢复模式和广播模式。当服务器启动或在Leader崩溃后,Zab就进入恢复模式,当Leader被选举出来,且大多数Server完成了和Leader的状态同步以后,恢复模式就结束了。状态同步保证了Leader和Server具有相同的系统状态。一旦Leader与多数的Follower进行了状态同步,它就可以开始广播消息,即进入广播状态。这时当一个Server加入ZooKeeper服务中时,它会在恢复模式下启动,发现Leader,并和Leader进行状态同步。待到同步结束,它也参与消息广播。ZooKeeper服务一直维持在Broadcast状态,直到Leader崩溃或失去大部分的Follower支持。广播模式需要保证提议(proposal)被按顺序处理,因此,ZooKeeper采用了递增的事务id号(zxid)来保证。所有的提议(proposal)都在被提出时加上了zxid。实现中zxid是一个64位的数字,高32位是epoch,用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch;低32位是个递增计数。当Leader崩溃或Leader失去大多数的Follower时,zk进入恢复模式,恢复模式需要重新选举出一个新的Leader,让所有的Server都恢复到一个正确的状态。3.简述搭建ZooKeeper环境的过程,尝试配置伪分布系统和分布式系统。略参考第132页至第134页4.简述ZooKeeper的命令有哪些。略参考第135页至第139页项目8分布式数据仓库技术Hive简述Hive的优点和局限。答:Hive具有如下特点。
(1)Hive框架的优点。
①更友好的接口:操作接口采用类SQL的语法,提供快速开发的能力。
②更低的学习成本:避免了写MapReduce,减少开发人员的学习成本。
③可扩展性、横向扩展:为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS
作为存储系统)。一般情况下,不需要重启服务,Hive就可以自由地扩展集群的规模,还支
持用户自定义函数。
④延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
⑤良好的容错性:可以保障即使有节点出现问题,SQL语句仍可完成操作。
⑥统一的元数据管理:metastore包括数据库、表、字段分区等详细信息。
(2)Hive存在的局限性。
①Hive不支持记录级别的更新、插入和删除等操作,但是用户可以通过查询生成新表
或将查询结果导入文件中(本项目选择的hive-2.3.2版本支持记录级别的插入操作)。
②Hive的查询延时很高,因为MapReduceJob的启动过程消耗很长时间,所以不能用
在交互查询系统中。
③Hive不支持事务,Hive主要用来做OLAP(联机分析处理),而不是OLTP(联机事务
处理)。
Hive并不适合那些需要低延迟的应用,因此,Hive的最佳使用场合是大数据集的批处
理作业。
2.简述Hive服务组成。答:Hive内部自带了许多服务,可以在运行时用--service选项来明确指定使用什么服务。
如果需要查询Hive内部有多少服务,可以用--servicehelp选项来查看帮助。通过查询可以看到输出项ServiceList里面显示出Hive支持的服务列表,列表里有beeline、cli、help、hiveburninclient、hiveserver2、hiveserver、hwi、jar、lineage、metastore、metatool、orcfiledump、rcfilecat、schemaTool、version共15个内置服务。
3.练习Hive的安装过程。答:Hive安装的前提条件为:(1)一台配置好Hadoop环境的虚拟机。(2)存在Hadoop账户。Hive安装步骤如下:
(1)从Hive的官网()下载Hive安装包,目前最新的安装包
是apache-hive-3.1.0-src.tar.gz,本书为了和Hadoop2.8.5更好地兼容,使用hive-2.3.3
版本。
(2)在/home/gznc-hadoop/目录下新建一个文件夹/hive28/,以此来保存将要解压安装
的hive文件(若Hadoop之前都是在root用户下安装运行的,则安装也要在root用户下进
行;若之前Hadoop在其他用户下安装运行,则不用在root用户下安装部署)。
[gznc-hadoop@masterDesktop]$suroot
Password:
[root@masterDesktop]#cd/home/gznc-hadoop/
[root@mastergznc-hadoop]#mikdir/hive28
(3)将安装包apache-hive-2.3.3-src.tar.gz移动到/hive28文件下。
[root@mastergznc-hadoop]#cd/home/gznc-hadoop/Desktop/
[root@masterDesktop]#mv./apache-hive-2.3.3-src.tar.gz/home/gznc-hadoop/hive28/
Hadoop系统搭建及项目实践
(4)解压。
[root@masterDesktop]#cd/home/gznc-hadoop/hive28/
[root@masterhive28]#tar-zxvfapache-hive-2.3.3-src.tar.gz
4.Hive是如何操作和管理数据的?其管理数据的方式有哪些?答:HiveQL是一种类似SQL的语言,它与大部分的SQL语法兼容,但是并不完全支持
SQL标准,如HiveQL不支持更新操作,也不支持索引和事务,它的子查询和join操作也很
有限。这是因其底层依赖于Hadoop云平台这一特性决定的,但其有些特点是SQL所无法企及的。Hive有三种数据管理方式,分别为CLI(命令行)方式、Web界面方式和Hive远程服务
启动方式。
5.使用HiveQL语言实现对Hive表的创建和表中数据的添加、删除等操作。答:创建表:
Hive创建表的语法如下。
create[temporary][external]table[ifnotexists][dbnametablename--(Note:temporary
availableinHive2.3.3andlater)]
[(col_namedata_type[commentcol_comment],…)]
[commenttablecomment]
[partitionedby(col_namedata_type[commentcol_comment],…)]
[clusteredby(col_name,col_name,…)[sortedby(col_name[asc|desc],…)]intonum_buckets
buckets]
[skewedby(col_name,col_name,…)]
on((col_value,col_value,…),(col_value,col_value,…),…)
[storedasdirectories]
[rowformatrow_format]
[storedasfile_format]
[storedbyˈˈ[withserdeproperties(…)]]
[locationhdfs_path]
[tblproperties(property_name=property_value,…)]
[asselect_statement];修改表:
修改表包括重命名表、添加列、更新列等操作。
重命名表语法如下。
altertabletable_namerenametonew_table_name
重命名表示例:
∥将emp表改名为emp_new
altertableemprenametoemp_new
∥将emp_new表重新改名为emp
altertableemp_newrenametoemp;
添加/更新列语法如下。
altertabletable_nameaddreplacecolumns(col_namedata_type[commentcol_comment],…)
注意:add代表新增一个字段,字段位置在所有列后面(partition列前面),replace则表
示替换表中所有字段。
添加列示例:
∥创建测试表
createtablestudent(idint,ageint,namestring)rowformatdelimitedfieldsterminatedbyˈ\tˈ;
∥查看表结构
descstudent;
∥添加一列address
altertablestudentaddcolumns(addressstring);
∥查看表结构,可以看到已经添加了address这一列
descstudent;
∥更新所有的列
altertablestudentreplacecolumns(idint,namestring);
∥查看表结构,现在student表中只有id和name两列
descstudent;项目9分布式数据分析工具Pig1.Pig的功能有哪些?答:Pig是用来处理大规模数据的高级查询语言,结合Hadoop使用可以在处理海量数据时达到事半功倍的效果,为MapReduce框架提供了一套类SQL的数据处理语言,称为PigLatin。使用PigLatin可以对数据进行加载、排序、过滤、求和、分组、关联、存储操作,Pig也可以由用户自定义一些函数对数据集进行操作,PigLatin和传统的SQL很相似,但整体上来看,SQL是一种声明式语言,而PigLatin属于过程式语言。
2.Pig中的null功能是如何定义的?答:Pig中的null表示未知或不存在,null可以与任何类型的数据执行相关运算,所得到的
结果为null。例如,执行下面的操作。
grunt>A=loadˈdataˈas(a,b,c);
grunt>B=foreachageneratea+null;
执行结果B中为null。判断一个表达式是否为null,可以使用子句“isnull”或“isnotnull”。3.Pig程序的运行方式分为几种?答:Pig程序运行方式分为以下三种。
1.Pig脚本文件
可以将相关Pig命令存储在后缀名为.pig的脚本文件中(后缀名.pig可选,主要用作区
分用途)。Pig脚本文件可以位于本地文件系统中,也可以位于分布式集群环境下。例如,当前一个名为user_name.pig的脚本文件,用于取/etc/passwd文件中第一列的值,即当前
Linux系统中所有用户的用户名。脚本文件user_name.pig的内容为
/*user_name.pig*/
lines=loadˈpasswdˈusingPigStorageˈ(ˈ:);--loadthepasswdfile
users=foreachlinesgenerate$0asuser_name;--extracttheusernames
storeusersintoˈuser_name.pigˈ;--writetheresultstoafilenameuser_name.pig2.Pig交互式shell
grunt为执行Pig命令的交互式shell,用户在Linux命令提示符下输入pig-xlocal(本
地模式)或pig-xmapreduce(MapReduce模式,或直接输入Pig命令)即可进入grunt。在
grunt提示符下可以执行Pig所有相关操作命令。例如,
(1)使用fs-ls命令查看Pig位于HDFS上home目录下的所有文件或文件夹。
(2)使用ls命令,功能与fs-ls命令一样,但显示的是绝对路径。
(3)使用shls命令可以查看当前工作目录(执行Pig命令进入grunt的目录)下的所有
文件或文件夹。
(4)执行execuser_name.pig命令,以批处理方式执行脚本文件中的所有操作。
(5)执行runuser_name.pig命令,以单独解析文件中每条命令的方式执行每一步操作。
(6)在grunt提示符下以交互式方式执行每一步操作:grunt>lines=loadˈpasswdˈusingPigStorageˈ(ˈ:);
grunt>users=foreachlinesgenerate$0asuser_name;
grunt>dumpusers;
最后一条dump命令用于输出users变量中的结果到用户终端。
此外,grunt还支持Linuxshell中的命令自动补全、命令历史记录和可编辑功能。例
如,在grunt提示下输入“lo”,然后按Tab键,会在“grunt>lo”下一行输出“loadlong”等相
关命令;若在当前grunt>提示符按上下键可以显示历史相关操作命令,并可对历史命令进行手动编辑操作。
3.嵌入Pig命令到宿主程序
可以将Pig操作嵌入Python、Java等高级程序语言中,正如在Java程序中通过JDBC
使用SQL一样,在Java程序中使用PigServer类可以执行Pig操作,甚至可以使用PigRunner访问grunt。在Java程序中嵌入Pig操作,需要执行如下操作。
(1)确定pig-x.y.z.jar文件(x.y.z为版本号)位于CLASSPATH变量中。
(2)创建一个PigServer实例。
(3)通过调用PigServer实例的registerQuery()方法执行Pig操作。
(4)调用PigServer实例的openIterator()方法或store()方法获取处理结果。
(5)若程序中需要使用自定义函数(UDF),使用PigServer实例的registerJar()方法进
行声明。例如,myfunc()函数位于/home/pig/test.jar文件中,若要在Java程序中使用
myfunc()功能,则需要使用pigServer.registerJar("/home/pig/test.jar")进行声明,
pigServer为PigServer类的实例。
(6)编译Java程序,命令为javac-cp<path>/pig-x.y.z.jarJavaProgram.java。
(7)若编译Java程序成功,则运行Java程序,命令为Java-cp<path>/pig-x.y.z.jar
JavaProgram.java。4.Pig的数据模式是什么?其主要作用是什么?答:Pig模式(schema)用于为Pig所操作目标数据的一个或多个字段(field,数据字段在文
件中默认以Tab键作为分隔符,可以使用usingPigStorage()子句对分隔符进行解析)指定
别名和数据类型,便于Pig行(如执行load操作时)对数据类型进行检查并快速做出相应的处理,提高操作的执行速度。Pig数据指定模式是可选的,若未对数据指定任何模式,则Pig默认所有数据的类型为bytearray类型。数据的模式也称为关系模式(relationschema),其定义由load、stream、foreach操作的as子句指定。项目10Hadoop与RDBMS数据迁移工具Sqoop简述Sqoop的安装和配置过程。答:目前,Sqoop最新的稳定版本是Sqoop1.4.7,Sqoop2的最新版本是
Sqoop1.99.7。1.99.7与1.4.7不兼容且功能不完整,不适用于生产部署。本书以Sqoop
1.4.7为例进行讲解。安装Sqoop的前提是已经具备Java和Hadoop的环境。下载Sqoop,首先打开官网/,进入/dyn/closer.lua/sqoop/页
面,下载后需要解压。执行如下解压缩命令:tar-zxvfsqoop-1.4.7.tar.gz。1.配置环境变量
编辑/etc/profile文件,添加SQOOP_HOME变量,并将$SQOOP_HOME/bin添加到
PATH变量中,编辑方法很多,可以将profile文件下载到本地进行编辑,也可以直接用
gedit工具进行编辑。
添加的内容如下。
exportSQOOP_HOME=/opt/sqoop/sqoop-1.4.7
exportCLASS_PATH=.:${JAVA_HOME}/lib:${HIVE_HOME}/lib:$CLASS_PATH
exportPATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${HIVE_HOME}/
bin:${SQOOP_HOME}/bin:$PATH
/etc/profile文件编辑完成后,执行如下命令。
source/etc/profile
2.Sqoop配置文件修改
首先,进入/opt/sqoop/sqoop-1.4.7/conf目录下,将sqoop-env-template.sh文件复制
一份,并取名为sqoop-env.sh。
cpsqoop-env-template.shsqoop-env.sh
然后编辑新建的sqoop-env.sh文件,编辑方法有很多,可以下载到本地编辑,也可以使
用gedit工具进行设置。在该文件末尾添加如下内容。
exportHADOOP_COMMON_HOME=/opt/hadoop/hadoop-2.8.5
exportHADOOP_MAPRED_HOME=/opt/hadoop/hadoop-2.8.5
exportHIVE_HOME=/opt/hive/apache-hive-2.3.3-bin
其中,上面的路径为自己的Hadoop路径和Hive路径。
3.将MySQL驱动包复制到Sqoop的lib下
cpmysql-connector-java-5.1.40-bin.jarapps/sqoop-1.4.7/lib/
4.验证
至此,Sqoop配置基本完成,验证安装是否成功。2.简述Sqoop所支持的相关功能。答:Sqoop核心功能有两个,分别是导入、迁入数据和导出、迁出数据。其中,导入数据可以将MySQL或Oracle中的数据导入Hadoop的HDFS、Hive、HBase等数据存储系统;导出数据是从Hadoop的文件系统中导出数据到MySQL等关系型数据库中。
3.简述Hive、Pig和Sqoop三者之间的关系。答:Hive、Pig和Sqoop都是Apache平台下的项目,Hive和Pig两者有很多共同点,都拥有自己的表达语言,它们的目的是将MapReduce的实现进行简化,并且读、写、操作数据都基于HDFS分布式文件系统。Sqoop工具则是对HDFS数据和RDBMS数据进行迁移。语言:两者都有对应的操作语言,编写的程序最后都转换为MapReduce程序运行。
(2)表概念:Hive和Sqoop中有一个“表”的概念,但Pig中没有表的概念。
(3)远程服务:Hive可以依托Thrift启动一个远程服务,提供远程调用,Pig中没有这
样的功能,但是Sqoop有远程服务。
(4)自定义函数:三者都可根据用户需求来自定义函数。
(5)shell命令行:都有其对应的shell命令行。
(6)Web访问接口:Hive支持通过浏览器访问,可以在Web页面中编写HiveQL语句,
Pig不支持Web访问。
(7)JDBC/ODBC:Hive可以通过JDBC/ODBC远程访问Hive,Sqoop也可以通过JDBC
远程访问Hive、MySQL等,远程需要启动Hive。
Pig是一种数据流语言,用来快速、轻松地处理大量的数据。Pig可以非常方便地处理
HDFS和HBase的数据,和Hive一样,Pig可以非常高效地处理其需要做的,通过直接操作
Pig查询可以节省大量的时间。当想在数据上做一些转换,并且不想编写MapReducejobs
时,就可以用Pig。
Hive现在适合在离线下进行数据的操作,Hive在Hadoop中扮演数据仓库的角色,允
许使用类似于SQL的语法进行数据查询。与Pig一样,Hive的核心功能是可扩展的。相比Hive,Pig较轻量,它的主要优势是相比于直接使用HadoopJavaAPI,可大幅削减代码量。
Sqoop的本质是迁移数据,就是把Sqoop的迁移命令转换成MR程序;Hive工具本质
是执行计算,依赖于HDFS存储数据,把SQL转换成MR程序;而Pig是一种数据流语言,
用来快速、轻松地处理大量的数据。
4.安装MySQL数据库和Sqoop,实现MySQL数据库和HDFS之间的数据导入和导出
操作。答:导入见:P20510.3.2,导出见:P21110.3.3项目11Hadoop实时数据处理技术简述Storm和Storm-YARN的区别。答:Storm有以下优点。
(1)编程简单。Storm为大数据的实时计算提供了一些简单优美的原语,这大大降低了
开发并行实时处理任务的复杂性,可以快速、高效地开发应用。
(2)多语言支持,除了用Java实现Spout和Bolt外,还可以使用Python等任何其他编
程语言来完成这项工作,这一切得益于Storm的多语言协议。
(3)支持水平扩展。在Storm集群中真正运行Topology的主要有三个实体:工作进程、线程和任务。Storm集群中的每台机器上都可以运行多个工作进程,每个工作进程又可创
建多个线程,每个线程可以执行多个任务,任务是真正进行数据处理的实体,我们开发的
Spout、Bolt就是作为一个或者多个任务的方式执行的。因此,计算任务在多个线程、进程和服务器之间并行进行,支持灵活的水平扩展。
(4)容错性强。如果在消息处理过程中出了一些异常,Storm会重新安排这个出问题的
处理单元,Storm保证一个处理单元永远运行(除非显式地杀死这个处理单元)。
(5)可靠性的消息保证。Storm可以保证Spout发出的每条消息都能被“完全处理”。
(6)快速的消息处理。用Netty作为底层消息队列,保证消息能被快速处理。
(7)本地模式。支持快速编程测试。
Storm有很多使用场景,如实时分析、在线机器学习、持续计算、分布式RPC、ETL等。相比于将Storm部署到一个独立的集群中,基于HadoopYARN实现Storm主要有以
下优点。
(1)弹性计算资源。将Storm运行到YARN上后,Storm可与其他应用程序(如
MapReduce批处理应用程序)共享整个集群中的资源,这样,当Storm负载骤增时,可动态
地为它增加计算资源,而当负载减小时,可释放部分资源,从而将这些资源暂时分配给负载
更重的批处理应用程序。
(2)共享底层存储。Storm可与运行在YARN上的其他框架共享底层的一个HDFS存储
系统,可避免多个集群带来的维护成本,同时避免数据跨集群复制带来的网络开销和时间
延迟。
(3)支持多版本。可同时将多个Storm版本运行在YARN上,避免一个版本一个集群
带来的维护成本。
(4)整体架构的统一。
2.简述Storm集群组成及对应的功能。答:Storm集群中存在两种类型的节点:运行Nimbus服务的主节点和运行Supervisor服务的工作节点,并且Storm集群由一个主节点和多个工作节点组成。Nimbus和Supervisor之间的通信依靠ZooKeeper来完成。画图见P218图11-1ApacheStorm的结构
(1)Nimbus:负责资源分配、任务调度及故障检测。
(2)Supervisor:负责监听、接收Nimbus分配的任务,启动和停止属于自己管理的
Worker进程。
(3)Worker:运行具体处理组件逻辑的进程,由Supervisor负责启动,一个Worker中可
以有多个Executor线程。
(4)Executor:每个Executor都会启动一个消息循环线程,用于接收、处理和发送消息,
每个Executor中又可包含一个或多个Task。
(5)Task:Storm中的最小处理单元,Worker中每一个Spout/Bolt的线程称为一个
Task。它是Topology组件诸多并行度中的一个,在Storm0.8之后,Task不再与物理线程
对应,同一个Spout/Bolt的Task可能会共享一个物理线程,该线程称为Executor。
Storm实现的一些特征决定了它的性能和可靠性的,Storm使用Netty传送消息,这就
消除了中间的排队过程,使得消息能够直接在任务自身之间流动,在消息的背后是一种用于序列化和反序列化Storm的原语类型的自动化且高效的机制。
3.简述Storm数据流对象的组成成分并说明各成分的功能。答:Storm提供处理流转换的基本原语是Spout和Bolt,实现Spout和Bolt提供的接口来运行应用程序相关的逻辑。Spout生产tuple发送给Bolt处理,Bolt处理过的tuple也可以再次发送给其他tuple处理,最后存入容器。(1)Topology:Storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻
辑上的一个拓扑结构。
(2)Spout:在一个Topology中产生源数据流的组件。通常情况下,Spout会从外部数据源
中读取数据,然后转换为Topology内部的源数据。Spout是一个主动的角色,其接口中有个nextTuple()函数,Storm框架会不停地调用此函数,用户只要在其中生成源数据即可。
(3)Bolt:在一个Topology中接收数据然后执行处理的组件。Bolt可以执行过滤、函数
操作、合并、写数据库等任何操作。Bolt是一个被动的角色,其接口中有个execute(tuple
input)函数,在接收到消息后会调用此函数,用户可以在其中执行自己想要的操作。
(4)tuple:一次消息传递的基本单元。本来应该是一个key-value的map,但是由于各个
组件间传递的tuple的字段名称已经事先定义好,所以tuple中只要按序填入各个value就
行了,所以就是一个valuelist。(5)Stream:源源不断传递的Tuple就组成了Stream。
(6)StreamGrouping:消息的Partition方法。Storm中提供若干种实用的Grouping方
式,包括shuffle、fieldshash、all、global、none、direct和localOrShuffle等。
4.简述Spark的组成结构及运行流程。答:Spark架构的组成如P227图11-7所示。
(1)ClusterManager:在StandAlone模式中即为Master主节点,控制整个集群,监控
Worker。在YARN模式中为资源管理器。
(2)Worker节点:从节点,主要负责控制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ICU专科护士测试题库及答案
- 2026年应急救援员培训考试题库(含答案)
- 2026年机械员考试题库(含答案)
- 2026年风控招聘笔试题目及答案
- 2026年初级银行从业资格《风险管理》真题卷(后附答案解析)
- 2025年四级人力资源管理师真题及答案解析
- 年广州市八年级生物地理学业水平考试原创仿真卷(含答案解析、读图题与评分细则)
- 中医药临床循证丛书带状疱疹及后遗神经痛阅读随笔
- 关于2026年创新大赛结果公布的通知3篇范本
- 关于2026年物流费用核算方式的确认函8篇范本
- 2026年四川资中县重龙映象文化旅游开发集团有限责任公司人员招聘28人笔试历年常考点试题专练附带答案详解
- 西藏交通发展集团有限公司招聘笔试真题2025
- 2026年建筑八大员(机械员)岗位考试试题及答案
- 屋面防水施工方案
- 阿里云邮箱购买合同
- 2024年高考政治试卷(贵州)(解析卷)
- 职业教育政策题目及答案
- 2026 第六届“四川工匠杯”职业技能大赛 餐厅服务赛项 理论考试参考题库 含答案
- 医院评残疾工作制度
- DB53∕T 1255-2024 山坝地区建设项目节地评价技术规程
- 2022年辽宁省大连市沙河口区小升初数学试卷
评论
0/150
提交评论