大数据复习练习题
填空题
- (数据)过观察、实验或计算得出的结果。(消息)是较为宏观的概念,它是由数据的有序排列组合而成。
- 大数据的数据类型包括(结构化数据)和(非结构化数据),前者占10%左右,后者占90%左右。
- HDFS伪分布式配置中属性dfs.replication的值应该设置为(1)
- DFS的数据复制采用了(流水线复制)的策略
- 为了解决单点故障问题,HDFS2.0采用了(高可用)结构。
- Base中需要根据表的行键的值对表进行分区,每个行区间构成一个分区,被称为(Region)
- (云计算)数据提供了技术基础,(物联网)是大数据重要的数据来源。
- 在每个Region服务器上只有的是(HLog)
- ARN中的(ApplicationMaster)负责执行以下任务:为应用程序申请资源,并分配给内部任务;任务调度、监控与容错。
简答题
- 在Hadoop伪分布式安装后,执行
Start-dfs.sh
命令,会启动哪几个线程?每个线程分别有什么作用?
- NameNode:hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有元数据。
- SecondaryNameNode:提供周期检查点和清理任务。
- DataNode:负责管理连接到节点的存储。每个存储数据的节点运行一个datanode守护进程。
- Zookeeper在HBase中有哪些作用?1. 协调服务:管理HBase集群中各个节点的状态信息,协调各个节点之间的通信和协作,确保各个节点之间的一致性和可靠性。2. 元数据管理:HBase的元数据信息存储在ZooKeeper中,HBase可以通过ZooKeeper来获取和维护元数据信息。3. 选主机制:HBase集群的Master节点是由ZooKeeper进行选举产生的,ZooKeeper会负责监控Master节点的状态,并在Master节点发生故障时进行重新选举。> > - 保存 Meta 表位置、记录并监听 Master 主备状态
- 百度云数据库支持关系型数据库MySQL,分布式非关系型数据库存储服务MongoDB、键值型非关系型数据库Redis,请分别说明这三种数据库是如何运用CAP理论的?
CAP是一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。
- MySQL(关系型数据库)- MySQL单机部署时,MySQL可以保证一致性和可用性,不涉及分区容错性。集群部署,MySQL倾向于保证一致性和可用性,牺牲一定的分区容错性。
- MongoDB(分布式非关系型数据库)- MongoDB默认设计为满足CAP理论中的AP(可用性和分区容错性)。MongoDB通过副本集来保证高可用性,副本集中的每个节点都可以处理读取请求,即使某些节点之间通信出现问题(分区),系统仍然可以继续运行。
- Redis(键值型非关系型数据库)- Redis可以为单机或主从复制模式。在单实例中,Redis同时保证一致性和可用性。在集群模式下,Redis倾向于保证AP(可用性和分区容错性)。
简单分析题
- 请分别对下面的命令进行解释
- hdfs dfs -ls /- 列出HDFS根目录下的所有文件和目录。
- hdfs dfs -mkdir -p /tmp/test_hdfs- 在HDFS中创建目录。
-p
参数允许创建多级目录,如果父目录不存在则会一并创建。在/tmp
下创建名为test_hdfs
的目录 - hdfs dfs -put testfile.zip /tmp/test_hdfs- 将本地文件系统中的
testfile.zip
文件上传到HDFS的/tmp/test_hdfs
目录下。 - create ‘exam_info’, ‘info’- HBase shell命令,创建一个名为
exam_info
的表,并定义一个名为info
的列族。 - put ‘exam_info’, ‘123001’, ‘info:name’, ‘Elle’- HBase shell命令,向
exam_info
表中插入数据。将123001
作为行键,info:name
作为列名,Elle
作为该列的值。 - get ‘exam_info’, ‘123001’, ‘info:name’- 从
exam_info
表中检索数据。获取行键为123001
的记录中,列名为info:name
的值。 - scan ‘exam_info’, {COLUMNS => ‘info:name’}- 扫描
exam_info
表,只返回列族info
中列名为name
的数据。 - delete all ‘exam_info’, ‘123001’- 删除
exam_info
表中行键为123001
的所有数据。 - HDFS代码命令解释题目
FileSystem fs =FileSystem.get(newURI("hdfs://192.168.1.2:9000"),newConfiguration(),"root"); fs.deleteOnExit("/java");
- 获取HDFS文件系统的实例,指定HDFS的URI和配置。deleteOnExit
方法,标记文件系统中的/java
目录,在JVM退出时自动删除该目录。 - Hbase命令解释题
Configuration configuration =HBaseConfiguration.create();Connection connection =ConnectionFactory.createConnection(configuration);Table table = connection.getTable(TableName.valueOf("student"));Put put =newPut("2022001".getBytes()); put.addColumn("info".getBytes(),"name".getBytes(),"Kate".getBytes()); table.put(put); table.close();
1. 首先创建一个HBase配置对象,然后创建一个HBase连接。2. 接着,它获取一个student
的表的实例,创建一个Put
对象来插入数据,指定行键为2022001
,列族为info
,列名为name
,值为Kate
。3. 最后,将这个Put
对象通过table.put()
方法插入到表中,并关闭表连接。
程序设计题
- 公司为购物平台,业务量非常庞大,现在需要为一个公司建立大数据平台,全面支持公司业务,需提供以下业务:实时的订单处理,时间跨度在数百毫秒到数秒之间;基于历史订单的查询,时间跨度在数分钟之间;对于平台各种数据的批处理分析,提供较复杂的业务,时间跨度在数小时之间。请结合所学的知识,提供一个该大数据平台的设计方案,请从数据库选择,数据采集开始设计,画出该平台的层次结构图,并说明每层有什么作用,采用什么工具或技术。
- 数据库选择
- 实时订单处理:使用Kafka和Flink,因为它们支持高吞吐量的实时数据流处理。
- 历史订单查询:使用HBase,分布式的、可扩展的大数据存储系统,适合随机、实时读写访问模式。
- 批处理分析:使用Hadoop和Hive,适合处理大规模数据集的批处理任务。
- 数据采集
- 使用Flume或Logstash进行日志和事件数据的收集。
- 使用Sqoop进行关系数据库数据的导入。
- 层次结构图
#mermaid-svg-va2z6HbgHHbu8cN2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-va2z6HbgHHbu8cN2 .error-icon{fill:#552222;}#mermaid-svg-va2z6HbgHHbu8cN2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-va2z6HbgHHbu8cN2 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-va2z6HbgHHbu8cN2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-va2z6HbgHHbu8cN2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-va2z6HbgHHbu8cN2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-va2z6HbgHHbu8cN2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-va2z6HbgHHbu8cN2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-va2z6HbgHHbu8cN2 .marker.cross{stroke:#333333;}#mermaid-svg-va2z6HbgHHbu8cN2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-va2z6HbgHHbu8cN2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-va2z6HbgHHbu8cN2 .cluster-label text{fill:#333;}#mermaid-svg-va2z6HbgHHbu8cN2 .cluster-label span{color:#333;}#mermaid-svg-va2z6HbgHHbu8cN2 .label text,#mermaid-svg-va2z6HbgHHbu8cN2 span{fill:#333;color:#333;}#mermaid-svg-va2z6HbgHHbu8cN2 .node rect,#mermaid-svg-va2z6HbgHHbu8cN2 .node circle,#mermaid-svg-va2z6HbgHHbu8cN2 .node ellipse,#mermaid-svg-va2z6HbgHHbu8cN2 .node polygon,#mermaid-svg-va2z6HbgHHbu8cN2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-va2z6HbgHHbu8cN2 .node .label{text-align:center;}#mermaid-svg-va2z6HbgHHbu8cN2 .node.clickable{cursor:pointer;}#mermaid-svg-va2z6HbgHHbu8cN2 .arrowheadPath{fill:#333333;}#mermaid-svg-va2z6HbgHHbu8cN2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-va2z6HbgHHbu8cN2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-va2z6HbgHHbu8cN2 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-va2z6HbgHHbu8cN2 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-va2z6HbgHHbu8cN2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-va2z6HbgHHbu8cN2 .cluster text{fill:#333;}#mermaid-svg-va2z6HbgHHbu8cN2 .cluster span{color:#333;}#mermaid-svg-va2z6HbgHHbu8cN2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-va2z6HbgHHbu8cN2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
Flume/Sqoop
数据源
数据采集层
实时处理层
数据存储层
业务应用层
数据分析层
- 各层作用及采用工具或技术
- 数据采集层- 作用:负责从各种数据源(如日志文件、数据库、API等)收集数据。- 工具/技术:Flume, Sqoop,。
- 实时处理层- 作用:处理实时数据流,进行订单处理等实时业务。- 工具/技术:Kafka, Flink。
- 数据存储层- 作用:存储结构化和非结构化数据,支持快速查询和历史数据分析。- 工具/技术:HBase, HDFS。
- 业务应用层- 作用:提供用户界面和业务逻辑处理,如订单管理、用户界面等。- 工具/技术:Web应用框架(如Spring Boot), RESTful API。
- 数据分析层- 作用:进行复杂的数据分析和报告生成,支持决策制定。- 工具/技术:Hive, Spark。
程序设计题
- 下列是一组数据,该数据包含两列,分别为姓名和出生年份,请统计出有哪些年份及数据中该年份的出生人数。原始数据:
Amber 2000
Lily 2001
Lesile 2001
Kate 2000
Mike 2001
Jason 1999
Rachel 1999
- 参考代码
//ExamMapper.javaimportjava.io.IOException;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Mapper;publicclassExamMapperextendsMapper<LongWritable,Text,Text,IntWritable>{//记住父类参数@Overrideprotectedvoidmap(LongWritable key,Text value,Context context)throwsIOException,InterruptedException{//将年份提取作为key,value为1Text year =newText();//keyString str = value.toString();//整行内容String[] parts = str.split(" ");// 数据以空格分隔String birthYear = parts[1];// 出生年份是第二个字段
year.set(birthYear);
context.write(year,newIntWritable(1));//key为年份 value默认为1}}
//ExamReducer.javaimportjava.io.IOException;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Reducer;publicclassExamReducerextendsReducer<Text,IntWritable,Text,IntWritable>{//记住父类参数@Overrideprotectedvoidreduce(Text key,Iterable<IntWritable> values,Context context)throwsIOException,InterruptedException{//将map结果根据key值分类,将value值相加int sum =0;for(IntWritable val : values){
sum += val.get();}
context.write(key,newIntWritable().set(sum));//根据key值 将vlaue相加}}
//ExamJob.javaimportorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;publicclassExamJob{publicstaticvoidmain(String[] args)throwsException{//获取作业对象Job job =Job.getInstance(newConfiguration());//设置主类
job.setJarByClass(ExamJob.class);//关联mapper和reducer
job.setMapperClass(ExamMapper.class);
job.setReducerClass(ExamReducer.class);//设置mapper输出的k、v
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);//设置reducer输出的k、v
job.setOutputKeyClass(Text.class);//文本
job.setOutputValueClass(IntWritable.class);//int//设置job输入、输出FileInputFormat.setInputPaths(job,newPath("file:///source.txt"));FileOutputFormat.setOutputPath(job,newPath("file:///output"));System.exit(job.waitForCompletion(true)?0:1);}}
版权归原作者 缘友一世 所有, 如有侵权,请联系我们删除。