IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

hadoop笔记 (1):安装和配置

ou的笔记ou的笔记 2012-09-17 19:04:47 累计浏览 2,162 次
本机暂存

记录一下hadoop集群的搭建过程,一共3台机器,操作系统都是debian 6,hadoop版本是1.0.3,jre是源里的openjdk-6。hadoop官网的说明挺详细,就是不能快速搭建出一个能跑的环境。在网上找到一篇文章(见参考资料[1]),虽然文章中用的是0.20版本,但是在1.0.3上也适用。

这里使用master,slave1和slave2分别作为三台机器的主机名。为了操作方便,每台机器上都有一个用户hadoop,密码都一样。以下的配置操作都在master上进行。

hadoop的配置

把下载到的hadoop-1.0.3.tar.gz解压到hadoop的家目录下,建立一个软链接hadoop指向解压得到的目录hadoop-1.0.3,这样以后更新只需重新建立软链接指向新版本即可。

进入解压后的目录,根据实际情况修改conf/hadoop-env.sh中的JAVA_HOME,使其指向jdk的安装目录:

export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

在1.0.3版本中不需要HADOOP_HOME这个环境变量,如果设置了这个变量执行命令的时候会提示”Warning: $HADOOP_HOME is deprecated.”。

然后修改conf/core-site.xml:

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<!-- Put site-specific property overrides in this file. -->
 
<configuration>
    <property>
        <!-- 用于dfs命令模块中指定默认的文件系统协议 -->
        <name>fs.default.name</name>
        <value>hdfs://master:9000/</value>
    </property>
</configuration>

修改conf/hdfs-site.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<!-- Put site-specific property overrides in this file. -->
 
<configuration>
    <property>
        <!-- DFS中存储文件命名空间信息的目录 -->  
        <name>dfs.name.dir</name>  
        <value>/home/hadoop/data/dfs.name.dir</value>
    </property>
    <property>  
        <!-- DFS中存储文件数据的目录 -->  
        <name>dfs.data.dir</name>   
        <value>/home/hadoop/data/dfs.data.dir</value>  
    </property>  
    <property>  
        <!-- 是否对DFS中的文件进行权限控制(测试中一般用false)-->  
        <name>dfs.permissions</name>  
        <value>false</value>  
    </property>  
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

修改conf/mapred-site.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<!-- Put site-specific property overrides in this file. -->
 
<configuration>
    <property>
        <!-- 用来作JobTracker的节点的(一般与NameNode保持一致) -->
        <name>mapred.job.tracker</name>
        <value>master:9001</value>
    </property> 
    <property>
        <!-- map/reduce的系统目录(使用的HDFS的路径) -->
        <name>mapred.system.dir</name>
        <value>/</value>
    </property>
    <property>
        <!-- map/reduce的临时目录(可使用“,”隔开,设置多重路径来分摊磁盘IO) -->
        <name>mapred.local.dir</name>
        <value>/home/hadoop/data/mapred.tmp.dir</value>
    </property>
</configuration>

最后在conf/masters中添加master机器的ip或主机名:

master

在conf/slaves中添加所有salves,一行一个:

slave1
slave2

其它的配置项使用默认的即可,以上选项具体作用可以参考官网说明和参考资料[1]。

然后把配置好的hadoop-1.0.3整个目录分别复制到每台slave机器的hadoop的家目录下,并且建立软链接hadoop。至此hadoop的配置就完成了。

ssh的配置

因为master需要ssh登录到slave上进行某些操作,因此使用公钥认证的方式,避免手动输入密码。

使用命令

ssh-keygen -t rsa

在$HOME/.ssh下生成两个文件:id_rsa和id_rsa.pub。把id_rsa.pub的内容添加到authorized_keys中:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

把authorized_keys复制到每个slave上的~/.ssh目录下。完成后在master测试一下ssh登录slave1和slave2,这时应该能直接登录而不用手动输入密码了。

启动和停止hadoop

以上配置完后就可以启动hadoop了。先格式化新的hdfs:

$HOME/hadoop/bin/hadoop namenode -format

然后启动hdfs服务:

$HOME/hadoop/bin/start-dfs.sh

最后启动map/reduce:

$HOME/hadoop/bin/start-mapred.sh

停止hadoop时先停止map/reduce服务:

$HOME/hadoop/bin/stop-mapred.sh

再停止hdfs服务:

$HOME/hadoop/bin/stop-dfs.sh

另外也可以用$HOME/hadoop/bin下的start-all.sh和stop-all.sh来启动和停止。

一些问题和解决方法

从网上找到的答案,顺手做的笔记,没记下出处。

Q:执行hadoop -put 时报错:Name node is in safe mode.
A:hadoop dfsadmin -safemode leave

Q:reduce执行到16%或17%时停住不动,查看hadoop-{user}-jobtracker-{host}.log中有这样一条错误提示:Failed fetch notification #1 for map task:
A:在每台机器中的/etc/hosts中填写其它机器的ip和对应的主机名,不管在配置文件中写的是ip还是主机名。

Q:出现错误:File /user/hadoop/test could only be replicated to 0 nodes, instead of 1
A:停止hadoop,删除hdfs目录和/tmp/hadoop-{user}*和/tmp/hsperfdata_{user}/,重新格式化,然后重启hadoop服务。

Q:出现错误:org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory for ttprivate/taskTracker/hadoop/jobcache/job_201207301453_0036/jobToken
at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:381)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:146)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:127)
at org.apache.hadoop.mapred.TaskTracker.localizeJobTokenFile(TaskTracker.java:4271)
at org.apache.hadoop.mapred.TaskTracker.initializeJob(TaskTracker.java:1177)
at org.apache.hadoop.mapred.TaskTracker.localizeJob(TaskTracker.java:1118)
at org.apache.hadoop.mapred.TaskTracker$5.run(TaskTracker.java:2430)
at java.lang.Thread.run(Thread.java:636)
A:重启一下出问题的slave,不行的话同上操作

Q:Caused by: java.lang.OutOfMemoryError: Java heap space
A:修改conf/mapred-site.xml,修改mapred.child.java.opts的值为-Xmx512m或更大。

参考资料

[1] Hadoop集群安装详细步骤|Hadoop安装配置
[2] Hadoop Cluster Setup

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. SmartSprites - 命令行形式的CSS Sprites生成器 (累计阅读 123,894)
  2. Java开发岗位面试题归类汇总 (累计阅读 22,155)
  3. android 开发入门 (累计阅读 19,527)
  4. Linux如何统计进程的CPU利用率 (累计阅读 16,307)
  5. HFile存储格式 (累计阅读 15,970)
  6. 我的 RHCA 之路 (累计阅读 14,011)
  7. Linux内存点滴 用户进程内存空间 (累计阅读 13,228)
  8. 我的PHP,Python和Ruby之路 (累计阅读 13,146)
  9. 给程序员新手的一些建议 (累计阅读 13,087)
  10. Linux 性能监控、测试、优化工具 (累计阅读 13,010)