`
zhouchaofei2010
  • 浏览: 1083093 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转)hadoop多文件格式输入

 
阅读更多

hadoop多文件格式输入,一般可以使用MultipleInputs类指定不同的输入文件路径以及输入文件格式

 

原文:http://blog.csdn.net/fansy1990/article/details/26267637

 

版本:

CDH5.0.0 (hdfs:2.3,mapreduce:2.3,yarn:2.3)

hadoop多文件格式输入,一般可以使用MultipleInputs类指定不同的输入文件路径以及输入文件格式。

比如现在有如下的需求:

现有两份数据:

phone:

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. 123,good number  
  2. 124,common number  
  3. 125,bad number  

user:

 

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. zhangsan,123  
  2. lisi,124  
  3. wangwu,125  


现在需要把user和phone按照phone number连接起来,得到下面的结果:

 

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. zhangsan,123,good number  
  2. lisi,123,common number  
  3. wangwu,125,bad number  

那么就可以使用MultipleInputs来操作,这里把user和phone上传到hdfs目录中,分别是/multiple/user/user , /multiple/phone/phone。

 

设计的MultipleDriver如下:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package multiple.input;  
  2.   
  3. import org.apache.hadoop.conf.Configuration;  
  4. import org.apache.hadoop.conf.Configured;  
  5. import org.apache.hadoop.fs.Path;  
  6. import org.apache.hadoop.io.NullWritable;  
  7. import org.apache.hadoop.io.Text;  
  8. import org.apache.hadoop.mapreduce.Job;  
  9. import org.apache.hadoop.mapreduce.lib.input.MultipleInputs;  
  10. import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;  
  11. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
  12. import org.apache.hadoop.util.Tool;  
  13. import org.apache.hadoop.util.ToolRunner;  
  14. //import org.slf4j.Logger;  
  15. //import org.slf4j.LoggerFactory;  
  16. /** 
  17.  * input1(/multiple/user/user): 
  18.  * username,user_phone 
  19.  *   
  20.  * input2(/multiple/phone/phone): 
  21.  *  user_phone,description  
  22.  *   
  23.  * output: username,user_phone,description 
  24.  *  
  25.  * @author fansy 
  26.  * 
  27.  */  
  28. public class MultipleDriver extends Configured implements Tool{  
  29. //  private  Logger log = LoggerFactory.getLogger(MultipleDriver.class);  
  30.       
  31.     private String input1=null;  
  32.     private String input2=null;  
  33.     private String output=null;  
  34.     private String delimiter=null;  
  35.       
  36.     public static void main(String[] args) throws Exception {  
  37.         Configuration conf=new Configuration();  
  38. //      conf.set("fs.defaultFS", "hdfs://node33:8020");    
  39. //        conf.set("mapreduce.framework.name", "yarn");    
  40. //        conf.set("yarn.resourcemanager.address", "node33:8032");   
  41.           
  42.         ToolRunner.run(conf, new MultipleDriver(), args);  
  43.     }  
  44.   
  45.     @Override  
  46.     public int run(String[] arg0) throws Exception {  
  47.         configureArgs(arg0);  
  48.         checkArgs();  
  49.           
  50.         Configuration conf= getConf();  
  51.         conf.set("delimiter", delimiter);  
  52.          @SuppressWarnings("deprecation")  
  53.         Job job = new Job(conf, "merge user and phone information ");  
  54.         job.setJarByClass(MultipleDriver.class);  
  55.   
  56.         job.setReducerClass(MultipleReducer.class);  
  57.         job.setMapOutputKeyClass(Text.class);  
  58.         job.setMapOutputValueClass(FlagStringDataType.class);  
  59.         job.setOutputKeyClass(Text.class);  
  60.         job.setOutputValueClass(NullWritable.class);  
  61.           
  62.         job.setNumReduceTasks(1);  
  63.         MultipleInputs.addInputPath(job, new Path(input1), TextInputFormat.class, Multiple1Mapper.class);  
  64.         MultipleInputs.addInputPath(job, new Path(input2), TextInputFormat.class, Multiple2Mapper.class);  
  65.         FileOutputFormat.setOutputPath(job, new Path(output));  
  66.           
  67.         int res = job.waitForCompletion(true) ? 0 : 1;  
  68.         return res;  
  69.     }  
  70.       
  71.   
  72.     /** 
  73.      * check the args  
  74.      */  
  75.     private void checkArgs() {  
  76.         if(input1==null||"".equals(input1)){  
  77.             System.out.println("no user input...");  
  78.             printUsage();  
  79.             System.exit(-1);  
  80.         }  
  81.         if(input2==null||"".equals(input2)){  
  82.             System.out.println("no phone input...");  
  83.             printUsage();  
  84.             System.exit(-1);  
  85.         }  
  86.         if(output==null||"".equals(output)){  
  87.             System.out.println("no output...");  
  88.             printUsage();  
  89.             System.exit(-1);  
  90.         }  
  91.         if(delimiter==null||"".equals(delimiter)){  
  92.             System.out.println("no delimiter...");  
  93.             printUsage();  
  94.             System.exit(-1);  
  95.         }  
  96.       
  97.     }  
  98.   
  99.     /** 
  100.      * configuration the args 
  101.      * @param args 
  102.      */  
  103.     private void configureArgs(String[] args) {  
  104.         for(int i=0;i<args.length;i++){  
  105.             if("-i1".equals(args[i])){  
  106.                 input1=args[++i];  
  107.             }  
  108.             if("-i2".equals(args[i])){  
  109.                 input2=args[++i];  
  110.             }  
  111.               
  112.             if("-o".equals(args[i])){  
  113.                 output=args[++i];  
  114.             }  
  115.               
  116.             if("-delimiter".equals(args[i])){  
  117.                 delimiter=args[++i];  
  118.             }  
  119.               
  120.         }  
  121.     }  
  122.     public static void printUsage(){  
  123.         System.err.println("Usage:");  
  124.         System.err.println("-i1 input \t user data path.");  
  125.         System.err.println("-i2 input \t phone data path.");  
  126.         System.err.println("-o output \t output data path.");  
  127.         System.err.println("-delimiter  data delimiter , default is comma  .");  
  128.     }  
  129. }  


这里指定两个mapper和一个reducer,两个mapper分别对应处理user和phone的数据,分别如下:

 

mapper1(处理user数据):

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package multiple.input;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.hadoop.io.LongWritable;  
  6. import org.apache.hadoop.io.Text;  
  7. import org.apache.hadoop.mapreduce.Mapper;  
  8. import org.slf4j.Logger;  
  9. import org.slf4j.LoggerFactory;  
  10. /** 
  11.  * input : 
  12.  * username,phone 
  13.  *  
  14.  * output: 
  15.  * <key,value>  --> <[phone],[0,username]> 
  16.  * @author fansy 
  17.  * 
  18.  */  
  19. public class Multiple1Mapper extends Mapper<LongWritable,Text,Text,FlagStringDataType>{  
  20.     private  Logger log = LoggerFactory.getLogger(Multiple1Mapper.class);  
  21.     private String delimiter=null// default is comma  
  22.     @Override  
  23.     public void setup(Context cxt){  
  24.         delimiter= cxt.getConfiguration().get("delimiter"",");  
  25.         log.info("This is the begin of Multiple1Mapper");  
  26.     }   
  27.       
  28.     @Override  
  29.     public void map(LongWritable key,Text value,Context cxt) throws IOException,InterruptedException{  
  30.         String info= new String(value.getBytes(),"UTF-8");  
  31.         String[] values = info.split(delimiter);  
  32.         if(values.length!=2){  
  33.             return;  
  34.         }  
  35.         log.info("key-->"+values[1]+"=========value-->"+"[0,"+values[0]+"]");  
  36.         cxt.write(new Text(values[1]), new FlagStringDataType(0,values[0]));  
  37.     }  
  38. }  


mapper2(处理phone数据):

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package multiple.input;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.hadoop.io.LongWritable;  
  6. import org.apache.hadoop.io.Text;  
  7. import org.apache.hadoop.mapreduce.Mapper;  
  8. import org.slf4j.Logger;  
  9. import org.slf4j.LoggerFactory;  
  10. /** 
  11.  * input : 
  12.  * phone,description 
  13.  *  
  14.  * output: 
  15.  * <key,value>  --> <[phone],[1,description]> 
  16.  * @author fansy 
  17.  * 
  18.  */  
  19. public class Multiple2Mapper extends Mapper<LongWritable,Text,Text,FlagStringDataType>{  
  20.     private  Logger log = LoggerFactory.getLogger(Multiple2Mapper.class);  
  21.     private String delimiter=null// default is comma  
  22.     @Override  
  23.     public void setup(Context cxt){  
  24.         delimiter= cxt.getConfiguration().get("delimiter"",");  
  25.         log.info("This is the begin of Multiple2Mapper");  
  26.     }   
  27.       
  28.     @Override  
  29.     public void map(LongWritable key,Text value,Context cxt) throws IOException,InterruptedException{  
  30.         String[] values= value.toString().split(delimiter);  
  31.         if(values.length!=2){  
  32.             return;  
  33.         }  
  34.         log.info("key-->"+values[0]+"=========value-->"+"[1,"+values[1]+"]");  
  35.         cxt.write(new Text(values[0]), new FlagStringDataType(1,values[1]));  
  36.     }  
  37. }  

这里的FlagStringDataType是自定义的:

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package multiple.input;  
  2.   
  3. import java.io.DataInput;  
  4. import java.io.DataOutput;  
  5. import java.io.IOException;  
  6.   
  7. import org.apache.hadoop.io.WritableComparable;  
  8. import org.slf4j.Logger;  
  9. import org.slf4j.LoggerFactory;  
  10.   
  11. import com.google.common.primitives.Ints;  
  12.   
  13. public class FlagStringDataType implements WritableComparable<FlagStringDataType> {  
  14.     private  Logger log = LoggerFactory.getLogger(FlagStringDataType.class);  
  15.   private String value;  
  16.   private int flag;  
  17.   public FlagStringDataType() {  
  18.   }  
  19.   
  20.   public FlagStringDataType(int flag,String value) {  
  21.     this.value = value;  
  22.     this.flag=flag;  
  23.   }  
  24.   
  25.   public String get() {  
  26.     return value;  
  27.   }  
  28.   
  29.   public void set(String value) {  
  30.     this.value = value;  
  31.   }  
  32.   
  33.   @Override  
  34.   public boolean equals(Object other) {  
  35.     return other != null && getClass().equals(other.getClass())   
  36.             && ((FlagStringDataType) other).get() == value  
  37.             &&((FlagStringDataType) other).getFlag()==flag;  
  38.   }  
  39.   
  40.   @Override  
  41.   public int hashCode() {  
  42.     return Ints.hashCode(flag)+value.hashCode();  
  43.   }  
  44.   
  45.   @Override  
  46.   public int compareTo(FlagStringDataType other) {  
  47.        
  48.     if (flag >= other.flag) {  
  49.       if (flag > other.flag) {  
  50.         return 1;  
  51.       }  
  52.     } else {  
  53.       return -1;  
  54.     }  
  55.     return value.compareTo(other.value);  
  56.   }  
  57.   
  58.   @Override  
  59.   public void write(DataOutput out) throws IOException {  
  60.     log.info("in write()::"+"flag:"+flag+",vlaue:"+value);  
  61.     out.writeInt(flag);  
  62.     out.writeUTF(value);  
  63.   }  
  64.   
  65.   @Override  
  66.   public void readFields(DataInput in) throws IOException {  
  67.       log.info("in read()::"+"flag:"+flag+",vlaue:"+value);  
  68.       flag=in.readInt();  
  69.       value = in.readUTF();  
  70.       log.info("in read()::"+"flag:"+flag+",vlaue:"+value);  
  71.   }  
  72.   
  73. public int getFlag() {  
  74.     return flag;  
  75. }  
  76.   
  77. public void setFlag(int flag) {  
  78.     this.flag = flag;  
  79. }  
  80.   
  81. public String toString(){  
  82.     return flag+":"+value;  
  83. }  
  84.   
  85. }  


这个自定义类,使用一个flag来指定是哪个数据,而value则对应是其值。这样做的好处是在reduce端可以根据flag的值来判断其输出位置,这种设计方式可以对多种输入的整合有很大帮助,在mahout中也可以看到这样的设计。

 

reducer(汇总输出数据):

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package multiple.input;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.hadoop.io.NullWritable;  
  6. import org.apache.hadoop.io.Text;  
  7. import org.apache.hadoop.mapreduce.Reducer;  
  8. import org.slf4j.Logger;  
  9. import org.slf4j.LoggerFactory;  
  10.   
  11. public class MultipleReducer extends Reducer<Text,FlagStringDataType,Text,NullWritable>{  
  12.     private  Logger log = LoggerFactory.getLogger(MultipleReducer.class);  
  13.     private String delimiter=null// default is comma  
  14.     @Override  
  15.     public void setup(Context cxt){  
  16.         delimiter= cxt.getConfiguration().get("delimiter"",");  
  17.     }   
  18.     @Override  
  19.     public void reduce(Text key, Iterable<FlagStringDataType> values,Context cxt) throws IOException,InterruptedException{  
  20.         log.info("================");  
  21.         log.info("         =======");  
  22.         log.info("              ==");  
  23.         String[] value= new String[3];  
  24.         value[2]=key.toString();  
  25.         for(FlagStringDataType v:values){  
  26.             int index= v.getFlag();  
  27.             log.info("index:"+index+"-->value:"+v.get());  
  28.             value[index]= v.get();  
  29.         }  
  30.         log.info("              ==");  
  31.         log.info("         =======");  
  32.         log.info("================");  
  33.         cxt.write(new Text(value[2]+delimiter+value[0]+delimiter+value[1]),NullWritable.get());  
  34.     }  
  35. }  


这样设计的好处是,可以针对不同的输入数据采取不同的逻辑处理,而且不同的输入数据可以是序列文件的格式。

 

下面介绍一种方式和上面的比,略有不足,但是可以借鉴。

首先是Driver:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package multiple.input;  
  2.   
  3. import org.apache.hadoop.conf.Configuration;  
  4. import org.apache.hadoop.conf.Configured;  
  5. import org.apache.hadoop.fs.Path;  
  6. import org.apache.hadoop.io.NullWritable;  
  7. import org.apache.hadoop.io.Text;  
  8. import org.apache.hadoop.mapreduce.Job;  
  9. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
  10. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
  11. import org.apache.hadoop.util.Tool;  
  12. import org.apache.hadoop.util.ToolRunner;  
  13. //import org.slf4j.Logger;  
  14. //import org.slf4j.LoggerFactory;  
  15. /** 
  16.  * input1(/multiple/user/user): 
  17.  * username,user_phone 
  18.  *   
  19.  * input2(/multiple/phone/phone): 
  20.  *  user_phone,description  
  21.  *   
  22.  * output: username,user_phone,description 
  23.  *  
  24.  * @author fansy 
  25.  * 
  26.  */  
  27. public class MultipleDriver2 extends Configured implements Tool{  
  28. //  private  Logger log = LoggerFactory.getLogger(MultipleDriver.class);  
  29.       
  30.     private String input1=null;  
  31.     private String input2=null;  
  32.     private String output=null;  
  33.     private String delimiter=null;  
  34.       
  35.     public static void main(String[] args) throws Exception {  
  36.         Configuration conf=new Configuration();  
  37. //      conf.set("fs.defaultFS", "hdfs://node33:8020");    
  38. //        conf.set("mapreduce.framework.name", "yarn");    
  39. //        conf.set("yarn.resourcemanager.address", "node33:8032");   
  40.           
  41.         ToolRunner.run(conf, new MultipleDriver2(), args);  
  42.     }  
  43.   
  44.     @Override  
  45.     public int run(String[] arg0) throws Exception {  
  46.         configureArgs(arg0);  
  47.         checkArgs();  
  48.           
  49.         Configuration conf= getConf();  
  50.         conf.set("delimiter", delimiter);  
  51.          @SuppressWarnings("deprecation")  
  52.         Job job = new Job(conf, "merge user and phone information ");  
  53.         job.setJarByClass(MultipleDriver2.class);  
  54.         job.setMapperClass(MultipleMapper.class);  
  55.         job.setReducerClass(MultipleReducer.class);  
  56.         job.setMapOutputKeyClass(Text.class);  
  57.         job.setMapOutputValueClass(FlagStringDataType.class);  
  58.         job.setOutputKeyClass(Text.class);  
  59.         job.setOutputValueClass(NullWritable.class);  
  60.           
  61.         job.setNumReduceTasks(1);  
  62.         FileInputFormat.addInputPath(job, new Path(input1));  
  63.         FileInputFormat.addInputPath(job, new Path(input2));  
  64.         FileOutputFormat.setOutputPath(job, new Path(output));  
  65.           
  66.         int res = job.waitForCompletion(true) ? 0 : 1;  
  67.         return res;  
  68.     }  
  69.       
  70.   
  71.     /** 
  72.      * check the args  
  73.      */  
  74.     private void checkArgs() {  
  75.         if(input1==null||"".equals(input1)){  
  76.             System.out.println("no user input...");  
  77.             printUsage();  
  78.             System.exit(-1);  
  79.         }  
  80.         if(input2==null||"".equals(input2)){  
  81.             System.out.println("no phone input...");  
  82.             printUsage();  
  83.             System.exit(-1);  
  84.         }  
  85.         if(output==null||"".equals(output)){  
  86.             System.out.println("no output...");  
  87.             printUsage();  
  88.             System.exit(-1);  
  89.         }  
  90.         if(delimiter==null||"".equals(delimiter)){  
  91.             System.out.println("no delimiter...");  
  92.             printUsage();  
  93.             System.exit(-1);  
  94.         }  
  95.       
  96.     }  
  97.   
  98.     /** 
  99.      * configuration the args 
  100.      * @param args 
  101.      */  
  102.     private void configureArgs(String[] args) {  
  103.         for(int i=0;i<args.length;i++){  
  104.             if("-i1".equals(args[i])){  
  105.                 input1=args[++i];  
  106.             }  
  107.             if("-i2".equals(args[i])){  
  108.                 input2=args[++i];  
  109.             }  
  110.               
  111.             if("-o".equals(args[i])){  
  112.                 output=args[++i];  
  113.             }  
  114.               
  115.             if("-delimiter".equals(args[i])){  
  116.                 delimiter=args[++i];  
  117.             }  
  118.               
  119.         }  
  120.     }  
  121.     public static void printUsage(){  
  122.         System.err.println("Usage:");  
  123.         System.err.println("-i1 input \t user data path.");  
  124.         System.err.println("-i2 input \t phone data path.");  
  125.         System.err.println("-o output \t output data path.");  
  126.         System.err.println("-delimiter  data delimiter , default is comma  .");  
  127.     }  
  128. }  


这里添加路径直接使用FileInputFormat添加输入路径,这样的话,针对不同的输入数据的不同业务逻辑可以在mapper中先判断目前正在处理的是那个数据,然后根据其路径来进行相应的业务逻辑处理:

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. package multiple.input;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.hadoop.io.LongWritable;  
  6. import org.apache.hadoop.io.Text;  
  7. import org.apache.hadoop.mapreduce.InputSplit;  
  8. import org.apache.hadoop.mapreduce.Mapper;  
  9. import org.apache.hadoop.mapreduce.lib.input.FileSplit;  
  10. /** 
  11.  * input1 : 
  12.  * username,phone 
  13.  *  
  14.  * input2 
  15.  * phone,description 
  16.  *  
  17.  * output: 
  18.  * <key,value>  --> <[phone],[0,username]> 
  19.  * <key,value>  --> <[phone],[1,description]> 
  20.  * @author fansy 
  21.  * 
  22.  */  
  23. public class MultipleMapper extends Mapper<LongWritable,Text,Text,FlagStringDataType>{  
  24.       
  25.     private String delimiter=null// default is comma  
  26.     private boolean flag=false;  
  27.     @Override  
  28.     public void setup(Context cxt){  
  29.         delimiter= cxt.getConfiguration().get("delimiter"",");  
  30.         InputSplit input=cxt.getInputSplit();    
  31.         String filename=((FileSplit) input).getPath().getParent().getName();  
  32.         if("user".equals(filename)){  
  33.             flag=true;  
  34.         }  
  35.     }   
  36.       
  37.     @Override  
  38.     public void map(LongWritable key,Text value,Context cxt) throws IOException,InterruptedException{  
  39.         String[] values= value.toString().split(delimiter);  
  40.         if(values.length!=2){  
  41.             return;  
  42.         }  
  43.         if(flag){  
  44.             cxt.write(new Text(values[1]), new FlagStringDataType(0,values[0]));  
  45.         }else{  
  46.             cxt.write(new Text(values[0]), new FlagStringDataType(1,values[1]));  
  47.         }  
  48.     }  
  49. }  


总体来说,这种处理方式其实是不如第一种的,在每个map函数中都需要进行判断,比第一种多了很多操作;同时,针对不同的序列文件,这种方式处理不了(Key、value的类型不一样的情况下)。所以针对多文件格式的输入,最好还是使用第一种方式。

 

 

 

分享,成长,快乐

转载请注明blog地址:http://blog.csdn.net/fansy1990

分享到:
评论

相关推荐

    论文研究-Hadoop中处理小文件的四种方法的性能分析.pdf

    一般情况下有四种处理海量小文件的方法,分别为默认输入格式TextInputFormat、为处理小文件而设计的CombineFileInputFormat输入格式、SequenceFile技术以及Harballing技术。为了比较在相同的Hadoop分布式环境下这四...

    论文研究-单机下Hadoop小文件处理性能分析.pdf

    以词频统计为例,通过在单机环境下一些典型文件测试集的实验,对比了不同文件输入格式对Hadoop处理小文件性能的差异。从Hadoop的工作流程和原理上解释了出现此性能差异的原因。通过分析得出多个小文件整合为一个数据...

    HadoopHA集群部署、YARNHA测试Job教学课件.pptx

    创建新文件:wc.input 作为 MapReduce输入文件,输入以下内容,然后保存文件 [hadoop@master ~]$ vi wc.input hadoop mapreduce hive spark hbase spack storm sqoop hadoop hive spark hadoop 查看输入的文件内容 ...

    新版Hadoop视频教程 段海涛老师Hadoop八天完全攻克Hadoop视频教程 Hadoop开发

    04-hadoop-HA机制的配置文件.avi 05-hadoop分布式集群HA模式部署.avi 06-hdfs--HA测试.avi 07-hdfs--动态增加节点和副本数量管理.avi 08-HA的java api访问要点.avi 09-hive入门.avi 第六天 hbase hive 01-...

    Hadoop权威指南 第二版(中文版)

     Hadoop文件系统  接口  Java接口  从Hadoop URL中读取数据  通过FileSystem API读取数据  写入数据  目录  查询文件系统  删除数据  数据流  文件读取剖析  文件写入剖析  一致模型  通过 distcp并行...

    基于Java和ssh在Hadoop平台上完成文件操作

    基于Java和ssh在Hadoop平台上完成文件操作,结果查询等功能

    Hadoop权威指南(中文版)2015上传.rar

    Hadoop文件系统 接口 Java接口 从Hadoop URL中读取数据 通过FileSystem API读取数据 写入数据 目录 查询文件系统 删除数据 数据流 文件读取剖析 文件写入剖析 一致模型 通过 distcp并行拷贝 保持 HDFS 集群的均衡 ...

    Hadoop实战中文版

    7.2 探查任务特定信息 7.3 划分为多个输出文件 7.4 以数据库作为输入输出 7.5 保持输出的顺序 7.6 小结 第8章 管理Hadoop 8.1 为实际应用设置特定参数值 8.2 系统体检 8.3 权限设置 8.4 配额管理 8.5 启用...

    Hadoop大数据平台构建、测试Job教学课件.pptx

    创建新文件:wc.input 作为 MapReduce输入文件,输入以下内容,然后保存文件 [hadoop@master ~]$ vi wc.input hadoop mapreduce hive spark hbase spack storm sqoop hadoop hive spark hadoop 查看输入的文件内容 ...

    云计算应用实验报告 武汉理工大学云计算应用 hadoop单机模式和伪分布式

    题目:输入两个文件,一个代表工厂表,包含工厂名列和地址编号列;另一个代表地址表,包含地址名列和地址编号列。要求从输入数据中找出工厂名和地址名的对应关系,输出“工厂名——地址名”表,按工厂名排序输出。...

    Apress - Pro Hadoop

    而进行海量计算需要一个稳定的,安全的数据容器,才有了Hadoop分布式文件系统(HDFS,Hadoop Distributed File System)。  HDFS通信部分使用org.apache.hadoop.ipc,可以很快使用RPC.Server.start()构造一个节点...

    hadoop2.7.1默认配置.xlsx

    hadoop2.7.1的hdfs、core、yarn、mapreduce默认配置,里面的配置描述通过谷歌翻译了的,有原英文和翻译的描述

    基于Hadoop实现的数据云盘系统项目源码资料大全.zip

    基于Hadoop实现的数据云盘系统项目源码资料大全.zip基于Hadoop实现的数据云盘系统,实现不同用户有不同的存储空间,不同的用户身份有不同的权限操作等功能软件设计思路 1、用户登录模块设计 输入图片说明 2、检索...

    osmpbfinputformat:用于读取Open Street Map Protobuf文件的Hadoop API输入格式

    用于读取Open Street Map Protobuf文件的Hadoop API输入格式 安装 该库依赖于Hadoop客户端库,Google protobufs和osmpbf库。 所有依赖项都汇总在pom.xml文件中,因此maven会为您处理它们。 只需键入: mvn package...

    大数据实验5实验报告:MapReduce 初级编程实践

    对于两个输入文件,即文件 A 和文件 B,请编写 MapReduce 程序,对两个文件进行合并, 并剔除其中重复的内容,得到一个新的输出文件 C。下面是输入文件和输出文件的一个样例 供参考。 输入文件 A 的样例如下:

    Hadoop原理与技术MapReduce实验

    (1)输入start-all.sh启动hadoop相应进程和相关的端口号 (2)打开网站localhost:8088和localhost:50070,查看MapReduce任务启动情况 (3)写wordcount代码并把代码生成jar包 (4)运行命令 (1):把linus下的文件...

    Hadoop原理与技术Spark操作实验

    (1)输入start-all.sh启动hadoop相应进程和相关的端口号 (2)启动Spark分布式集群并查看信息 (3)网页端查看集群信息 (4)启动spark-shell控制台 1:local模式启动 2:登录master服务器,在集群模式下启动 (5)...

    warc-hadoop:Hadoop 的 WARC(Web 档案)输入和输出格式

    Hadoop 的 WARC 输入和输出格式warc-hadoop 是一个 Java 库,用于在 Hadoop 中处理文件。 它提供了用于在 MapReduce 作业中读取 WARC 文件的 InputFormats 和用于写入 WARC 文件的 OutputFormats(支持“旧” org....

    Hadoop实战(第2版)

    技术点16 使用Thrift3.3.5 Avro技术点17 MapReduce 的下一代数据序列化技术3.4 自定义文件格式3.4.1 输入输出格式技术点18 输入和输出格式为CSV 的文件3.4.2 output committing 的重要性 3.5 本章小...

    hadoop 1.2.1 api 最新chm 伪中文版

    Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的...

Global site tag (gtag.js) - Google Analytics