Architecture

hadoop入门者可能会犯的一个低级错误:为什么页面上看不到正在运行的job?

我按pseudo mode启动了hadoop, 在java代码里将input/output文件都改成了hdfs://localhost/…, 在eclipse里启动Job也成功了,但为什么 http://localhost:50030/jobtracker.jsp里看不到我的job呢? 这个错误的确很低级。对hadoop服务器来说,hdfs服务和mapreduce服务是两个独立的服务,你启动Job成功了,只意味着你的客户端成功连上了hdfs服务,不代表你正在使用hadoop的mapreduce服务。。。

搭建Hadoop的Pseudo-Distributed Mode环境(二) — 运行一个Map/Reduce任务

在 上一篇文章里我们说了怎么搭建Pseudo环境本身,现在应该在这个环境上真正跑一下MapReduce任务了。 关于MapReduce程序,我们可以直接用 这里贴的代码,有些地方要改一下: 将输入、输出文件改成hdfs://localhost/… //Coupon11LogJobMain String inputFile = “hdfs://localhost/home/kent/coupon11/coupon11.log”; String outDir = “hdfs://localhost/home/kent/coupon11/output” + System.currentTimeMillis(); 当然,你要把输入文件复制到hdfs系统中 $hadoop dfs -copyFromLocal /home/kent/coupon11/coupon11.log hdfs://localhost/home/kent/coupon11/coupon11.log 配置maven assembly插件,以便把程序以及所有lib打包成一个单个的jar文件 <!– pom.xml –> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> 编译打包 $mvn assembly:assembly 将jar文件提交给MapReduce执行 $hadoop jar coupon11logs-1.0-SNAPSHOT-jar-with-dependencies.jar coupon11log.Coupon11LogJobMain 最后,从web控制台监控job/task的状态: http://localhost:50030/

[Hadoop]宁要少量大文件,不要大量小文件

摘自象书 宁要少量大文件,不要大量小文件(比如HDFS block还小若干量级) 因为:   1.一个文件就要一个map task   2.文件太多就需要很多map task   3.运行map task有额外开销   4.运行大量map task会带来过多开销 所以:   不要大量小文件

Hadoop: 为什么报“Retrying connect to server: localhost/127.0.0.1:8020”

我明明把端口配成了8021,为什么客户端还会连8020? 很有可能是你的NameNode并没有起起来,可以jps看一下有没有这样一行: 引用 4245 NameNode 如果没有,去$HADOOP_INSTALL/logs里看一下相关的NameNode日志。按经验,如果你用的pseudo模式并且hadoop.tmp.dir没有显示设置,那很有可能是因为你的hdfs环境已经被破坏,因为hdfs默认把文件放/tmp目录下,/tmp很不可靠。 这种情况下,你应该重新格式化一下hdfs文件系统

HDFS NameNode的备份

据象书说,有两种模式:     1. 直接设置,将NameNode中的每一个改变都传达到其他存储系统中。这个可以保证强一致性。   2. 使用Secondary NameNode,定期复制数据。 由于是“定期”,所以在当机时一定会丢失数据。 更多细节待以后补充。

HDFS API示例代码

无干货,仅供复制 public class HdfsExample { public static void main(String[] args) throws IOException { String dir = "/home/kent"; String fileUrl = "hdfs://localhost" + dir + "/" + System.currentTimeMillis() + "hdfsExample.txt"; FileSystem fs = FileSystem.get(URI.create(fileUrl), new Configuration()); // create a file System.out.println("Creating hdfs file : " + fileUrl); Path path = new Path(fileUrl); FSDataOutputStream out = fs.create(path); …

HDFS API示例代码 Read More »