1. 描述如何安装配置Hadoophtml
参考:http://www.cnblogs.com/xia520pi/archive/2012/04/08/2437875.htmljava
2. 列出正常工做的Hadoop集群中,Hadoop都启动哪些进程,描述功能node
3. 启动时报以下错误如何解决mysql
ERROR org-apache.hadoop.hdfs-server.namenode.NameNode org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Direction /tmp/Hadoop-root/dfs/name is in an inconsisrtent state: storage directory dose not existent or is not accessible.程序员
…...sql
问题分析:NameNode没有正常启动数据库
解决方法:apache
① hadoop namenode –format(格式化namenode):若是每次都要执行这个命令才能启动namenode,那是万万不行的编程
② /tmp目录下的文件是临时文件,hadoop会将各类信息存到/tmp下,便会被按期清除,为避免这种状况,在hdfs-site.xml中添加属性dfs.name.dir设置值为想存的目录。服务器
4. Hadoop命令(进入Hadoop_HOME目录,/etc/profile中配置)
①启动Hadoop;sh bin/start-all.sh
②关闭Hadoop:sh bin/stop-all.sh
③文件操做 :sh bin/hadoop fs ...(后面命令操做基本同Linux)
1)查看文件列表
查看hdfs中/user/admin/aaron目录下的文件:sh bin/hadoop fs -ls /user/admin/aaron
2)建立文件目录
hdfs中/user/admin/aaron目录下再新建一个叫作newDir的新目录:sh bin/hadoop fs -mkdir /user/admin/aaron/newDir
3)删除文件
删除hdfs中/user/admin/aaron目录下一个名叫needDelete的文件:sh bin/hadoop fs -rm /user/admin/aaron/needDelete
删除hdfs中/user/admin/aaron目录以及该目录下的全部文件 :sh bin/hadoop fs -rmr /user/admin/aaron
4)上传文件
上传一个本机/home/admin/newFile的文件到hdfs中/user/admin/aaron目录下:sh bin/hadoop fs –put /home/admin/newFile/user/admin/aaron/
5)下载文件
下载hdfs中/user/admin/aaron目录下的newFile文件到本机/home/admin/newFile中 :sh bin/hadoop fs –get /user/admin/aaron/newFile /home/admin/newFile
④MapReduce Job操做
1)提交MapReduce Job
运行一个/home/admin/hadoop/job.jar的MapReduce Job:sh bin/hadoop jar /home/admin/hadoop/job.jar [jobMainClass] [jobArgs]
2)杀死某个正在运行的Job:(hadoop job -list, 假设Job_Id为:job_201005310937_0053)sh bin/hadoop job -kill job_201005310937_0053
⑤添加datanode节点(在datanode中启动执行启动datanode命令):sh hadoop-daemon.sh start datanode
⑥删除datanode节点(namenode上):sh hadoop dfsadmin -refreshServiceAcl
5. Hadoop调度器
Hadoop调度器将系统中空闲的资源按必定策略分配给做业,比较流行的三种调度器有:默认调度器FIFO,计算能力调度器Capacity Scheduler,公平调度器Fair Scheduler
①默认调度器FIFO
hadoop中默认的调度器,采用先进先出的原则,按照到达时间的前后选择被执行的做业。
② 计算能力调度器Capacity Scheduler
支持多个队列,做业先按照运行任务数和计算资源的比值选择小(资源占用少)的队列,在每一个队列里在按照FIFO调度策略。
③ 公平调度器Fair Scheduler
每一个队列中的资源可配置,同一队列中的做业公平共享队列中全部资源
6. 当前日志采样格式为
a,b,c,d
b,b,f,e
a,a,c,f
写出MapReduce程序,计算第四列每一个元素出现的个数
1 package org.apache.hadoop.WordCount1; 2
3 import java.io.IOException; 4
5 import org.apache.hadoop.conf.Configuration; 6
7 import org.apache.hadoop.fs.Path; 8
9 import org.apache.hadoop.io.IntWritable; 10
11 import org.apache.hadoop.io.Text; 12
13 import org.apache.hadoop.mapreduce.Job; 14
15 import org.apache.hadoop.mapreduce.Mapper; 16
17 import org.apache.hadoop.mapreduce.Reducer; 18
19 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 20
21 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 22
23 import org.apache.hadoop.util.GenericOptionsParser; 24
25 public class WordCount { 26
27 public static class MyMapper 28
29 extends Mapper<Object, Text, Text, IntWritable>{ 30
31 public void map(Object key, Text value, Context context) 32
33 throws IOException, InterruptedException { 34
35 String[] split = value.toString().split("\t"); 36
37 for(String word:split){ 38
39 context.write(split[3], 1); 40
41 } 42
43 } 44
45 } 46
47 } 48
49 public static class MyReducer 50
51 extends Reducer<Text,IntWritable,Text,IntWritable> { 52
53 private IntWritable result = new IntWritable(); 54
55 public void reduce(Text key, Iterable<IntWritable> values,Context context) 56
57 throws IOException, InterruptedException { 58
59 int sum = 0; 60
61 for (IntWritable val : values) { 62
63 sum += val.get(); 64
65 } 66
67 result.set(sum); 68
69 context.write(key, result); 70
71 } 72
73 } 74
75
76
77 public static void main(String[] args) throws Exception { 78
79 Configuration conf = new Configuration(); 80
81 Job job = new Job(conf, "word count"); 82
83 job.setJarByClass(WordCount1.class); 84
85 job.setMapperClass(MyMapper.class); 86
87 job.setReducerClass(MyReducer.class); 88
89 job.setOutputKeyClass(Text.class); 90
91 job.setOutputValueClass(IntWritable.class); 92
93 FileInputFormat.addInputPath(job, new Path(otherArgs[0])); 94
95 FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); 96
97 JobClient.runJob(conf); 98 } 99
100 }
7. 你认为用Java、Streaming、pipe方式开发MapReduce。各有哪些优缺点
Java:可实现复杂逻辑,编程繁琐
Streaming:优势:支持多种语言编写程序,直接;缺点:细节没法控制(不能写自定义的partitioner, combiner,writablecomparable等),慢(交换过程不如Java API直接)
Pipe: 容许C++程序员编写mapreduce程序,它容许用户混用C++和Java的RecordReader, Mapper, Partitioner,Rducer和RecordWriter等五个组件。
Hadoop Streaming:
http://dongxicheng.org/mapreduce/hadoop-streaming-programming/
Hadoop Pipes:
http://dongxicheng.org/mapreduce/hadoop-pipes-programming/
8. Hive有哪些方式保存元数据,各有哪些特色(链接到数据库的三种模式及存储方式)
Hive的metastore组件是hive元数据集中存放地。Metastore组件包括两个部分:metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如hive默认的嵌入式磁盘数据库derby,还有mysql数据库。Metastore服务是创建在后台数据存储介质之上,而且能够和hive服务进行交互的服务组件。
1) 单用户模式:内存数据库derby,较小,不经常使用
2) 多用户模式:本地MySQL,较经常使用
3) 远程服务器模式:远程mysql,不经常使用
9. Hadoop实现join的几种方法
1) reduce side join
reduce side join是一种最简单的join方式,其主要思想以下:
在 map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签(tag),比 如:tag=0表示来自文件File1,tag=2表示来自文件File2。即:map阶段的主要任务是对不一样文件中的数据打标签。
在reduce阶段,reduce函数获取key相同的来自File1和File2文件的value list, 而后对于同一个key,对File1和File2中的数据进行join(笛卡尔乘积:在数学中,两个集合X和Y的笛卡尓积表示为X × Y,第一个对象是X的成员而第二个对象是Y的全部可能的有序对的其中一个成员。假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)})。即:reduce阶段进行实际的链接操做。
2) map side join
之因此存在reduce side join,是由于在map阶段不能获取全部须要的join字段,即:同一个key对应的字段可能位于不一样map中。Reduce side join是很是低效的,由于shuffle阶段要进行大量的数据传输。
Map side join是针对如下场景进行的优化:两个待链接表中,有一个表很是大,而另外一个表很是小,以致于小表能够直接存放到内存中。这样,咱们能够将小表复制多份,让每一个map task内存中存在一份(好比存放到hash table中),而后只扫描大表:对于大表中的每一条记录key/value,在hash table中查找是否有相同的key的记录,若是有,则链接后输出便可。
PS:MySQL Join
① Inner Join:SELECT * FROM TableA INNERJOIN TableB
产生的结果是A、B表的交集
②Full Outer join:SELECT * FROM TableA FULLOUTER JOIN TableB
产生的结果是A、B表的并集,对于没有匹配的记录,则会以null作为值
③Left outer join
SELECT * FROM TableA LEFTOUTER JOIN TableB ONTableA.name =TableB.name产生A的彻底集,B中匹配的则有值,没匹配的NULL取代
SELECT* FROM TableA LEFTOUTER JOIN TableB ONTableA.name=TableB.nameWHERE TableB.id IS null
产生在A表有在B表没有的集合
SELECT * FROM TableA FULLOUTER JOIN TableB ONTableA.name =TableB.nameWHERE TableA.id IS null ORTableB.id IS null
产生A表和B表都没有出现的 即AB表除了交集的集合
10. Hadoop怎样实现二级排序
在Hadoop中,默认状况下是按照key进行排序,若是要按照value进行排序怎么办?
有两种方法进行二次排序,分别为:buffer and in memory sort和 value-to-key conversion。
buffer and in memory sort
主要思想是:在reduce()函数中,将某个key对应的全部value保存下来,而后进行排序。 这种方法最大的缺点是:可能会形成out of memory。
value-to-key conversion
主要思想是:将key和部分value拼接成一个组合key(实现WritableComparable接口或者调 setSortComparatorClass函数),这样reduce获取的结果即是先按key排序,后按value排序的结果,须要注意的是,用户须要本身实现Paritioner,以便只按照key进行数据划分。Hadoop显式的支持二次排序,在Configuration类中有个 setGroupingComparatorClass()方法,可用于设置排序group的key值
http://dongxicheng.org/mapreduce/hadoop-join-two-tables/