使用OpenVPN提交Hadoop作业
本章介绍如何使用OpenVPN在Linux、Windows和Mac OS X操作系统中提交Hadoop作业。
使用客户端提交作业时,需在系统中设置环境变量,即“HADOOP_USER_NAME=hdfs”,或在MapReduce作业中配置,即在程序第一行加上“System.setProperty("HADOOP_USER_NAME","hdfs")”,可实现以hdfs用户的身份提交作业。
Linux
在Linux操作系统下通过OpenVPN提交Hadoop作业。
- 下载Hadoop Client。
- 下载Hadoop配置文件。
登录控制台,选择产品服务->MapReduce-集群列表,进入集群列表页,点击集群名称进入集群详情页,在工具下载区点击下载hadoop-conf.zip。
- 解压“hadoop-conf.zip”。
替换“hadoop-2.6.0-SNAPSHOT/etc/hadoop/”下的所有文件为“conf”中的配置文件。
- 由于hadoop脚本中使用了配置文件中的java路径,可能和客户端机器不一致。
如果客户端机器已经将java加入过path中,请修改bin/hadoop文件:cd
至目录hadoop-2.6.0-SNAPSHOT/bin
执行命令vi hadoop
,修改exec $JAVA $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
为exec java $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
。
-
提交hadoop作业。
cd
至目录hadoop-2.6.0-SNAPSHOT/bin
执行hadoop jar {jar file} {main class path} {parameters}
。如提示文件压缩的类找不到,是指镜像缺少这个类,则需在core-site.xml中的“io.compression.codecs”找到该类,并去掉该异常类。
Windows
使用Eclipse在Windows操作系统通过OpenVPN中提交Hadoop作业的过程如下:
配置Hadoop Client。
- Hadoop Client下载地址:http://bmr.bj.bcebos.com/tools/hadoop/hadoop-2.6.0-SNAPSHOT.tar.gz。下载后解压。
- 点击下载:https://github.com/srccodes/hadoop-common-2.2.0-bin/archive/master.zip。下载后解压,替换“\hadoop-2.6.0-SNAPSHOT\bin\”中的文件为“\hadoop-common-2.2.0-bin-master\bin\”中的文件。
> 注意:
> 如果系统的jdk是1.8,而集群是1.7,作业打包提交后,可能会出现版本冲突的异常,必须卸载java1.8,重新下载1.7版本安装。
配置Hadoop配置文件
- 登录控制台,选择产品服务->MapReduce-集群列表,进入集群列表页,点击集群名称进入集群详情页,在工具下载区点击下载hadoop-conf.zip。
-
解压后在mapred-site.xml中加入如下代码确保系统一致:
<property> <name>mapred.remote.os</name> <value>Linux</value> </property> <property> <name>mapreduce.app-submission.cross-platform</name> <value>true</value> </property>
- 从下列中选择一种方式创建工程。
表一 创建方式说明
创建方式 | 创建步骤 |
---|---|
创建普通java工程 | a.复制配置文件“conf”中的所有文件至“src”下。 b.添加Hadoop Client的“etc/share”目录下的如下文件至依赖中: mapreduce/.jar;mapreduce/lib/.jar;hdfs/.jar;hdfs/lib/.jar;yarn/.jar;yarn/lib/.jar;common/.jar;common/lib/.jar。 |
创建Maven项目 | a.复制配置文件“conf”中的所有文件至“/main/resources”下。 b.在pom.xml中配置hadoop-hdfs,hadoop-common,hadoop-mapreduce-client-core,hadoop-mapreduce-client-common,hadoop-mapreduce-client-jobclient。版本须与集群保持一致。 |
-
编写主函数。主函数中需要增加hadoop镜像路径的配置以及作业文件位置的配置。main函数可参考如下代码:
public static void main(String[] args) throws Exception { String hadoop_home = “”;//hadoop mirror path String jar_path = “”; String input_path = “”; String output_path = “”; String job_name = “”; System.setProperty("hadoop.home.dir", hadoop_home); Configuration conf = new Configuration(); conf.set("mapreduce.job.jar", jar_path); Job job = new Job(conf, job_name); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); job.setMapperClass(Map.class); job.setReducerClass(Reduce.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); FileInputFormat.addInputPath(job, new Path(input_path)); FileOutputFormat.setOutputPath(job, new Path(output_path)); job.waitForCompletion(true); }
- 编译提交。
表二 编译提交步骤
编译类型 | 操作步骤 |
---|---|
提交普通java工程 | a.右键点击项目选择“export jar”使用普通打包方式即可。 b.右键点击项目选择run as java application,即可向集群提交作业。 |
提交Maven项目 | a.右键点击项目选择run as maven install,生成的jar文件会存放在Maven项目包所在目录的target文件夹中。 b.复制target中的jar包以备引用,否则会出现文件正在被占用的异常。 |
Mac
与Linux相同,请参考Linux。