之前写过一点hadoop的程序,如今为了工作需要,又重新捡起来,此处做个整理吧。
安装环境:centos5.4 vmware7.1 hadoop0.20.2
eclipse-java-galilec-linux-gtk.tar.gz
jdk1.6.0_13
之前安装了hadoop0.23.9 版本太新,然后没有相关的eclipse
jar包,导入了一个eclispe的hadoop-0.20的jar包,报错,该问题做以后的研究,着急用,改用老版本hadoop。。。
用java编写hadoop以前做过,但是python写还没弄过,求弄过的大婶指导~~~
1.ssh-keygen -t rsa(参考网上,设置免验证登录)
1.
SSH无密码验证配置
Hadoop
需要使用SSH 协议,namenode 将使用SSH 协议启动 namenode和datanode
进程,伪分布式模式数据节点和名称节点均是本身,必须配置 SSH localhost无密码验证。
用root用户登录,在家目录下执行如下命令:ssh-keygen
-t rsa
[root@master ~]# ssh-keygen -t
rsa
Generating public/private rsa key pair.
Enter file in which to save the key
(/root/.ssh/id_rsa): &
按回车默认路径 &
Created directory
'/root/.ssh'. &创建/root/.ssh目录&
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c6:7e:57:59:0a:2d:85:49:23:cc:c4:58:ff:db:5b:38 root@master
通过以上命令将在/root/.ssh/ 目录下生成id_rsa私钥和id_rsa.pub公钥。进入/root/.ssh目录在namenode节点下做如下配置:
[root@master .ssh]# cat id_rsa.pub >
authorized_keys
配置完毕,可通过ssh 本机IP 测试是否需要密码登录。
2.jdk 安装
2.1 JDK安装
root 用户登陆,新建文件夹 /usr/program ,下载 JDK 安装包
jdk-6u13-linux-i586.bin,复制到目录/usr/ program
下,在命令行进入该目录,执行命令“./
jdk-6u20-linux-i586.bin”,命令运行完毕,将在目录下生成文件夹jdk1.6.0_20,安装完毕。
2.2 java环境变量配置
root 用户登陆,命令行中执行命令“vi
/etc/profile”,并加入以下内容,配置环境变量(注意/etc/profile 这个文件很重要,后面
Hadoop
的配置还会用到)。
#
set java environment
export
JAVA_HOME=/usr/program/jdk1.6.0_20
export
JRE_HOME=/usr/program/jdk1.6.0_20/jre
export
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
在vi编辑器增加以上内容后保存退出,并执行以下命令使配置生效
chmod +x /etc/profile ;增加执行权限
source /etc/profile ;
配置完毕后,在命令行中输入java
-version,如出现下列信息说明java环境安装成功。
java
version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Server VM (build 16.3-b01, mixed
mode)
3.hadoop安装配置,这一部分提醒自己,为了避免系统出现问题,建立了拥有root权限的用户xx,必要时在sudo到root,之前因为将hadoop
安装到了/usr/目录下,导致用用户xx在启动hadoop时,需要自动建立的logs等目录没有权限,hadoop启动失败。记录下。。。
将hadoop-0.20.2.tar解压到/home/xx/program目录下,使用
tar -zxvf hadoop-0.20.2.tar -C /home/xx/program
-C是解压到指定目录下。
创建软连接 ln -s hadoop-0.20.2
hadoop(随意,不一定非要建,在配置hadoop的时候省点事而已)
进入/hadoop/conf/目录,开始修改hadoop的配置文件
1.
修改hadoop-env.sh文件,引导hadoop找到正确的jdk位置
添加 # set java
environment
export
JAVA_HOME=/usr/program/jdk1.6.0_20
编辑后保存退出。
2.core-site.xml
[root@master conf]# vi
core-site.xml
<!-- Put site-specific property
overrides in this file. -->
fs.default.name//设置NameNode的URI
hdfs://202.173.253.36:9000/
hadoop.tmp.dir//hadoop.tmp.dir是hadoop文件系统依赖的基础配置,很多路径都依赖它。它默认的位置是在/tmp/{$user}下面,但是在/tmp路径下的存储是不安全的,因为linux一次重启,文件就可能被删除。如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。
/usr/local/hadoop/hadooptmp
3.hdfs-site.xml
[root@master conf]# vi
hdfs-site.xml
<!-- Put site-specific property
overrides in this file. -->
dfs.name.dir
/usr/local/hadoop/hdfs/name
dfs.data.dir
/usr/local/hadoop/hdfs/data
dfs.replication
1
1)
dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。
当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
2)
dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。
当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
3)dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。
4.mapred-sit.xml
[root@master conf]# vi
mapred-site.xml
<!-- Put site-specific property
overrides in this file. -->
mapred.job.tracker
202.173.253.36:9001
mapred.local.dir
/usr/local/hadoop/mapred/local
mapred.system.dir
/tmp/hadoop/mapred/system
4./bin/hadoop namenode -format
5.启动hadoop
1.hadoop
目录下/bin/start-all.sh 启动hadoop
2.jps 查看namenode进程
3.查看节点状态:
/hadoop
dfsadmin -report
4.发现没能正常启动,出现retye 次数的提示 然后重新格式化了节点
异常解答参考:http://blog.sina.com.cn/s/blog_7f1700e70100xqiy.html
5.在hadoop根目录下有一个hadoop的测试程序
运行hadoop
jar hadoop-0.20.2-examples.jar wordcount input output 执行
注意,首先要创建input目录,并拷贝一个文件进入input目录下:hadoop fs -copyFromLocal file
/input
本次运行报错,提示没有hdfs://localhost:9000/user/yj/input 目录
于是又创建了一个/home/yj/input 目录,注意:output目录是hadoop自行创建的,不能自己创建,否则会报错。
参考:http://www.linuxidc.com/Linux/2011-04/34001.htm
http://blog.csdn.net/flyqwang/article/details/7244552
http://www.cnblogs.com/siwei1988/archive/2012/07/12/2588464.html
http://www.cnblogs.com/tangtianfly/archive/2012/04/11/2441760.html