大数据技术基础习题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, 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, 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 , IntWritable, Text, IntWritable> {
     

	private IntWritable result = new IntWritable();
	
public CourseReducer () {
     }

public void reduce(Text key, Interable values, Reducer, 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;

你可能感兴趣的:(大数据技术基础)