Bigdata-Hadoop 2.6集群安装
Bigdata-Hadoop 2.6集群安装步骤一: 先在3台虚拟机上,设置hostname及修改hosts文件步骤二:在3台虚拟机上安装jdk步骤三:在3台虚拟机上创建专门用户hadoop步骤四:配置ssh免密码登录步骤五:上传并解压hadoop2.6步骤六:修改配置步骤七:将master上的hadoop目录复制到slave01,slave02步骤八:验证环境:linux 6.4 + hado.
Bigdata-Hadoop 2.6集群安装
环境:linux 6.4 + hadoop2.6
虚拟机:(virtualbox)
master / 192.168.0.1
slave01 / 192.168.0.2
slave02 / 192.168.0.3
注:前三个步骤都是准备工作,如果已经完成,可直接进入步骤四
步骤一: 先在3台虚拟机上,设置hostname及修改hosts文件
1.1 先正确设置各虚拟机的hostname
sudo vi /etc/sysconfig/network
将HOSTNAME=后的内容,改成想要的机器名
1.2 修改hosts文件
sudo vi /etc/hosts
192.168.0.1 master
192.168.0.2 slave01
192.168.0.3 slave02
这样,就不用记IP了
这一步完成后,最好重启一次系统,以便生效。然后可以用ping master(或slave01、slave02)试下,正常的话,应该能ping通
注:hostname不要命名为“xxx.01,xxx.02”之类以“.数字”结尾,否则到最后hadoop的NameNode服务将启动失败。
步骤二:在3台虚拟机上安装jdk
yum install java
注:hadoop是java写的,jdk是必须的。上述命令,会安装openjdk最基本的运行时,没有源码和javac等其它工具。如果要安装javac等编译工具及源码
yum install java-1.7.0-openjdk-devel
yum install java-1.7.0-openjdk-src
另外openjdk安装后,不会默许设置JAVA_HOME环境变量,要查看安装后的目录,可以用命令
sudo update-alternatives --config java 看到
默认jre目录为:/usr/lib/java/jvm/jre-1.7.0-openjdk.x86_64
如要设置环境变量,可用命令 sudo vi /etc/profile,javahome可以用java -verbose查看
在最后添加
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64
export CLASSPATH=.:
J
A
V
A
H
O
M
E
/
j
r
e
/
l
i
b
/
r
t
.
j
a
r
:
JAVA_HOME/jre/lib/rt.jar:
JAVAHOME/jre/lib/rt.jar:JAVA_HOME/jre/lib/dt.jar:
J
A
V
A
H
O
M
E
/
j
r
e
/
l
i
b
/
t
o
o
l
s
.
j
a
r
e
x
p
o
r
t
P
A
T
H
=
JAVA_HOME/jre/lib/tools.jar export PATH=
JAVAHOME/jre/lib/tools.jarexportPATH=PATH:$JAVA_HOME/bin
注:如果不喜欢openjdk,想安装oracle官方的jdk,可按下面步骤操作
a) rpm -qa | grep java
即:查看当前已经安装的跟java相关的包,如果显示有openjdk在其中
b) yum -y remove java
一般这样就会卸载干净,执行完以后,再运行 a)中的rpm -qa | grep java看看,如果还有残留,可运行
rpm -e --nodeps tzdata-java-2015a-1.el6.noarch (最后的部分为要删除的包名,即刚才查出来的结果)
重新安装sun jdk,先从官网下载安装文件
a) 上传rpm安装文件到虚拟机,参考下面的命令
scp jdk-7u51-linux-x64.rpm root@master:/home/hadoop/
b) 到虚拟机上,执行安装
rpm -ivh jdk-7u51-linux-x64.rpm
c) 然后修改环境变量 sudo vi /etc/profile,在最后加下面三行
export JAVA_HOME=/usr/java/jdk1.7.0_51
export CLASSPATH=.:
J
A
V
A
H
O
M
E
/
j
r
e
/
l
i
b
/
r
t
.
j
a
r
:
JAVA_HOME/jre/lib/rt.jar:
JAVAHOME/jre/lib/rt.jar:JAVA_HOME/lib/dt.jar:
J
A
V
A
H
O
M
E
/
l
i
b
/
t
o
o
l
s
.
j
a
r
e
x
p
o
r
t
P
A
T
H
=
JAVA_HOME/lib/tools.jar export PATH=
JAVAHOME/lib/tools.jarexportPATH=PATH:$JAVA_HOME/bin保存退出,然后输入 source /etc/profile 以便让新环境变量生效
注:如果机器上之前用 yum install hadoop之类的命令安装过低版本的hadoop,也必须先卸载干净
步骤三:在3台虚拟机上创建专门用户hadoop
useradd hadoop (创建用户)
passwd hadoop (设置密码,为简单起见,3台机器上的hadoop密码最好设置成一样,比如hadoop123)
为了方便,建议将hadoop加入root用户组,操作方法:
先以root身份登录,然后输入
usermod -g root hadoop ,执行完后hadoop即归属于root组了,可以再输入
id hadoop 查看输出验证一下,如果看到类似下面的输出:
uid=502(hadoop) gid=0(root) 组=0(root)
就表示OK了
步骤四:配置ssh免密码登录
hadoop工作时,各节点要相互通讯,正常情况下linux之间通讯要提供用户名、密码(目的是保证通讯安全),如果需要人工干预输入密码,显然不方便,做这一步的目的,是让各节点能自动通过安全认证,不影响正常通讯。
4.1 先在master上,生成公钥、私钥对
以hadoop身份登录到系统
cd (进入个人主目录,默认为/home/hadoop)
ssh-keygen -t rsa -P ‘’ (注:最后是二个单引号)
即:以rsa算法,生成公钥、私钥对,-P ''表示空密码。该命令运行完后,会在个人主目录下生成.ssh目录,里面会有二个文件id_rsa(私钥) ,id_rsa.pub(公钥)
4.2 导入公钥
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
执行完以后,可以在本机上测试下,用ssh连接自己,即:ssh localhost (或ssh master),如果不幸还是提示要输入密码,说明还没起作用,还有一个关键的操作
chmod 600 .ssh/authorized_keys (修改文件权限,否则不起作用)
然后再测试下 ssh localhost ,如果不需要输入密码,就连接成功,表示ok,一台机器已经搞定了。
4.3 在其它机器上生成公钥、密钥,并将公钥文件复制到master
a) 以hadoop身份登录其它二台机器 slave01、slave02,执行 ssh-keygen -t rsa -P ‘’ 生成公钥、密钥
b) 然后用scp命令,把公钥文件发放给master(即:刚才已经搞定的那台机器)
slave01上:
scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_01.pub
slave02上:
scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_02.pub
这二行执行完后,回到master中,查看下/home/hadoop目录,应该有二个新文件id_rsa_01.pub、id_rsa_02.pub,然后在master上,导入这二个公钥
cat id_rsa_01.pub >> .ssh/authorized_keys
cat id_rsa_02.pub >> .ssh/authorized_keys
这样,master这台机器上,就有所有3台机器的公钥了。
4.4 将master上的“最全”公钥,复制到其它机器
a) 继续保持在master上,
scp .ssh/authorized_keys hadoop@slave01:/home/hadoop/.ssh/authorized_keys
scp .ssh/authorized_keys hadoop@slave02:/home/hadoop/.ssh/authorized_keys
b) 修改其它机器上authorized_keys文件的权限
slave01以及slave02机器上,均执行命令
chmod 600 .ssh/authorized_keys
4.5 验证
在每个虚拟机上,均用 ssh 其它机器的hostname 验证下,如果能正常无密码连接成功,表示ok
小结:该步骤非常重要,主要思路是在各节点上生成公钥、私钥,然后将公钥发放其它所有节点。RSA算法是非对称加密算法,仅公布“公钥”,只要私钥不外泄,还是不能解密的,所以安全性依然有保障。
如果本步骤失败,根据我个人经验,多半是权限问题,请检查hadoop是否具有足够权限,建议将hadoop加入sudoers列表及root用户组。另外,这里也整理了一些SSH免密码设置失败的原因,请移步 ssh 免密码设置失败原因总结
步骤五:上传并解压hadoop2.6
a)在本机上,用scp命令上传hadoop2.6到master
scp hadoop-2.6.0.tar.gz hadoop@master:/home/hadoop/
b) 以hadoop身份登录到master,运行以下命令解压
tar -zxvf hadoop-2.6.0.tar.gz
修改环境变量vi /etc/profile
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export PATH=
H
A
D
O
O
P
H
O
M
E
/
b
i
n
:
HADOOP_HOME/bin:
HADOOPHOME/bin:JAVA_HOME/bin:$PATH
步骤六:修改配置
一共有7个文件要修改:
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
$HADOOP_HOME/etc/hadoop/yarn-env.sh
$HADOOP_HOME/etc/hadoop/core-site.xml
$HADOOP_HOME/etc/hadoop/hdfs-site.xml
$HADOOP_HOME/etc/hadoop/mapred-site.xml
$HADOOP_HOME/etc/hadoop/yarn-site.xml
H
A
D
O
O
P
H
O
M
E
/
e
t
c
/
h
a
d
o
o
p
/
s
l
a
v
e
s
其
中
HADOOP_HOME/etc/hadoop/slaves 其中
HADOOPHOME/etc/hadoop/slaves其中HADOOP_HOME表示hadoop根目录,本文中默认为/home/hadoop/hadoop-2.6.0
cd /home/hadoop/hadoop-2.6.0/etc/hadoop/
a) hadoop-env.sh 、yarn-env.sh
这二个文件主要是修改JAVA_HOME后的目录,改成实际本机jdk所在目录位置
vi /home/hadoop/hadoop-2.6.0/etc/hadoop/hadoop-env.sh (及 vi /home/hadoop/hadoop-2.6.0/etc/hadoop/yarn-env.sh)
找到下面这行的位置,改成(jdk目录位置,大家根据实际情况修改)
export JAVA_HOME=/usr/java/jdk1.7.0_51
另外 hadoop-env.sh中 , 建议加上这句:
export HADOOP_PREFIX=/home/hadoop/hadoop-2.6.0
b) core-site.xml 参考下面的内容修改:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> fs.defaultFS hdfs://master:9000 hadoop.tmp.dir /home/hadoop/tmp注:/home/hadoop/tmp 目录如不存在,则先mkdir手动创建
core-site.xml的完整参数请参考
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/core-default.xml
c) hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> dfs.datanode.ipc.address 0.0.0.0:50020 dfs.datanode.http.address 0.0.0.0:50075 dfs.replication 2 注:dfs.replication表示数据副本数,一般不大于datanode的节点数。 hdfs-site.xml的完整参数请参考 http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xmld) mapred-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> mapreduce.framework.name yarnmapred-site.xml的完整参数请参考http://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
e)yarn-site.xml
<?xml version="1.0"?> yarn.nodemanager.aux-services mapreduce_shuffleyarn-site.xml的完整参数请参考http://hadoop.apache.org/docs/r2.6.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
另外,hadoop 1.x与2.x相比, 1.x中的很多参数已经被标识为过时,具体可参考
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/DeprecatedProperties.html
最后一个文件slaves暂时不管(可以先用mv slaves slaves.bak 将它改名),上述配置弄好后,就可以在master上启用 NameNode测试了,方法:
$HADOOP_HOME/bin/hdfs namenode –format 先格式化
15/02/12 21:29:53 INFO namenode.FSImage: Allocated new BlockPoolId: BP-85825581-192.168.187.102-1423747793784
15/02/12 21:29:53 INFO common.Storage: Storage directory /home/hadoop/tmp/dfs/name has been successfully formatted.
等看到这个时,表示格式化ok
H
A
D
O
O
P
H
O
M
E
/
s
b
i
n
/
s
t
a
r
t
−
d
f
s
.
s
h
启
动
完
成
后
,
输
入
j
p
s
查
看
进
程
,
如
果
看
到
以
下
二
个
进
程
:
5161
S
e
c
o
n
d
a
r
y
N
a
m
e
N
o
d
e
4989
N
a
m
e
N
o
d
e
表
示
m
a
s
t
e
r
节
点
基
本
o
k
了
再
输
入
HADOOP_HOME/sbin/start-dfs.sh 启动完成后,输入jps查看进程,如果看到以下二个进程: 5161 SecondaryNameNode 4989 NameNode 表示master节点基本ok了 再输入
HADOOPHOME/sbin/start−dfs.sh启动完成后,输入jps查看进程,如果看到以下二个进程:5161SecondaryNameNode4989NameNode表示master节点基本ok了再输入HADOOP_HOME/sbin/start-yarn.sh ,完成后,再输入jps查看进程
5161 SecondaryNameNode
5320 ResourceManager
4989 NameNode
如果看到这3个进程,表示yarn也ok了
遇到的问题:
配置完Hadoop启动的时候出现如下警告信息:
[html] view plain copy1. WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
问题在哪里?有人说这是hadoop的预编译包是32bit的,运行在64bit上就会有问题。但是这个答案大多数时候都是错的。如何验证64bit还是32bit?
进入hadoop安装目录
[plain] view plain copy1. /usr/local/hadoop-2.5.2/lib/native
用ldd命令查看依赖库
[plain] view plain copy1. ldd libhadoop.so.1.0.0
会输出如下信息:
[plain] view plain copy1. ./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
2. linux-vdso.so.1 => (0x00007fff369ff000)
3. libdl.so.2 => /lib64/libdl.so.2 (0x00007f3caa7ea000)
4. libc.so.6 => /lib64/libc.so.6 (0x00007f3caa455000)
5. /lib64/ld-linux-x86-64.so.2 (0x00007f3caac1b000)
可以看到依赖的都是/lib64/的动态库,所以不是64位/32位问题。但是看到报错,GLIBC_2.14找不到,现在检查系统的glibc库, ldd --version即可检查。
输入命令:
[plain] view plain copy1. ldd --version
会输出如下信息:
[plain] view plain copy1. ldd (GNU libc) 2.12
2. Copyright (C) 2010 Free Software Foundation, Inc.
3. This is free software; see the source for copying conditions. There is NO
4. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5. Written by Roland McGrath and Ulrich Drepper.
原来系统预装的glibc库是2.12版本,而hadoop期望是2.14版本,所以打印警告信息。
现在有两个办法,重新编译glibc.2.14版本,安装后专门给hadoop使用,这个有点危险。
第二个办法直接在log4j日志中去除告警信息。在//usr/local/hadoop-2.5.2/etc/hadoop/log4j.properties文件中添加
[plain] view plain copy1. log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
f) 修改slaves
如果刚才用mv slaves slaves.bak对该文件重命名过,先运行 mv slaves.bak slaves 把名字改回来,再
vi slaves 编辑该文件,输入
slave01
slave02
保存退出,最后运行
$HADOOP_HOME/sbin/stop-dfs.sh
$HADOOP_HOME/sbin/stop-yarn.sh
停掉刚才启动的服务
步骤七:将master上的hadoop目录复制到slave01,slave02
仍然保持在master机器上
cd 先进入主目录
scp -r hadoop-2.6.0 hadoop@slave01:/home/hadoop/
scp -r hadoop-2.6.0 hadoop@slave02:/home/hadoop/
注:slave01、slave02上的hadoop临时目录(tmp)及数据目录(data),仍然要先手动创建。
步骤八:验证
master节点上,重新启动
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
顺利的话,master节点上有几下3个进程:
7482 ResourceManager
7335 SecondaryNameNode
7159 NameNode
slave01、slave02上有几下2个进程:
2296 DataNode
2398 NodeManager
同时可浏览:
http://master:50070/
http://master:8088/
查看状态
另外也可以通过 bin/hdfs dfsadmin -report 查看hdfs的状态报告
其它注意事项:
a) master(即:namenode节点)若要重新格式化,请先清空各datanode上的data目录(最好连tmp目录也一起清空),否则格式化完成后,启动dfs时,datanode会启动失败
b) 如果觉得master机器上只运行namenode比较浪费,想把master也当成一个datanode,直接在slaves文件里,添加一行master即可
c) 为了方便操作,可修改/etc/profile,把hadoop所需的lib目录,先加到CLASSPATH环境变量中,同时把hadoop/bin,hadoop/sbin目录也加入到PATH变量中,可参考下面的内容:
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export JAVA_HOME=/usr/java/jdk1.7.0_51
export CLASSPATH=.:
J
A
V
A
H
O
M
E
/
j
r
e
/
l
i
b
/
r
t
.
j
a
r
:
JAVA_HOME/jre/lib/rt.jar:
JAVAHOME/jre/lib/rt.jar:JAVA_HOME/lib/dt.jar:
J
A
V
A
H
O
M
E
/
l
i
b
/
t
o
o
l
s
.
j
a
r
:
JAVA_HOME/lib/tools.jar:
JAVAHOME/lib/tools.jar:HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar:
H
A
D
O
O
P
H
O
M
E
/
s
h
a
r
e
/
h
a
d
o
o
p
/
m
a
p
r
e
d
u
c
e
/
h
a
d
o
o
p
−
m
a
p
r
e
d
u
c
e
−
c
l
i
e
n
t
−
c
o
r
e
−
2.6.0.
j
a
r
:
HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar:
HADOOPHOME/share/hadoop/mapreduce/hadoop−mapreduce−client−core−2.6.0.jar:HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar
export PATH=
P
A
T
H
:
PATH:
PATH:JAVA_HOME/bin:
H
A
D
O
O
P
H
O
M
E
/
s
b
i
n
:
HADOOP_HOME/sbin:
HADOOPHOME/sbin:HADOOP_HOME/bin
更多推荐
所有评论(0)