Hadoop API 在尝试初始化集群以使用 DistCp 时抛出错误

Posted

技术标签:

【中文标题】Hadoop API 在尝试初始化集群以使用 DistCp 时抛出错误【英文标题】:Hadoop API throws an error when trying to initialize cluster in order to use DistCp 【发布时间】:2018-07-24 13:20:56 【问题描述】:

我正在尝试使用 Hadoop API 通过 DistCp 类执行分布式复制,但在尝试连接到集群时会引发错误。我曾尝试更改 hadoop 和 hdfs 的配置文件,但似乎不起作用。我正在最新的 Cloudera Quickstart 上测试应用程序

我运行这个命令来执行这个类。 java -cp myjar com.keedio.hadoop.Mover

包 com.keedio.hadoop;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.tools.DistCp;

import org.apache.hadoop.tools.DistCpOptionSwitch;
import org.apache.hadoop.tools.DistCpOptions;
import org.apache.hadoop.util.ToolRunner;

import java.util.Collections;


public class Mover 

public static void main(String args []) 

 try 
  FileSystem fs = FileSystem.getLocal(new Configuration());
  FileSystem fs2= FileSystem.get(java.net.URI.create("file:///"),new 
  Configuration());
  DistCpOptions distCpOptions=new DistCpOptions(new Path("file:/Users/jvasquez/Desktop/ficheros1"),new Path("file:/Users/jvasquez/Desktop/ficheros2"));
String argumentos [] = "file:////Users/jvasquez/Desktop/ficheros1","file:///Users/jvasquez/Desktop/ficheros2";


Configuration conf=new Configuration();

conf.addResource(new org.apache.hadoop.fs.Path("/etc/hadoop/conf/yarn-site.xml"));
conf.addResource(new org.apache.hadoop.fs.Path("/etc/hadoop/conf/core-site.xml"));
conf.addResource(new org.apache.hadoop.fs.Path("/etc/hadoop/conf/mapred-site.xml"));
conf.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml"));

DistCp distCp= new DistCp(conf,distCpOptions);

ToolRunner.run(distCp,argumentos);





 catch (Exception e) 
 e.printStackTrace();







这是错误

log4j:WARN No appenders could be found for logger 
(org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.
at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:143)
at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:108)
at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:101)
at org.apache.hadoop.tools.DistCp.createMetaFolderPath(DistCp.java:471)
at org.apache.hadoop.tools.DistCp.<init>(DistCp.java:107)
at com.keedio.hadoop.Mover.main(Mover.java:48)

【问题讨论】:

【参考方案1】:

最后我解决了它,结果是我只需要使用命令 hadoop jar 将应用程序作为 mapreduce 应用程序启动。

【讨论】:

以上是关于Hadoop API 在尝试初始化集群以使用 DistCp 时抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

eclipse怎样使用maven连接hadoop集群

Hadoop跨集群迁移数据(整理版)

Hadoop集群启动但是没有datanode/namenode的情况

我如何使用Python API Pydoop得到Hadoop集群中的实际数据(地图后减少)?

大数据实战——hadoop集群崩溃与故障的初始化恢复

使用JAVA API获取hadoop集群的FileSystem