Hadoop读取环境变量及setup函数

setup 函数原码:(摘自《hadoop实战》)
*Called once at the start of the task.
protected void setup(Context context) throws IOException,InterruptedException{}

从注释可得知,setup函数在Task启动时就调用。
在MapReduce中作业会被组织成MapTask和ReduceTask。
每个Task都以Map类或Reduce类为处理方法主体,
输入分片为处理方法的输入,自己的分片处理完后Task就销毁了。
从这里看出,setup函数在task启动后数据处理前就调用一次
而覆盖的Map函数和Reduce函数会针对输入分片的每个Key调用一次,
所以setup函数可以看作Task上一个全局处理。
利用setup函数的特性,可以将Map或Reduce函数中的的重复处理放到setup函数中。
如老师给的Exercise_2中的"name"
但需要注意的是,调用setup函数只是对应的Task上全局操作,而不是整个作业的全局操作。

可以先用api把本地的文件传到hdfs中的 /user/hadoop/test 里去
//本地文件上传到HDFS上
public static void upload(String src,String dst) throws FileNotFoundException,IOException{  
  
  
    InputStream in = new BufferedInputStream(new FileInputStream(src));  
    //得到配置对象  
    Configuration conf = new Configuration();  
    //文件系统  
    FileSystem fs = FileSystem.get(URI.create(dst), conf);  
    //输出流  
    OutputStream out = fs.create(new Path(dst), new Progressable() {

public void progress() {  
        System.out.println("上传完一个设定缓存区大小容量的文件!");  
        }  
    });  
    //连接两个流,形成通道,使输入流向输出流传输数据  
    IOUtils.copyBytes(in, out, 4096,true);  
    }  
上传的时候调用这个函数就可以了
例如  
upload("/home/jack/test/test.txt","/user/hadoop/test/test");
前面的是本地目录中的文件,后面是hdfs中的文件
注意 必须两者都必须是“路径+文件名”  不能没有文件名

Configuration conf = new Configuration();

conf.setStrings("job_parms", "aaabbc"); //关键就是这一句
        Job job = new Job(conf, "load analysis");       
        job.setJarByClass(LoadAnalysis.class);
        job.setMapperClass(LoadMapper.class);
        job.setReducerClass(LoadIntoHbaseReduce.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);
 
        FileInputFormat.addInputPath(job, new Path(otherArgs[0]));

@Override
        protected void setup(Context context)
                throws IOException, InterruptedException {
            try {
             
                //从全局配置获取配置参数
                Configuration conf = context.getConfiguration();
                String parmStr = conf.get("job_parms"); //这样就拿到了
               
               ......
               
            } catch (SQLException e) {
               
                e.printStackTrace();
            }
           
        }

全局文件:hadoop有distributed cache来保存全局文件,保证所有node都可以访问,使用类名为DistributedCache

时间: 2024-08-11 03:28:29

Hadoop读取环境变量及setup函数的相关文章

[十六]SpringBoot 之 读取环境变量和绑定属性对象

1.读取环境变量 凡是被spring管理的类,实现接口EnvironmentAware 重写方法 setEnvironment 可以在工程启动时,获取到系统环境变量和application配置文件中的变量. 主要是@Configuration,实现接口:EnvironmentAware就能获取到系统环境信息 package me.shijunjie.config; import org.springframework.beans.factory.annotation.Value; import

Bash 是如何从环境变量中导入函数的

在上文中曾说到: 所谓的环境变量的真实面目其实就是个任意字符串 Bash 在启动时会将 environ 数组中包含 = 号的字符串导入成为自己的变量 Bash 在启动外部命令时会将自己内部标记为环境变量的变量重组成字符串数组赋值给 environ 本文中继续深入讲三点: environ 数组中可能存在 = 左边名字相同的元素,也就是同名的环境变量,Bash 是怎么导入的? Bash 还可以从环境变量中导入函数,甚至同时导入两个同名的变量和函数 Bash 还可以同时导出两个同名的变量和函数 如果有

[CentOS] 解决 crontab 无法读取环境变量的问题

参考资料:http://blog.slogra.com/post-238.html 1. 问题描述 一段数据处理的 shell 程序,在 shell 中手动运行,可以正确执行.但是,把它放在 crontab 列表里,就会报错,提示 "matlab: command not found.". AutoRefreshData.sh 的部分内容如下: [[email protected] ~]$ cat /home/She/data/AutoRefreshData.sh#!/bin/bash

python 读取环境变量

python 读取环境变量 前言 在使用python时候千万不要把账户密令直接写入脚本,特别是当你计划开源自己的作品时. 为了保护账户信息,你需要让脚本从环境中导入敏感信息. 读取方法 import os os.environ["EMAIL_PASSWORD"] window环境 Linux环境 原文地址:https://www.cnblogs.com/yywBlogW/p/11438410.html

java 读取环境变量和系统变量的方法

在web开发的过程中不免需要读取一些自定义的jvm系统变量或者环境变量.比如定义一些通用的log文件.或者数据库访问路径. 我们可以使用System.getProperties()读取所有的系统变量.通过System.getProperty("name");获取特定的系统变量 System.getenv();获取环境变量.System.getenv("name")获取特定的环境变量

Linux中与环境变量相关的函数

1.在终端可以通过env.set命令查看当前的环境变量 2.通过main函数中的第三个参数可以得到当前进程的环境变量列表 int main(int argc , char *argv[] , char *env[]); 其中argv和env是一个指针数组,数组的最后一个元素为NULL 3.打印当前进程的环境变量 int main(int argc , char *argv[] , char *env[]){ char **p = env; while(*p){ printf("%s\n"

mac os x10.11.2系统eclipse无法读取环境变量的问题

eclipse调试Android自动化脚本的时候一直无法找到adb,遇到这么坑的问题,折腾死了,记录一下. mac os x10.11.2系统GUI程序(eclipse)无法读取~/.bash_profile下配置的环境变量. 需要用终端open /User/sun/tools/eclipse/eclipse启动,才会加载环境变量,手动启动则不加载.

Windows 下Hadoop的环境变量配置

一.安装JDK 1.下载路径:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.安装到C:\Java\jdk1.8.0_121(安装时不要安装到有空格的目录路径中,这样Hadoop在找JAVA_HOME的时候会找不到) 二.配置Java环境变量 1.JAVA_HOME : C:\Java\jdk1.8.0_121 2.CLASSPATH : .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOM

【Tomcat】直接启动tomcat时为tomcat指定JDK 而不是读取环境变量中的配置

在windows环境下以批处理文件方式启动tomcat,只要运行<CATALINA_HOME>/bin/startup.bat这个文件,就可以启动Tomcat.在启动时,startup.bat会调用catalina.bat文件,而catalina.bat会调用setclasspath.bat文件来获取JAVA_HOME和JRE_HOME这两个环境变量的值,因此若要在tomcat启动时指向特定的JDK,则需在setclasspath.bat文件的开头处加入以下内容: rem ----------