Tag: hadoop

Hadoop:将多个IP地址绑定到群集NameNode

我在Softlayer上有一个四节点的Hadoop集群。 主(NameNode)具有用于外部访问的公共IP地址和用于群集访问的专用IP地址。 从节点(datanode)具有私有IP地址,我正在尝试连接到主节点,而无需为每个从节点分配公共IP地址。 我已经意识到将fs.defaultFS设置为NameNode的公共地址允许外部访问,除了NameNode只侦听传入连接的地址,而不是私有地址。 所以我在datanode日志中得到ConnectionRefusedexception,因为他们试图连接NameNode的私有IP地址。 我认为解决方案可能是将公共和私有IP地址都设置为NameNode,以便保留外部访问并允许我的从属节点也连接。 那么有没有办法可以将这两个地址绑定到NameNode,以便它们同时监听? 编辑:Hadoop版本2.4.1。

hdfs中的文件路径

我想从Hadoop文件系统中读取该文件。 为了实现文件的正确路径,我需要hdfs主机名和端口地址。 所以最后我的文件路径看起来像 Path path = new Path(“hdfs://123.23.12.4344:9000/user/filename.txt”) 现在我想知道提取HostName =“123.23.12.4344”和端口:9000? 基本上,我想访问Amazon EMR上的FileSystem但是,当我使用时 FileSystem fs = FileSystem.get(getConf()); 我明白了 当你应该调用FileSystem.get(uri,conf)来获取支持你的路径的文件系统时,你可能会调用FileSystem.get(conf) 所以我决定使用URI。 (我必须使用URI)但我不知道如何访问URI。

线程“main”中的exceptionjava.lang.UnsupportedClassVersionError,不支持的major.minor版本52.0

我试图在hadoop – 1.0.4上运行WordCount示例,我收到以下错误: Exception in thread “main” java.lang.UnsupportedClassVersionError: WordCount : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:791) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at org.apache.hadoop.util.RunJar.main(RunJar.java:149) 我使用以下java版本: java version “1.7.0_11” Java(TM) SE Runtime Environment (build 1.7.0_11-b21) […]

找不到Hadoop命令

我已经在linux机器上安装并配置了hadoop。现在我正在尝试运行一个示例MR作业。我已经通过命令/usr/local/hadoop/bin/start-all.sh启动了hadoop并且输出是 namenode running as process 7876. Stop it first. localhost: datanode running as process 8083. Stop it first. localhost: secondarynamenode running as process 8304. Stop it first. jobtracker running as process 8398. Stop it first. localhost: tasktracker running as process 8612. Stop it first. 所以我认为我的hadoop配置成功。但是当我试着在命令下面运行时它正在给予 jeet@jeet-Vostro-2520:~$ hadoop fs -put gettysburg.txt /user/jeet/getty/gettysburg.txt hadoop: command not found […]

是否可以使用没有hadoop依赖的apache mahout?

是否可以使用Apache mahout而不依赖于Hadoop。 我想在单个计算机上使用mahout算法,只在我的Java项目中包含mahout库,但我根本不想使用hadoop,因为无论如何我将在单个节点上运行。 那可能吗?

如何在hadoop文件系统上设置Java程序的类路径

我想弄清楚如何设置引用HDFS的类路径? 我找不到任何参考。 java -cp “how to reference to HDFS?” com.MyProgram 如果我不能引用hadoop文件系统,那么我必须在每个hadoop机器上的$ HADOOP_HOME下复制所有引用的第三方库/ jar …但我想通过将文件放到hadoop文件系统来避免这种情况。 这可能吗? 用于程序运行的示例hadoop命令行(我的期望是这样的,也许我错了): hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-1.0.3.jar -input inputfileDir -output outputfileDir -mapper /home/nanshi/myprog.java -reducer NONE -file /home/nanshi/myprog.java 但是,在上面的命令行中,我如何添加java classpath? 喜欢-cp“/home/nanshi/wiki/Lucene/lib/lucene-core-3.6.0.jar:/home/nanshi/Lucene/bin”

反向排序减速键

将Map Output键以相反的顺序输入减速器的最佳方法是什么? 默认情况下,reducer按键的升序接收所有键。 任何帮助或评论广泛赞赏。 简单来说,在正常情况下,如果地图发出密钥1,4,3,5,2,则减速器接收与1,2,3,4,5相同的密钥。 我希望减速机能够获得5,4,3,2,1 。

从FSDataInputStream转换为FileInputStream

我是Hadoop HDFS的新手,而且Java非常生疏,我需要一些帮助。 我正在尝试从HDFS读取文件并计算此文件的MD5哈希值。 一般的Hadoop配置如下。 private FSDataInputStream hdfsDIS; private FileInputStream FinputStream; private FileSystem hdfs; private Configuration myConfig; myConfig.addResource(“/HADOOP_HOME/conf/core-site.xml”); myConfig.addResource(“/HADOOP_HOME/conf/hdfs-site.xml”); hdfs = FileSystem.get(new URI(“hdfs://NodeName:54310”), myConfig); hdfsDIS = hdfs.open(hdfsFilePath); 函数hdfs.open(hdfsFilePath)返回FSDataInputStream 问题是我只能从HDFS中获取FSDataInputStream ,但我想从中获取一个FileInputStream 。 下面的代码执行散列部分,并根据我在StackOverflow上找到的东西进行改编(现在似乎无法找到它的链接)。 FileInputStream FinputStream = hdfsDIS; // <—This is where the problem is MessageDigest md; try { md = MessageDigest.getInstance("MD5"); FileChannel channel = FinputStream.getChannel(); ByteBuffer buff […]

我怎样才能以编程方式获取Hadoop在Web界面中显示的所有作业跟踪器和任务跟踪器信息?

我正在使用Cloudera的Hadoop发行版CDH-0.20.2CDH3u0。 有没有什么方法可以获得诸如jobtracker状态,tasktracker状态,使用在hadoop框架之外运行的JAVA程序的计数器等信息? 我尝试使用JMX进行监听,但hadoop提供的有关Jobtracker,tasktracker和datanode的信息非常少。 它不提供与运行作业状态相关的任何JMX属性,如映射百分比完成,减少完成百分比,任务完成百分比,尝试完成百分比,计数器状态等。 此外,我尝试使用hadoop转储的指标日志。 但它也不包含任何关于地图/减少完成百分比,完成任务百分比的信息。 我认为,应该有一些替代方法来获得所有这些东西。 请回复。

如何生成海量数据?

我正在用nutch和hadoop做一些测试,我需要大量的数据。 我想从20GB开始,到100GB,500GB,最终达到1-2TB。 问题是我没有这么多的数据,所以我正在考虑如何制作它。 数据本身可以是任何类型。 一个想法是获取一组初始数据并复制它。 但它不够好,因为需要彼此不同的文件(相同的文件被忽略)。 另一个想法是编写一个程序,用于创建具有虚拟数据的文件。 还有其他想法吗?