搭建hadoop也有一段时间了,真是太没有效率了,小小的记录一下。
我的OS是ubuntu11.04,hadoop版本是0.20.203.0,jdk是1.6.0_33。
一共3台电脑:
ip 作用
172.16.95.50 namenode,jobtracker
172.16.95.51 datanode1,tasktracker
172.16.95.52 datanode2,tasktracker
3台电脑通过交换机组成局域网,保证能相互ping通,当然,之前用虚拟机按照同样的做法也成功了,只是要注意VM虚拟机网络连接要用桥接方式,如果是虚拟机,完全可以配置好一台后复制或者克隆~
步入主题:
1.修改hosts
sudo
gedit
/etc/hosts
修改为:
127.0.0.1 localhost 172.16.95.50 namenode 172.16.95.51 datanode1 172.16.95.52 datanode2
sudo
gedit
/etc/hostname
改成相应的主机名,172.16.95.50 的改为namenode,两外两台分别改为datanode1和datanode2.
3.3台主机建立相同的用户,我这里是ubuntu,分组名也是ubuntu。本身我是没有通过创建过程的,因为我在安装系统时就是用的同样的用户名ubuntu,这里提供创建用户和用户组的方式:
先创建ubuntu用户组:
sudo
addgroup ubuntu
sudo
adduser -ingroup ubuntu ubuntu
给ubuntu用户添加权限,打开/etc/sudoers文件:
sudo
gedit
/etc/sudoers
ubuntu ALL=(ALL:ALL) ALL
4.安装jdk
两种方法,一种是自己下载jdk安装包,然后手动安装,配置环境变量,第二种是用ubuntu强大的apt-get install搞定,自选。
方法一:
我这里是自己下载的jdk的bin文件,然后
(1)把jdk安装文件拷贝到/home/ubuntu目录下,然后安装
cp jdk-6u33-linux-i586.bin /home/ubuntu
cd/home/ubuntu
chmodu+x chmod(赋予可执行权限)
./jdk-6u33-linux-i586.bin(安装)
(2)安装已完成修改环境变量并且把java安装到系统
修改/etc/environment如下
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/ubuntu/jdk1.6.0_33/bin:/home/ubuntu/jdk1.6.0_33/jre/bin" CLASSPATH=.:/home/ubuntu/jdk1.6.0_33/lib:/home/ubuntu/jdk1.6.0_33/jre/lib JAVA_HOEM=/home/ubuntu/jdk1.6.0_33
ubuntu下一条命令即可:
sudo
apt-get
install
openjdk-6-jre
查看Java版本确定已经安装到系统:
java-version
如果看到版本说明安装成功。
5.安装ssh
使用命令
sudo
apt-get
install
ssh
openssh-server
sudo
apt-get
install
ssh
6.配置ssh,无密码登录
做这一步之前首先建议所有的机子全部转换为hadoop用户,以防出现权限问题的干扰。
切换的命令为:
su -ubuntu
ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。
1. 创建ssh-key,,这里我们采用rsa方式
ssh
-keygen -t rsa -P
""
2. 进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的;
cd
~/.
ssh
cat
id_rsa.pub >> authorized_keys
7.为namenode安装hadoop(很多步骤可以用图形界面操作,如果喜欢用命令行,这里也提供些命令)
(1)首先下载hadoop,一般会下载到/home/ubuntu/下载里面,进入/home/ubuntu/
将其复制到/home/ubuntu/hadoop下,我之前在/home/ubuntu
新建了一个hadoop文件夹,并且在hadoop文件夹下建立tmp文件夹,以后用到。
sudo
cp
hadoop-0.20.203.0rc1.
tar
.gz
/home/ubuntu/hadoop
解压hadoop-0.20.203.tar.gz;
cd
/home/ubuntu/hadoop
sudo
tar
-zxvf hadoop-0.20.203.0rc1.
tar
.gz
sudo
chown
-R ubuntu:ubuntu hadoop-0.20.203.0
(2)修改hadoop的hadoop-env.sh文件
配置conf/hadoop-env.sh(找到#export JAVA_HOME=...,去掉#,然后加上本机jdk的路径);
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
(这里是用ubuntu自动安装的路径,如果是手动安装的,选择自己的jdk安装路径,我的是
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.default.name</name> <value>hdfs://namenode:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/ubuntu/hadoop/tmp</value> </property> </configuration>(4)配置mapred-site.xml文件
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapred.job.tracker</name> <value>namenode:9001</value> </property> <property> <name>mapred.local.dir</name> <value>/home/ubuntu/hadoop/tmp</value> </property> </configuration>
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.name.dir</name> <value>/home/ubuntu/hadoop/name1, /home/ubuntu/hadoop/name2</value> <description> </description> </property> <property> <name>dfs.data.dir</name> <value>/home/ubuntu/hadoop/data1, /home/ubuntu/hadoop/data2</value> <description> </description> </property> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>(注意tmp文件夹已经建立,这里的name1,name2,data1,data2不要建立,格式化的时候自动生成)
scp
/home/ubuntu/.
ssh
/id_rsa
.pub ubuntu@datanode1:/home/ubuntu/
.
ssh
/
scp
/home/ubuntu/.
ssh
/id_rsa
.pub ubuntu@datanode2:/home/ubuntu/
.
ssh
/
cat
/home/ubuntu/
.
ssh
/id_rsa
.pub >> /home/ubuntu/
.
ssh
/authorized_keys
scp
-r
/home/ubuntu/
hadoop
ubuntu@datanode1
:
/home/ubuntu
scp
-r
/home/ubuntu/
hadoop
ubuntu@datanode2
:
/home/ubuntu
hadoop-0.20.203.0
目录下建立一个没有名称的目录。
starting namenode, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-namenode-namenode.out datanode2: starting datanode, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-datanode-datanode2.out datanode1: starting datanode, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-datanode-datanode1.out namenode: starting secondarynamenode, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-secondarynamenode-namenode.out starting jobtracker, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-jobtracker-namenode.out datanode1: starting tasktracker, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-tasktracker-datanode1.out datanode2: starting tasktracker, logging to /home/ubuntu/hadoop/hadoop-0.20.203.0/bin/../logs/hadoop-ubuntu-tasktracker-datanode2.out
9393 NameNode 9670 JobTracker 9592 SecondaryNameNode 9779 Jps在datanode输入jps会显示有Datanode和Tasktracker.
stopping jobtracker datanode1: stopping tasktracker datanode2: stopping tasktracker stopping namenode datanode1: stopping datanode datanode2: stopping datanode namenode: stopping secondarynamenode