hadoop常用设置及用法

来源:互联网 发布:星际殖民2 数据 编辑:程序博客网 时间:2024/06/02 03:22

一、Hadoop配置文件修改

(如果要设置集群,必须先设置主机名和hosts,否则DataNode不能和namenode相连接)

1、hadoop-env.sh

修改JAVA_HOME的值

2、core-site.xml


3、hdfs-site.xml


4、mapred-site.xml(将mapred-site.xml.template重命名)


5、yarn-site.xml


 

二、启动hadoop

1、hadoop/bin运行  ./hdfs -namenode –format

2、hadoop/bin运行  jps  查看java进程

3、hadoop/sbin运行start-dfs.sh

4、hadoop/sbin运行start-yarn.sh

5、hadoop/bin运行  jps  查看java进程

 

三、使用hadoop

1、hdfs文件系统 

                路径/hdfsdfs -ls(等文件操作命令)   +路径

或者在ip:50070的文件目录查看

 

四、mapper编程


 

注:     1、可以手动指定reduce的个数,job.setNumReduceTasks(intnum);

                2、防止jar包存放位置写死,可以使用job.setJarByClass(this.class)

                3、如果需要在map阶段计算一些小型的计算,可以指定一个combiner,用法与reducer相同,工作在两者之间,并用job.setCombinerClass(MyCom.class)指定类。

五、启动yarn

hadoop jar pv.jar

 

 

六、使用技巧

1、当一次不能得到结果时,可以采用两次或者多次的方法。

2、如有需要,可使用key-文件名结合的方式输出map

生成文件名的方法:


3、map和reduce的启动过程是:先实例化map和reduce类,再一行行的执行数据。

在实例化第一次会执行setup一次,且只有一次,在执行map和reduce之前。

在实例化第一次会执行clearup一次,且只有一次,在执行map和reduce之后。

4、如果map和reduce之间的分配方式不能满足,则可以重写partitioner类,再使用

job.setPartitionerClass(MyPartitioner.class)的方法指定。


5、如果要使用自定义的JavaBean,要重写空参数构造方法和toString方法。

6、如果map和reduce的泛型参数要使用自定义的JavaBean,则JavaBean要实现Writeable接口,也要实现两个方法,如下(注意顺序,String类型写writeUTF(String)):


7、如果要比较JavaBean某一个参数的大小,必须让JavaBean实现compareable接口

并实现其方法,用javaBean.property.compare(other.property)

8、如果configuration.set(“属性”,”值”),可以用context.getConfiguration获得configuration,再configuration.getInt(“属性”)的方法获取

cd /usr/hadoop-2.8.2/tmp/dfs/

9、如果要改变排序规则,建造以下类并在mian中指定job.setGroupComparatorClass():


10、如果想输出到不同的文件中,则需要自定义FileOutputFormat,并在job.setOutputFormat()中指定,如下:

还可以使用multipleOutput工具类(注意一定要关闭multipleOutput):


比如如上还可以用以下实现:

public class MyReducerextendsReducer<MyTestBean,NullWritable,Text,Text> {
   
MultipleOutputsmos;
   
@Override
   
protectedvoid setup(Contextcontext)throws IOException,InterruptedException{
       
mos=newMultipleOutputs(context);
    }
   
@Override
   
protectedvoid reduce(MyTestBeankey,Iterable<NullWritable>values,Context context)throwsIOException,InterruptedException{
       
int count=0;
       
for (NullWritablenullWritable:values){
           
count++;
           
if (count>1)return;
           
String name=key.getName();
           
String num=key.getNum();
           
//context.write(new Text(name),new Text(num));
           
mos.write((Object)name,NullWritable.get(),"/out1");
           
mos.write((Object)num,NullWritable.get(),"/out2");
        }
    }
   
@Override
   
protectedvoid cleanup(Contextcontext)throws IOException,InterruptedException{
       
mos.close();
    }
}

如果不想输出空文件,则需要在main中添加:

LazyOutputFormat.setOutputFormatClass(job,TextOutputFormat.class);

 

七、常用的实现方法

1、join连接

在main中,加入job.setCacheFiles(),并指定reduce数量为0,再在setup方法中逐行读取数据(用bufferdreader),放入到HashMap中,最后在map阶段连接。

2、topN输出

构建JavaBean的key,用GroupComparator构建比较规则(必须在Javabean中实现writablecomparable接口),让他id相同的(不管评分大小)为一个相同的key,再分发到reduce,最后输出。


八、安全模式

相关的操作命令

Hadoop提供脚本用于对安全模式进行操作,主要命令为:

hadoop dfsadmin -safemode <command>
  • 1

command的可用取值如下:

command功能备注get查看当前状态 enter进入安全模式 leave强制离开安全模式 wait一直等待直到安全模式结束
原创粉丝点击