大数据技术基础习题1
Posted Lora鳃鳃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据技术基础习题1相关的知识,希望对你有一定的参考价值。
名称节点包含的两大核心数据结构是什么?分别有什么作用?名称节点是如何知道具体一个数据块存储在哪个数据节点上的?
两大核心数据结构:FsImage和EditLog
作用:1.FsImage维护文件系统树以及文件树中所有的文件和文件夹的元数据
2. EditLog记录所有针对文件的创建、删除、重命名等动态操作
由名称节点把这些映射信息保留在内存中,当数据节点加入HDFS集群时,数据节点会把自己所包含的块列表告知给名称节点,此后会定期执行这种告知操作,以确保名称节点的块映射是最新的。
HDFD的主从结构集群中NameNode是单节点,会存在什么隐患?你有什么解决方案?
隐患:
名称结点能够容纳的对象的个数会受到内存空间大小的限制
整个分布式文件系统的吞吐量,受限于单个名称节点的吞吐量
无法对不同应用程序进行隔离
一旦名称节点发生故障,会导致整个集群变得不可用
解决方案:
利用Zookeeper,QJM实现高可用。两个NameNode,一个处于active状态,另一个处于standby状态。这两台NameNode以第三方的文件系统QJM为中介实现通信,即使ActiveNameNode挂了,StandbyNameNode也会完美接手他的工作。Zookeeper负责分布式协调,控制整个集群有且仅有一个active master。
利用Hadoop提供的Shell命令完成下列任务:
1、将HDFS中的文件“/user/hadoop/text1.txt”的内容输出到终端。
2、显示HDFS中的文件“/user/hadoop/text1.txt”的读写权限、大小、创建时间、路径等信息。
3、输出HDFS的目录“/user/hadoop"下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归遍历输出该目录下所有文件相关信息。
4、在HDFS中创建目录“/user/hadoop/”,如果目录不存在则自动创建相应目录。
5、删除HDFS中的目录“/user/hadoop”,无论目录是否为空均执行强制删除操作。
6、将本地文件“/usr/tmp/local.txt”追加到HDFS文件text1.txt的结尾。
7、删除HDFS中的指定文件text1.txt。
8、将HDFS中的文件text1.txt从/user/hadoop路径移动到/user/hadoop/tmp路径下且重命名为text2.txt。
1. hadoop fs -cat /user/hadoop/text1.txt
2. hadoop fs -ls /user/hadoop/text1.txt
3. hadoop fs -ls -R /user/hadoop
4. hadoop fs -mkdir -p /user/hadoop/
5. hadoop fs -rm -R /user/hadoop
6. hadoop fs -appendToFile /usr/tmp/local.txt /user/hadoop/text1.txt
7. hadoop fs -rm /user/hadoop/text1.txt
8. hadoop fs -mv /user/hadoop/text1.txt /user/hadoop/tmp/text2.txt
有学生及其选课的原始输入数据如下(学号、课程名):
20150101 x
20150101 y
20150102 y
20150103 x
20160104 z
20160105 x
20160105 z
20160106 x
20160106 y
20170107 x
20170108 y
请统计每门课程的选课人数。
要求:
1 . 请写出自定义CourseMapper的map方法和CourseReducer的reduce方法;
2 . 根据上述数据和代码,写出map任务的输出;
3 . 根据上述数据和代码,写出reduce任务的输入、输出;
4 . 如果采用HiveQL实现,请写出相关的SQL语句。
(1)
public static class CourseMapper extends Mapper<Object, Text, Text, IntWritable>{
private static final IntWritable one = new IntWritable();
private Text word = new Text();
public CourseMapper(){}
//map 方法的生命周期: 框架每传一行数据就被调用一次
//key : 这一行的起始点在文件中的偏移量
//value : 这一行的内容
@Override
public void map (Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
String itr = new String (value.toString());
String[] str = s.split(“ “);
this.word.set (str[1]);
context.write(this.word, one);
}
}
public static class CourseReducer extends Reducer <Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
public CourseReducer () {}
public void reduce(Text key, Interable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context ccontext) throws IOException, InterruptedException {
int sum = 0;
IntWritable val;
for (Iterator i$ = values.Iterator(); i$.hasNext(); sum += val.get()){
val = (IntWritable)i$.next;
}
This.result.set(sum);
Context.write(key, this.result);
}
}
(2)map的直接输出结果为:
<”x”, 1>
<”y”, 1>
<”y”, 1>
<”x”, 1>
<”z”, 1>
<”x”, 1>
<”z”, 1>
<”x”, 1>
<”y”, 1>
<”x”, 1>
<”y”, 1>
(3)reduce的输入为:
<”x”, <1,1,1,1,1>>
<”y”, <1,1,1,1>>
<”z”, <1,1>>
reduce的输出为:
<”x”, 5>
<”y”, 4>
<”z”, 2>
(4)HiveQL语句:
hive>create database hive;
hive>use hive;
hive>create table if not exists course(student_id string, course_name string) location '/usr/local/hive/myApp/course';
hive>load data local inpath "/usr/local/data" overwrite into table course;
hive>select course_name, count(course_name) from Course
group by course_name;
以上是关于大数据技术基础习题1的主要内容,如果未能解决你的问题,请参考以下文章