如何从Java向远程纱线集群提交级联作业?
我知道我可以通过将级联作业打包到JAR中来提交级联作业,如级联用户指南中所述。如果我使用如何从Java向远程纱线集群提交级联作业?,java,hadoop,mapreduce,yarn,cascading,Java,Hadoop,Mapreduce,Yarn,Cascading,我知道我可以通过将级联作业打包到JAR中来提交级联作业,如级联用户指南中所述。如果我使用hadoopjarCLI命令手动提交作业,那么该作业将在集群上运行 但是,在最初的Hadoop 1级联版本中,可以通过在HadoopJobConf上设置某些属性来向集群提交作业。设置fs.defaultFS和mapred.job.tracker会导致本地Hadoop库自动尝试将作业提交给Hadoop1 JobTracker。但是,在较新版本中设置这些属性似乎不起作用。使用级联版本2.5.3(将CDH5列为受支
hadoopjar
CLI命令手动提交作业,那么该作业将在集群上运行
但是,在最初的Hadoop 1级联版本中,可以通过在HadoopJobConf
上设置某些属性来向集群提交作业。设置fs.defaultFS
和mapred.job.tracker
会导致本地Hadoop库自动尝试将作业提交给Hadoop1 JobTracker。但是,在较新版本中设置这些属性似乎不起作用。使用级联版本2.5.3(将CDH5列为受支持的平台)提交到CDH5 5.2.1 Hadoop群集会导致与服务器协商时出现IPC异常,详情如下
我相信这个平台组合——级联2.5.6、Hadoop2、CDH5、Thread和提交的MR1API——是基于的受支持的组合(请参见“早期版本”标题下)。在同一集群中,使用hadoop jar提交作业可以很好地工作。端口8031在提交主机和ResourceManager之间打开。在服务器端的ResourceManager日志中发现具有相同消息的错误
我使用的是cascading-hadoop2-mr1
库
线程“main”cascading.flow.FlowException中的异常:未处理的异常
在cascading.flow.BaseFlow.complete处(BaseFlow.java:894)
在WordCount.main(WordCount.java:91)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
由以下原因引起:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.RpcServerException):rpc headerRPC_中未知的rpc类型可写
位于org.apache.hadoop.ipc.Client.call(Client.java:1411)
位于org.apache.hadoop.ipc.Client.call(Client.java:1364)
在org.apache.hadoop.ipc.writeablerpcengine$Invoker.invoke上(writeablerpcengine.java:231)
位于org.apache.hadoop.mapred.$Proxy11.getStagingReadir(未知来源)
位于org.apache.hadoop.mapred.JobClient.getStagingReadir(JobClient.java:1368)
位于org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:102)
位于org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:982)
位于org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:976)
位于java.security.AccessController.doPrivileged(本机方法)
位于javax.security.auth.Subject.doAs(Subject.java:415)
位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
位于org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:976)
位于org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:950)
在cascading.flow.hadoop.planner.HadoopFlowStepJob.internalNonBlockingStart(HadoopFlowStepJob.java:105)中
位于cascading.flow.planner.FlowStepJob.blockOnJob(FlowStepJob.java:196)
位于cascading.flow.planner.FlowStepJob.start(FlowStepJob.java:149)
在cascading.flow.planner.FlowStepJob.call(FlowStepJob.java:124)中
在cascading.flow.planner.FlowStepJob.call(FlowStepJob.java:43)中
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:745)
演示代码如下,基本上与级联用户指南中的WordCount示例相同
公共类字数{
公共静态void main(字符串[]args){
字符串inputPath=“/user/vagrant/wordcount/input”;
字符串outputPath=“/user/vagrant/wordcount/output”;
Scheme sourceScheme=新文本行(新字段(“行”);
Tap源=新Hfs(源方案、输入路径);
Scheme sinkScheme=新的文本分隔符(新字段(“单词”、“计数”));
抽头接收器=新Hfs(sinkScheme、outputPath、SinkMode.REPLACE);
管道组件=新管道(“字数”);
字符串正则表达式=”(?我现在已经解决了这个问题。它来自于尝试使用Cloudera分发的较旧的Hadoop类,特别是JobClient。如果您使用提供的2.5.0-mr1-cdh5.2.1
版本的Hadoop核心
依赖项,或者使用相同版本号的Hadoop客户端
依赖项,就会出现这种情况。尽管ims将是MR1版本,我们使用MR1API进行提交,该版本实际上只支持提交到Hadoop1 JobTracker,不支持Thread
为了允许提交到Thread,您必须将hadoop客户端
依赖项与非MR12.5.0-cdh5.2.1
版本一起使用,该版本仍然支持向Thread提交MR1作业