vmware版本8.0.4 build-744019 首先准备3台虚拟机

Alt text

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 ,''''''''''''':'''''''''''''''''':'''''''''''''''''''''''''''''''''''|
 |    usage    |        IP        |             Hostname              |
 |             |                  |                                   |
 |'''''''''''''|''''''''''''''''''|'''''''''''''''''''''''''''''''''''|
 | namenode    | 192.168.174.132  |           mdn2.net                |
 |             |                  |                                   |
 |'''''''''''''|''''''''''''''''''|'''''''''''''''''''''''''''''''''''|
 | datanode01  | 192.168.174.135  |        mdn2datanode1.net          |
 |             |                  |                                   |
 |'''''''''''''|''''''''''''''''''|'''''''''''''''''''''''''''''''''''|
 | datanode02  | 192.168.174.136  |        mdn2datanode2.net          |
 |             |                  |                                   |
  ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

  (2014-02-27注意取的名不要出现下划线,否则hive会报错)

Ps: 为节省资源关闭点不必要的服务

1
2
3
4
#!/bin/bash
for SERVICES in abrtd acpid auditd avahi-daemon cpuspeed haldaemon mdmonitor messagebus udev-post;
do /sbin/chkconfig ${SERVICES} off;
done

准备工作

先安装JDK1.6 linux:先把已经安装的openjdk卸载,安装sun jdk1.6 (j2se就够了)

1
2
3
4
5
#rpm -qa | grep jdk
java-1.6.0-openjdk-1.6.0.0-1.28.1.10.9.el5_8
#rpm -e java-1.6.0-openjdk-1.6.0.0-1.28.1.10.9.el5_8
#sudo chmod +x jdk-6u35-linux-x64-rpm.bin
#./jdk-6u35-linux-x64-rpm.bin

freebsd:直接在/usr/ports/java/diablo-jdk16,不要装jdk16,打好几个补丁还编译通不过,浪费时间!)

hadoop所有操作都是用hadoop帐号,下面添加

1
2
3
4
5
6
7
8
linux:# groupadd hadoop
freebsd:# pw groupadd hadoop
linux:# useradd -r -g hadoop -d /home/hadoop -m -s /bin/bash hadoop
freebsd:# pw adduser hadoop -g hadoop -d /home/hadoop -m -s /bin/bash

all:# mkdir -p /u01/app
all:# chgrp -R hadoop /u01/app
all:# chown -R hadoop /u01/app

环境变量

1
2
3
all:$ vi ~/.profile
all:export HADOOP_HOME=/u01/app/hadoop
all:export HBASE_HOME=/u01/app/hbase

(补充2014-2-19,也可以放到~/.bashrc中,~/.profile有时不能加载比较奇怪)

切换到hadoop帐号,进行免密码的ssh登录设置

1
2
3
4
su hadoop
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

此外,各台机器之间的信任也要做好,推荐用ssh-copy-id来做,很简单用“ssh-copy-id hadoop@机器名”就可以了。
到此准备工作完成

安装Hadoop

1
2
3
all:$ cd /u01/app
all:$ tar zxf hadoop-0.20.203.0rc1.tar.gz
all:$ ln -s hadoop-0.20.203.0 hadoop

正式开始

编辑所有机器的/etc/hosts文件(最好也编辑一下这个文件,不是必须,centos下为/etc/sysconfig/network,bsd的要设置/etc/rc.conf) (PS:也可以先在namenode上编辑好了,分发到其他机器上去)

1
2
3
4
5
6
7
8
# Do not remove the following line, or various programs
# that require network functionality will fail.

127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.174.132 mdn2.net
192.168.174.135 mdn2datanode1.net
192.168.174.136 mdn2datanode2.net

假定已经安装好了JAVA,编辑hadoop帐号的profile文件加入如下代码(以下的/usr/java/jdk1.6.0_37/为linux下java的可能的路径,freebsd下如默认安装diablo-jdk16的话,应该是/usr/local/diablo-jdk1.6.0/)

1
2
3
4
export HADOOP_HOME=/u01/app/hadoop
export HBASE_HOME=/u01/app/hbase
export PATH="/usr/java/jdk1.6.0_37/bin/:$PATH"
export JAVA_HOME="/usr/java/jdk1.6.0_37/"

下载hadoop解压之后,在hadoop-env.sh指定java的目录(以下的/usr/java/jdk1.6.0_37/为linux下java可能的路径,freebsd下如默认安装diablo-jdk16的话,应该是/usr/local/diablo-jdk1.6.0/)

1
export JAVA_HOME=/usr/java/jdk1.6.0_37/

再编辑core-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://mdn2.net:9024</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/u01/app/hadoopTmp</value>
    </property>
</configuration>

说明:
1)fs.default.name为hdfs默认的namenode的地址
2)hadoop.tmp.dir是hadoop文件系统依赖的基础配置,很多路径都依赖它。它默认的位置是在/tmp/{$user}下面,在local和hdfs都会建有相同的目录,但是在/tmp路径下的存储是不安全的,因为linux一次重启,文件就可能被删除。导致namenode启动不起来。

再编辑hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/u01/app/hdfsdata</value>
    </property>
</configuration>

注意:dfs.data.dir为hdfs实际存放数据的路径,这个配置只对本地有效,中间可以用,连接多个目录,启动hdfs时该文件夹会自行创建,如果手动创建,请保证权限为755

master里

1
mdn2.net

slaves里

1
2
mdn2datanode1.net
mdn2datanode2.net

注意点: 修改hadoop-0.20.203.0/bin下的hadoop.

1
vi  hadoop

查找 –jvm . vi 下的命令模式: :/-jvm 将-jvm server改成 –server . 因为JDK1.6已经废除了一个参数-jvm,如果不修改的话,无法启动数据节点。

到namenode上格式化hdfs

1
bin/hadoop namenode -format

注意9024为hdfs通讯端口,完全分布式环境下,可以直接将防火墙关闭

1
2
sudo /etc/init.d/iptables stop
sudo /sbin/chkconfig iptables off

启动:

1
bin/start-all.sh

或者只启动dfs和mapreduce

1
2
bin/start-dfs.sh
bin/start-mapred.sh

最后发一个jps的进程图

Alt text

发表评论