大数据学习笔记:编写脚本分发配置,数据分布,以及使用代码打印调试信息

来源:互联网 发布:linux 登录用户权限 编辑:程序博客网 时间:2024/06/17 23:04

hadoop重要的四个配置文件:core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site,xml。之前讲到hadoop安装后默认配置即为独立模式,就是说这四个文件中不写入任何内容就是运行在独立模式。hadoop为这四个框架准备了默认配置,分别为core-default.xml,hdfs-default.xml,mapred-default.xml,yarn-default,xml。用户对*-sitexml文件的修改实际上是对*.default文件中某些属性的覆盖。这四个默认配置文件分别位于hadoop-common-3.0.0-alpha4.jar,hadoop-hdfs-3.0.0-alpha4.jar,hadoop-mapreduce-client-core-3.0.0-alpha4.jar,hadoop-yarn-common-3.0.0-alpha4.jar这四个jar包中。主机对配置文件作出修改后,需要将配置文件分发给各从属机。


因为处理的气温数据很小,每个包的大小以K为单位,修改HDFS配置,将其的块大小改小一点(这里之前搞错了,.gz格式的压缩包是不能再被分割的!这里的块大小设置只适用于解压出来的文本文件!):

而我们设定的20K低于DFS的最小阈值,为了正常使用,我们还需要增加修改DFS的最小阈值(注意最小块大小只能以字节为单位):



可以创建shell脚本来完成自动分发过程。新建shell脚本文件:

touch distribute_hadoop_conf.sh
添加执行权限:

chmod a+x distribute_hadoop_conf.sh
编写代码(美元符表示变量前缀):

#!/bin/bashfor((i=2;i<=3;i++)){    scp -r $HADOOP_INSTALL/etc/hadoop_Full/ daya@C$i:$HADOOP_INSTALL/etc/}


按照以上步骤对HDFS优化之后,按照之前的文章再次新建文件夹并将温度数据上传到HDFS中,然后在windows的浏览器中打开namenode与datanode页面。

在namenode页面的右上角浏览文件系统:


进入创建的/user/hadoopDemo/temperature文件夹,可以查看每一个文件的详细分块情况与冗余情况:


因为此处只设置了两台datanode节点,所以所有的块冗余都是分布在C2与C3上。


利用代码调试

关于调试,另一种常用的就是在代码中加入对应的功能来往日志中输出信息以供调试。这里在mapper程序中示范输出功能。

Mapper类中有两个方法:setup()与cleanup(),前者在mapper任务开始时执行一次,后者在mapper任务结束时执行一次。我们在里面加入输出节点hostname与ip的功能。

首先在MaxTempMapper类中重写这两个方法:


在MaxTempMapper类中声明相应的变量并导入必须的库:

import java.net.InetAddress;

//节点地址private InetAddress addr;private String hostname;private String ip;
代码如下:

@Override//任务结束时执行一次protected void cleanup(Mapper<LongWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {System.out.println(hostname+":"+ip+":"+"mapper.cleanup()");}@Override//任务开始时执行一次protected void setup(Mapper<LongWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {addr=InetAddress.getLocalHost();ip=addr.getHostAddress();hostname=addr.getHostName();System.out.println(hostname+":"+ip+":"+"mapper.cleanup()");} 
当在Linux主机上执行这个jar包时,datanode的.../logs/userlogs中会有相应的输出文件,输出文件所在节点位置与数据块的存储节点位置没有必然联系。

stdout的内容为(这说明有一个数据块的map计算是在此数据节点进行的):

slave1:192.168.200.130:mapper.setup()slave1:192.168.200.130:mapper.cleanup()


原创粉丝点击