一、前言
成为研究僧(研究生),有幸到BOSS冯老师手下接受“再改造”,一直“风闻”冯BOSS下面的学生很“严谨”,现在发现真的很严谨、很累。每周两次例会不说了,现在接手的项目就让我彻底崩溃,毁我“三观”啊。
好了废屁不扯了,进入正题。现在正在做“海量异构数据整合”的这样研究性课题,需要使用到hadoop平台、arcgis平台,还有神马oracle、weblogic....后续会用到神马我真心不知道。反正我现在的任务就是把hadoop平台搭建出来并把文件存储封装成API/接口给上层调用,对于数据整合这部分.......苍天啊大地啊、数据挖掘真的好难。苦%>_<%泪奔......
二、运行环境与准备工作(非安装过程,用于随时查看过程的)
在做集群开发之前我已经实现了伪分布式hadoop(单一ubuntu 11 下)以及分布式hadoop(redhat9下,使用root权限),这两天搞异OS(Ubuntu做Master,redhat做Slave,使用同一的普通用户权限,把我搞得特别崩溃),就是搞不起来,到了start-dfs.sh这一段直接告诉我permission denied。偶滴神呢......
我现在开始尝试安装1Master 3Slave的hadoop集群,给出配置。
1
2
3
4
5
6
7
8
|
实体机
OS windows
7
x64 旗舰版
内存 8G
CPU i5-
2450
虚拟机
vmware workstation
8
|
虚拟机配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
网络环境
实体机 无线网+静态IP
虚拟机
网卡 VMware Virtual Ethernet Adapter
for
VMnet8
模式 NAT转换
地址
IPADDR
192.168
.
68.1
NETMASK
255.255
.
255.0
NAT Setting
GATEWAY
192.168
.
68.2
Subnet IP
192.168
.
68.0
NETMASK
255.255
.
255.0
DHCP Setting
Subnet IP
192.168
.
68.0
NETMASK
255.255
.
255.0
start IP
192.168
.
68.128
end IP
192.168
.
68.254
|
软件准备
1
2
3
4
5
6
7
|
hadoop
-0.20
.
2
http://hadoop.apache.org/core/releases.html
jdk
-6
*-linux-x
64
*.bin
(下载JDK,不是JRE。要
1.6
以上,
1.6
一下会出问题)
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase
6
-419409
.html#jre
-6
u
25
-oth-JPR
ubuntu
-12.04
.
1
-desktop-i
386
Ubuntu官网
|
IP以及名称分配
1
2
3
4
5
|
节点名称 IP段 节点类型 职责
master 192.168.68.200 Namenode Namenode+Jobtracker
slave1 192.168.68.131 Datanode Datanode+Tasktracker
slave2 192.168.68.132 Datanode Datanode+Tasktracker
slave3 192.168.68.133 Datanode Datanode+Tasktracker
|
统一用户以及文件安装存放路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
用户名 hadoop
密 码 hadoop123
群 组 hadoop
文件夹 /home/hadoop
安装路径 /home/hadoop/hadoopinstall/
临时文件 /home/hadoop/tmp/
SSH密钥 /home/hadoop/.ssh/
JDK安装(一下二选一,具体根据你下载的JDK包模式)
(1)./jdk-6u18-linux -x64-rpm.bin
(2)./jdk-6u18-linux -x64.bin
区别
./jdk-6u18-linux -x64-rpm.bin 会自动安装在/usr/java 下。
./jdk-6u18-linux- x64.bin 生成的 jdk1.6.0_18 文件夹需要手动放到/usr/java 或者其它自定义目录下。
|
三、一些基础知识
(1)Namenode和Datanode一些基本理解
对于 Hadoop 来说,在 HDFS 看来,节点分为 Namenode 和Datanode, 其中 Namenode 只有一个,Datanode 可以是很多;
在 MapReduce 看来,节点又分为 Jobtracker 和 Tasktracker,其中Jobtracker 只有一个,Tasktracker 可以是很多。
所以通常有两台master,一台作为 NameNode,一台作为 JobTracker,剩下的都为slaves,同时当做 DataNode 和 TaskTracker 使用。
当然也可以将 NameNode 和 JobTracker 都放在一台 master 上面。
四、安装过程一
(1)虚拟机安装ubuntu
(我选择的是安装语言汉语安装,键盘布局英语美国)
(姓名snowfigure密码hadoop123)
(2)配置master的IP为静态IP地址
1
2
3
4
5
|
IPADDR 192.168.68.200
GATEWAY 192.168.68.2
NETMASK 255.255.255.0
ROUTE 192.168.68.2
DNS 192.168.68.2
|
(3)安装ssh
1
|
sudo
apt-get
install
ssh
|
(4)安装Vmtools
【文件操作参考http://www.cnblogs.com/lwm-1988/archive/2011/09/13/2174538.html 】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
有个文件,先复制到root
/temp
目录下。然后解压安装就行了。详细的安装步骤如下:
先以root身份登入。
VMware Tools所在位置:VMware 安装路径 \VMware\VMware Workstation\linux.iso
[root@rd01 ~]
# mount /cdrom
# 有时可能加载不了,这时就要先将系统关闭,再手动指定 ISO 映像,看下图
[root@rd01 ~]
# cd /cdrom
[root@rd01 ~]
# ls -a
[root@rd01 ~]
# cp VMwareTools-5.5.1-19175.tar.gz /tmp
[root@rd01 ~]
# cd /tmp
[root@rd01 ~]
# tar zxpf VMwareTools-5.5.1-19175.tar.gz
[root@rd01 ~]
# cd vmware-tools-distrib
[root@rd01 vmware-tools-distrib]
# ./vmware-install.pl
Creating a new installer database using the tar3
format
.
Installing the content of the package.
# 安装过程的画面,全部使用默认值,一直按 Enter 就对了
# 然后重启
|
(5)从windows系统把jdk6和hadoop-0.20.2复制到tmp目录下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
snowfigure@snowfigure-virtual-machine:/tmp$ ll
总用量 126648
drwxrwxrwt 13 root root 4096 9月 24 15:41 ./
drwxr-xr-x 23 root root 4096 9月 24 15:05 ../
drwxrwxrwt 2 lightdm lightdm 4096 9月 24 15:38 at-spi2/
-rwxrw-rw- 1 snowfigure snowfigure 44575568 9月 24 13:19 hadoop-0.20.2.tar.gz*
-rw-rw-r-- 1 snowfigure snowfigure 0 9月 24 15:38 ibus.log
drwxrwxrwt 2 root root 4096 9月 24 15:38 .ICE-unix/
-rwxrw-rw- 1 snowfigure snowfigure 85052342 9月 13 16:45 jdk.bin*
drwx------ 2 snowfigure snowfigure 4096 9月 24 15:38 keyring-8fpbGj/
drwx------ 2 lightdm lightdm 4096 9月 24 15:38 pulse-2L9K88eMlGn7/
drwx------ 2 snowfigure snowfigure 4096 9月 24 15:38 pulse-Md3Lr53do8SK/
drwx------ 2 root root 4096 9月 24 15:38 pulse-PKdhtXMmr18n/
drwx------ 2 snowfigure snowfigure 4096 9月 24 15:38 ssh-dJCuhHiE1862/
-rw-rw-r-- 1 lightdm lightdm 0 9月 24 15:38 unity_support_test.1
drwxrwxrwt 5 root root 4096 9月 24 15:41 VMwareDnD/
drwx------ 2 root root 4096 9月 24 15:38 vmware-root/
drwx------ 2 snowfigure snowfigure 4096 9月 24 15:38 vmware-snowfigure/
-r--r--r-- 1 root root 11 9月 24 15:38 .X0-lock
drwxrwxrwt 2 root root 4096 9月 24 15:38 .X11-unix/
snowfigure@snowfigure-virtual-machine:/tmp$
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
snowfigure@snowfigure-virtual-machine:
/tmp
$
sudo
cp
jdk.bin
/usr/local
snowfigure@snowfigure-virtual-machine:
/tmp
$
cd
/usr/local
snowfigure@snowfigure-virtual-machine:
/usr/local
$ ll
总用量 83100
drwxr-xr-x 10 root root 4096 9月 24 15:44 ./
drwxr-xr-x 10 root root 4096 8月 18 06:05 ../
drwxr-xr-x 2 root root 4096 8月 18 06:05 bin/
drwxr-xr-x 2 root root 4096 8月 18 06:05 etc/
drwxr-xr-x 2 root root 4096 8月 18 06:05 games/
drwxr-xr-x 2 root root 4096 8月 18 06:05 include/
-rwxr--r-- 1 root root 85052342 9月 24 15:44 jdk.bin*
drwxr-xr-x 3 root root 4096 8月 18 06:05 lib/
lrwxrwxrwx 1 root root 9 9月 24 14:57
man
-> share
/man/
drwxr-xr-x 2 root root 4096 8月 18 06:05 sbin/
drwxr-xr-x 7 root root 4096 8月 18 06:08 share/
drwxr-xr-x 2 root root 4096 8月 18 06:05 src/
snowfigure@snowfigure-virtual-machine:
/usr/local
$
|
6、安装JDK到/usr/local目录下
1
2
3
|
snowfigure@snowfigure-virtual-machine:
/usr/local
$
sudo
-sH
root@snowfigure-virtual-machine:
/usr/local
# chmod +x jdk.bin
root@snowfigure-virtual-machine:
/usr/local
# ./jdk.bin
|
当然也可以再usr目录下建立java文件夹,然后把jdk让进去。
1
2
3
4
5
6
7
|
root@snowfigure-virtual-machine:
/usr/local/jdk1
.6.0_25
# mkdir /usr/java
root@snowfigure-virtual-machine:
/usr/local/jdk1
.6.0_25
# mv
root@snowfigure-virtual-machine:
/usr/local/jdk1
.6.0_25
# cd ../
root@snowfigure-virtual-machine:
/usr/local
# ls
bin etc games include jdk1.6.0_25 jdk.bin lib
man
sbin share src
root@snowfigure-virtual-machine:
/usr/local
# mv jdk1.6.0_25/ /usr/java/jdk1.6
root@snowfigure-virtual-machine:
/usr/local
#
|
7、修改/etc/profile文件,添加全局变量
1
2
3
4
5
|
root@snowfigure-virtual-machine:
/usr/java
# gedit /etc/profile
(gedit:2647): GLib-GIO-WARNING **: Missing callback called fullpath =
/root/
.
local
/share/recently-used
.xbel
root@snowfigure-virtual-machine:
/usr/java
# cat /etc/profile
|
添加内容分
1
2
3
|
export
JAVA_HOME=
/usr/java/jdk1
.6
export
PATH=$PATH:$JAVA_HOME
/bin
export
CLASSPATH=.:$JAVA_HOME
/lib
|
添加后内容
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
27
28
29
30
31
32
33
|
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if
[
"$PS1"
];
then
if
[
"$BASH"
] && [
"$BASH"
!=
"/bin/sh"
];
then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if
[ -f
/etc/bash
.bashrc ];
then
.
/etc/bash
.bashrc
fi
else
if
[
"`id -u`"
-
eq
0 ];
then
PS1=
'# '
else
PS1=
'$ '
fi
fi
fi
# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.
if
[ -d
/etc/profile
.d ];
then
for
i
in
/etc/profile
.d/*.sh;
do
if
[ -r $i ];
then
. $i
fi
done
export
JAVA_HOME=
/usr/java/jdk1
.6
export
PATH=$PATH:$JAVA_HOME
/bin
export
CLASSPATH=.:$JAVA_HOME
/lib
unset
i
fi
|
然后运行使配置生效
1
|
root@snowfigure-virtual-machine:
/usr/java
# source /etc/profile
|
测试安装是否成功
1
2
3
4
|
root@snowfigure-virtual-machine:
/usr/local
# java -version
java version
"1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) Client VM (build 20.0-b11, mixed mode, sharing)
|
8、修改/etc/hosts文件
原始文件
1
2
3
4
5
6
7
8
9
10
|
127.0.0.1 localhost
127.0.1.1 snowfigure-virtual-machine
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
|
修改后文件
1
2
3
4
5
6
7
8
9
10
11
12
13
|
127.0.0.1 localhost
127.0.1.1 snowfigure
192.168.68.200 master
192.168.68.131 slave1
192.168.68.132 slave2
192.168.68.133 slave3
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
|
修改后貌似需要重启才能完事。没有找到立即生效的指令,求大神帮忙、指教
9、新建hadoop用户
1
2
3
4
5
6
|
root@snowfigure-virtual-machine:/
# useradd hadoop
root@snowfigure-virtual-machine:/
# passwd hadoop
输入新的 UNIX 密码: hadoop123
重新输入新的 UNIX 密码: hadoop123
passwd
:已成功更新密码
root@snowfigure-virtual-machine:/
#
|
上面貌似登陆不了
所以就出现了下面这个了
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
27
|
root@snowfigure-virtual-machine:
/etc
# userdel hadoop
root@snowfigure-virtual-machine:
/etc
# useradd hadoop
root@snowfigure-virtual-machine:
/etc
# passwd hadoop
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd
:已成功更新密码
root@snowfigure-virtual-machine:
/etc
# sudo groupadd hadoop
sudo
: 无法解析主机:snowfigure-virtual-machine
groupadd: group
'hadoop'
already exists
root@snowfigure-virtual-machine:
/etc
# sudo usermod -g hadoop hadoop
sudo
: 无法解析主机:snowfigure-virtual-machine
usermod
:无改变
root@snowfigure-virtual-machine:
/etc
# gedit
root@snowfigure-virtual-machine:
/etc
# gedit /etc/hosts
root@snowfigure-virtual-machine:
/etc
# usermod -g hadoop hadoop
usermod
:无改变
root@snowfigure-virtual-machine:
/etc
# passwd -e hadoop
passwd
: password expiry information changed.
root@snowfigure-virtual-machine:
/etc
# mkdir /home/hadoop
root@snowfigure-virtual-machine:
/etc
# cd /home
root@snowfigure-virtual-machine:
/home
# ls
hadoop snowfigure
root@snowfigure-virtual-machine:
/home
# chmod 700 -r /home/hadoop
chmod
: 无法访问
"700"
: 没有那个文件或目录
root@snowfigure-virtual-machine:
/home
# chmod -r hadoop/
root@snowfigure-virtual-machine:
/home
# chown hadoop:hadoop hadoop/
root@snowfigure-virtual-machine:
/home
#
|
可以登录
切换到hadoop用户登录
10、(1)先安装hadoop吧
*******************************************************************************************************************************
/*下面的做法都有问题,直接使用图形化界面创建就可以了*/
在/home/hadoop文件夹下面新建hadoopinstall文件夹
刚开始遇到这个问题
1
2
3
|
$
sudo
-sH
[
sudo
] password
for
hadoop:
hadoop 不在 sudoers 文件中。此事将被报告。
|
修改方式如下
root登录(我是在snowfigure用户模式下进入root权限的)
1
2
3
4
|
进入超级用户模式。也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。(当然,你也可以直接用root用)
添加文件的写权限。也就是输入命令"chmod u+w /etc/sudoers"。
编辑/etc/sudoers文件。也就是输入命令"vim /etc/sudoers",输入"i"进入编辑模式,找到这一 行:"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名),然后保存(就是先按一 下Esc键,然后输入":wq")退出。
撤销文件的写权限。也就是输入命令"chmod u-w /etc/sudoers"。
|
1
2
|
root ALL=(ALL:ALL) ALL
hadoop ALL=(ALL:ALL) ALL
|
【参考:http://blog.csdn.net/coldwin_415/article/details/4650901 】
/*使用图形化界面创建吧*/
*******************************************************************************************************************************
(2)在hadoop用户下把hadoop安装包复制到/home/hadoop/文件夹下
1
|
hadoop@snowfigure-virtual-machine::~$
tar
-zxvf hadoop-0.20.2.
tar
.gz
|
如果无法向vmware里面复制东西的话,再安装一遍vmtools,或者重启一下就可以。
然后把hadoop-0.20.2重命名为hadoopinstall
1
|
hadoop@snowfigure-virtual-machine:~$
mv
/home/hadoop/hadoop-0
.20.2/
/home/hadoop/hadoopinstall/
|
(3)配置/etc/profile
1
2
3
|
hadoop@snowfigure-virtual-machine:~$
sudo
-sH
[
sudo
] password
for
hadoop:
root@snowfigure-virtual-machine:
/home/hadoop
# gedit /etc/profile
|
添加以下内容
1
2
|
export
HADOOP_HOME=
/home/hadoop/hadoopinstall
export
PATH=$PATH:$HADOOP_HOME
/bin
|
最后内容为
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
27
28
29
30
31
32
33
34
35
|
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if
[
"$PS1"
];
then
if
[
"$BASH"
] && [
"$BASH"
!=
"/bin/sh"
];
then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if
[ -f
/etc/bash
.bashrc ];
then
.
/etc/bash
.bashrc
fi
else
if
[
"`id -u`"
-
eq
0 ];
then
PS1=
'# '
else
PS1=
'$ '
fi
fi
fi
# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.
if
[ -d
/etc/profile
.d ];
then
for
i
in
/etc/profile
.d/*.sh;
do
if
[ -r $i ];
then
. $i
fi
done
export
JAVA_HOME=
/usr/java/jdk1
.6
export
PATH=$PATH:$JAVA_HOME
/bin
export
CLASSPATH=.:$JAVA_HOME
/lib
export
HADOOP_HOME=
/home/hadoop/hadoopinstall
export
PATH=$PATH:$HADOOP_HOME
/bin
unset
i
fi
|
然后source /etc/profile使变化生效
1
|
root@snowfigure-virtual-machine:
/home/hadoop
# source /etc/profile
|
(4)修改 Hadoop 的配置文件
//masters 文件修改成
1
|
master
|
//slaves 文件修改成
1
2
3
|
slave1
slave2
slave3
|
//hadoop-env.sh 文件修改成
1
2
3
|
# The java implementation to use. Required.
# export JAVA_HOME=/usr/lib/j2sdk1.5-sun
export JAVA_HOME=/usr/java/jdk1.6
|
okay,公共使用的环境都已经搭配好了,现在修改一下网络名,然后把虚拟机复制三份做slave,并在三份slave里面分别修改网络名、静态IP地址等
然分开别配置master和slave的hadoop配置文件(可以先复制一个slave,然后slave修改完成后再把修改后的slave复制成两份)
修改主机名方法一(测试没有通过)
1
2
3
|
设置主机名称(
hostname
)
使用下面的命令来查看当前主机的主机名称:
sudo
/bin/hostname
使用下面的命令来设置当前主机的主机名称:
sudo
/bin/hostname
newname
|
【参考http://blog.csdn.net/jiusifeng/article/details/7583555 】
修改主机名方法二(测试通过)
1
|
hadoop@snowfigure-virtual-machine:
/etc
$
sudo
gedit
hostname
|
Linux主机名是在安装Linux操作系统的过程中设定的,并作为网络中的某一台主机的唯一标志,但是在安装好Linux系统后,如果想修改主机名,该怎么办呢?本文介绍基于Ubuntu Desktop 9.04。
1、快速查看主机名
在Ubuntu系统中,快速查看主机名有两种方法:一是打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后;二是在终端窗口中输入命令:hostname或uname –n,均可以查看到当前主机名。
2、临时修改主机名
修改主机名最为快速的方法就是使用命令“hostname 新主机名”来改变当前主机名,其中“新主机名”可以用任何合法字符串来表示。不过采用这种方式,新主机名并不保存在系统中,重启系统后主机名将恢复为原先的主机名称。
3、永久修改主机名
在Ubuntu系统中永久修改主机名也比较简单。主机名存放在/etc/hostname文件中,修改主机名时,编辑hostname文件,在文件中输入新的主机名并保存该文件即可。重启系统后,参照上面介绍的快速查看主机名的办法来确认主机名有没有修改成功。
值得指出的是,在其他Linux发行版中,并非都存在/etc/hostname文件。如Fedora发行版将主机名存放在/etc/sysconfig/network文件中。所以,修改主机名时应注意区分是哪种Linux发行版。
【参考:http://www.cnblogs.com/bearcat/archive/2012/05/13/2498045.html 】
1
|
hadoop@master:~$
|
五、安装过程二
关闭ubuntu系统,复制一个slave,进入slave修改主机名为slave1,修改ip为192.168.68.131。
1、修改master下面的hadoop配置文件(推荐是把所有的配置写在core-site.xml中的)
core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?
xml
version
=
"1.0"
?>
<?
xml-stylesheet
type
=
"text/xsl"
href
=
"configuration.xsl"
?>
<!-- Put site-specific property overrides in this file. -->
<!-- hadoop 的 tmp 目录路径-->
<!-- 心跳间隔时间,5000 秒=40 分-->
<
configuration
>
<
|