大数据面试题—6

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 20:01   913   0

3.14
1、一个Hadoop环境,整合了HBase和Hive,是否有必要给HDFS和Hbase都分别配置压缩策略?请给出对压缩策略的建议。
hdfs在存储的时候不会将数据进行压缩,如果想进行压缩,我们可以在向hdfs上传数据的时候进行压缩。
1)、 采用压缩流

2)、 采用序列化文件

hbase为列存数据库,本身存在压缩机制,所以无需设计。

3、简述Hbase性能优化的思路

1)、 在库表设计的时候,尽量考虑rowkey和columnfamily的特性
2)、 进行hbase集群的调优:见hbase调优

4、简述Hbase filter的实现原理是什么?结合实际项目经验,写出几个使用filter的场景。

hbase的filter是通过scan设置的,所以是基于scan的查询结果进行过滤。
1)、在进行订单开发的时候,我们使用rowkeyfilter过滤出某个用户的所有订单
2)、在进行云笔记开发时,我们使用rowkey过滤器进行redis数据的恢复。

5、ROWKEY的后缀匹配怎么实现?例如ROWKEY是yyyyMMDD-UserID形式,如果要以UserID为条件查询数据,怎样实现。
使用rowkey过滤器实现
6、简述Hive中的虚拟列作用是什么,使用它的注意事项。
Hive提供了三个虚拟列:
INPUT__FILE__NAME
BLOCK__OFFSET__INSIDE__FILE
ROW__OFFSET__INSIDE__BLOCK
但ROW__OFFSET__INSIDE__BLOCK默认是不可用的,需要设置hive.exec.rowoffset为true才可以。可以用来排查有问题的输入数据。
INPUT__FILE__NAME, mapper任务的输出文件名。
BLOCK__OFFSET__INSIDE__FILE, 当前全局文件的偏移量。对于块压缩文件,就是当前块的文件偏移量,即当前块的第一个字节在文件中的偏移量。
hive> SELECT INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, line
> FROM hive_text WHERE line LIKE '%hive%' LIMIT 2;
har://file/user/hive/warehouse/hive_text/folder=docs/
data.har/user/hive/warehouse/hive_text/folder=docs/README.txt 2243
har://file/user/hive/warehouse/hive_text/folder=docs/
data.har/user/hive/warehouse/hive_text/folder=docs/README.txt 3646
7、如果要存储海量的小文件(大小都是几百K~几M),请简述自己的设计方案。
1)、将小文件打成har文件存储
2)、将小文件序列化到hdfs中
8、有两个文本文件,文件中的数据按行存放,请编写MapReduce程序,找到两个文件中彼此不相同的行。
写个mapreduce链 用依赖关系,一共三个mapreduce,第一个处理第一个文件,第二个处理第二个文件,第三个处理前两个的输出结果,
第一个mapreduce将文件去重,第二个mapreduce也将文件去重,第三个做wordcount,wordcount为1的结果就是不同的。

4. 共同朋友

mapred找共同朋友,数据格式如下
usr:friend,friend,friend...
---------------
A:B,C,D,E,F
B:A,C,D,E
C:A,B,E
D:A,B,E
E:A,B,C,D
F:A
第一个字母表示本人,其他是他的朋友,找出共同朋友的人,和共同朋友是谁。
思路:例如A,他的朋友是B\C\D\E\F\,那么BC的共同朋友就是A。所以将BC作为key,将A作为value,在map端输出即可!其他的朋友循环处理。代码如下:

  1. import java.io.IOException;
  2. import java.util.Set;
  3. import java.util.StringTokenizer;
  4. import java.util.TreeSet;
  5. import org.apache.hadoop.conf.Configuration;
  6. import org.apache.hadoop.fs.Path;
  7. import org.apache.hadoop.io.Text;
  8. import org.apache.hadoop.mapreduce.Job;
  9. import org.apache.hadoop.mapreduce.Mapper;
  10. import org.apache.hadoop.mapreduce.Reducer;
  11. import org.apache.hadoop.mapreduce.Mapper.Context;
  12. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  13. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  14. import org.apache.hadoop.util.GenericOptionsParser;
  15. public class FindFriend {
  16. public static class ChangeMapper extends Mapper<Object, Text, Text,Text>{
  17. @Override
  18. public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
  19. StringTokenizer itr = new StringTokenizer(value.toString());
  20. Text owner = new Text();
  21. Set<String> set = new TreeSet<String>();
  22. owner.set(itr.nextToken());
  23. while (itr.hasMoreTokens()) {
  24. set.add(itr.nextToken());
  25. }
  26. String[] friends = new String[set.size()];
  27. friends = set.toArray(friends);
  28. for(int i=0;i<friends.length;i++){
  29. for(int j=i+1;j<friends.length;j++){
  30. String outputkey = friends[i]+friends[j];
  31. context.write(new Text(outputkey),owner);
  32. }
  33. }
  34. }
  35. }
  36. public static class FindReducer extends Reducer<Text,Text,Text,Text>{
  37. public void reduce(Text key, Iterable<Text> values, Context context) throws IOException,InterruptedException {
  38. String commonfriends ="";
  39. for (Text val : values) {
  40. if(commonfriends == ""){
  41. commonfriends = val.toString();
  42. }else{
  43. commonfriends = commonfriends+":"+val.toString();
  44. }
  45. }
  46. context.write(key, new Text(commonfriends));
  47. }
  48. }
  49. public static void main(String[] args) throws IOException,InterruptedException, ClassNotFoundException{
  50. Configuration conf = new Configuration();
  51. String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
  52. if (otherArgs.length < 2) {
  53. System.err.println("args error");
  54. System.exit(2);
  55. }
  56. Job job = new Job(conf, "word count");
  57. job.setJarByClass(FindFriend.class);
  58. job.setMapperClass(ChangeMapper.class);
  59. job.setCombinerClass(FindReducer.class);
  60. job.setReducerClass(FindReducer.class);
  61. job.setOutputKeyClass(Text.class);
  62. job.setOutputValueClass(Text.class);
  63. for (int i = 0; i < otherArgs.length - 1; ++i) {
  64. FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
  65. }
  66. FileOutputFormat.setOutputPath(job,new Path(otherArgs[otherArgs.length - 1]));
  67. System.exit(job.waitForCompletion(true) ? 0 : 1);
  68. }
  69. }

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP