hadoop笔记 (1):安装和配置
记录一下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
建议继续学习:
- Facebook的实时Hadoop系统 (阅读:10599)
- hadoop rpc机制 && 将avro引入hadoop rpc机制初探 (阅读:5115)
- Hadoop的map/reduce作业输入非UTF-8编码数据的处理原理 (阅读:4666)
- Hadoop超级安装手册 (阅读:3993)
- Hadoop集群间Hadoop方案探讨 (阅读:3755)
- 百度是如何使用hadoop的 (阅读:4045)
- 使用hadoop进行大规模数据的全局排序 (阅读:3462)
- Hadoop安装端口已经被占用问题的解决方法 (阅读:2973)
- Hadoop现有测试框架探幽 (阅读:2810)
- 分布式计算平台Hadoop 发展现状乱而稳定的解读 (阅读:2818)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:ou 来源: ou的笔记ou的笔记
- 标签: hadoop
- 发布时间:2012-09-17 19:04:47
- [71] IOS安全–浅谈关于IOS加固的几种方法
- [70] Twitter/微博客的学习摘要
- [65] 如何拿下简短的域名
- [64] android 开发入门
- [63] Go Reflect 性能
- [62] find命令的一点注意事项
- [60] 流程管理与用户研究
- [59] 读书笔记-壹百度:百度十年千倍的29条法则
- [59] 图书馆的世界纪录
- [58] Oracle MTS模式下 进程地址与会话信