技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> hadoop笔记 (1):安装和配置

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

浏览:1564次  出处信息

记录一下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. Facebook的实时Hadoop系统    (阅读:10520)
  2. hadoop rpc机制 && 将avro引入hadoop rpc机制初探    (阅读:5060)
  3. Hadoop的map/reduce作业输入非UTF-8编码数据的处理原理    (阅读:4446)
  4. Hadoop超级安装手册    (阅读:3912)
  5. Hadoop集群间Hadoop方案探讨    (阅读:3680)
  6. 百度是如何使用hadoop的    (阅读:3625)
  7. 使用hadoop进行大规模数据的全局排序    (阅读:3392)
  8. Hadoop安装端口已经被占用问题的解决方法    (阅读:2886)
  9. Hadoop现有测试框架探幽    (阅读:2802)
  10. 分布式计算平台Hadoop 发展现状乱而稳定的解读    (阅读:2739)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1