使用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\”中的文件。
1> 注意:
2> 如果系统的jdk是1.8,而集群是1.7,作业打包提交后,可能会出现版本冲突的异常,必须卸载java1.8,重新下载1.7版本安装。
配置Hadoop配置文件
- 登录控制台,选择产品服务->MapReduce-集群列表,进入集群列表页,点击集群名称进入集群详情页,在工具下载区点击下载hadoop-conf.zip。
-
解压后在mapred-site.xml中加入如下代码确保系统一致:
Plain Text1 <property> 2 <name>mapred.remote.os</name> 3 <value>Linux</value> 4 </property> 5 <property> 6 <name>mapreduce.app-submission.cross-platform</name> 7 <value>true</value> 8 </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函数可参考如下代码:
Plain Text1public static void main(String[] args) throws Exception { 2String hadoop_home = “”;//hadoop mirror path 3String jar_path = “”; 4String input_path = “”; 5String output_path = “”; 6String job_name = “”; 7 8System.setProperty("hadoop.home.dir", hadoop_home); 9 10Configuration conf = new Configuration(); 11conf.set("mapreduce.job.jar", jar_path); 12 13Job job = new Job(conf, job_name); 14job.setOutputKeyClass(Text.class); 15job.setOutputValueClass(IntWritable.class); 16 17job.setMapperClass(Map.class); 18job.setReducerClass(Reduce.class); 19 20job.setInputFormatClass(TextInputFormat.class); 21job.setOutputFormatClass(TextOutputFormat.class); 22 23FileInputFormat.addInputPath(job, new Path(input_path)); 24FileOutputFormat.setOutputPath(job, new Path(output_path)); 25 26job.waitForCompletion(true); 27}
- 编译提交。
表二 编译提交步骤
编译类型 | 操作步骤 |
---|---|
提交普通java工程 | a.右键点击项目选择“export jar”使用普通打包方式即可。 b.右键点击项目选择run as java application,即可向集群提交作业。 |
提交Maven项目 | a.右键点击项目选择run as maven install,生成的jar文件会存放在Maven项目包所在目录的target文件夹中。 b.复制target中的jar包以备引用,否则会出现文件正在被占用的异常。 |
Mac
与Linux相同,请参考Linux。