VMware下,Hadoop集群的配置

一、单机版配置
首先,先安装一个单机的Hadoop。选择VM10和64位的Ubuntu14.04为例。用户名为hadoop。
第一步,安装JDK。先下载一个jdk,可以选择直接下载,也可以从其他地方拷一个JDK解压。直接下载可以执行命令$sudo apt-get install jdk。本例选择离线安装,新建一个文件夹
$mkdir ~/software
进入该文件夹,把JDK包拷贝解压到software文件夹下
$tar -zxvf jdk-7u80-linux-x64.tar.gz
把解压之后的JDK文件移动到上一级目录,并改名,方便使用。
$mv jdk1.7.0_80/ ../jdk1.7
第二步,配置JDK环境。安装完jdk后,需要配置环境变量,把java变成系统内命令
编辑/etc/profile文件来修改系统环境变量。
执行命令
$sudo gedit /etc/profile.d/java.sh
打开/etc/profile文件在文件中添加如下配置,其中的路径为JDK文件的路径,根据自己的文件路径修改。gedit为图形化编写界面,如果没有的话,可以用vi
export JAVA_HOME=/home/ hadoop/ jdk1.7
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
注意,一定要把$PATH加上,中间用“:”连接,不然会导致很多Ubuntu原来的命令不能使用。
执行命令,使profile文件修改配置生效
$ source /etc/profile
$ java -version

或者注销再登录当前用户也行。
第三步,开始安装Hadoop。先下载一个Hadoop安装包,拷贝到hadoop用户目录中,执行命令进行安装
执行命令
tar -xvf hadoop-2.6.0.tar.gz
mv hadoop-2.6.0 ~
然后修改hadoop环境变量配置
执行命令  
$sudo gedit /etc/profile.d/hadoop.sh
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export CLASSPATH=.:$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar:$CLASSPATH
export PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
注意写配置值时,不要换行,其中的路径修改为自己的路径。
然后使hadoop命令配置生效
执行命令
source /etc/profile
或注销再登录当前用户
到这里,单机版的Hadoop就装好了,如何验证是否成功呢?可以使用命令
$ hadoop version

如果出现Hadoop的版本信息,则配置成功。
但是启动Hadoop还需要进行下一步配置
进入到 /home/hadoop/hadoop-2.6.0/etc/hadoop目录
执行命令
$ cd hadoop-2.6.0/etc/hadoop/
$ ls

编辑hadoop-env.sh文件,修改参数信息
执行命令
$cd hadoop-2.6.0/ etc/hadoop
$sudo gedit hadoop-env.sh
export JAVA_HOME=/home/hadoop/jdk1.7

测试Hadoop环境可用性
执行命令
$ hadoop

如果出现命令提示信息,则环境配置成功。

二、集群安装部署
1.首先需要准备多台虚拟机,可以使用VMware的克隆功能,建议在克隆之前,先下载安装好SSH,运行命令$sudo apt-get install ssh,有些问题可以通过先执行$sudo apt-get update更新一下解决。克隆之后的虚拟机便拥有了之前配置的单机版Hadoop,JDK和SSH。本例克隆了两台虚拟机,使用三台虚拟机配置集群。
到了这里,需要安利一个软件——XShell,这个软件可以同时连接多台虚拟机,还能同时在多台虚拟机中输入命令,操作多台虚拟机。
2.然后分别修改三台机子的hostname
执行命令
\$ sudo gedit /etc/hostname
将文件中的名称改成想要的机器名,本例使用 master , slave1 , slave2。
3.然后设置各台虚拟机的静态ip,以master为例,在slave上也要参考设置修改成具体的ip
执行命令
\$sudo gedit /etc/network/interfaces

打开文件修改成已下内容
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.140.128
netmask 255.255.255.0
network 192.168.140.0
boardcast 192.168.140.255
gateway 192.168.140.2
dns-nameserver 8.8.8.8 8.8.4.4
dns-nameserver 124.172.174.13

其中的address需要根据自己的IP地址填写,如果不知道,可以使用ifconfig命令。dns-nameserver需要在主机中使用cmd进入命令操作界面,执行ipconfig -all找到DNS服务器对应的地址
4.然后,设置3台机子的hosts文件
修改3台虚拟机hosts文件都是一样,这是就可以使用xshell了,如果没有也没关系,也可以只修改一台,其他使用scp命令拷贝hosts文件。
执行命令
sudo gedit /etc/hosts

在hosts文件添加如下内容
192.168.140.128 master
192.168.140.129 slave1
192.168.140.130 slave2

这样,就不用记IP了。

5.然后,重启一次网络或者重启一次系统使配置生效

执行命令
$ ping master
$ ping slave1
$ ping slave2
$ ping www.baidu.com
正常的话,应该能ping通

6.开始配置ssh免密码登录。配置ssh免密码登录是让各节点能自动通过安全认证,不影响正常通讯。
如果之前没有安装ssh,现在需要安装ssh了。
配置ssh的实现思路:
a.在每台机子上都使用ssh-keygen生成public key,private key
b.所有机子的public key都拷到一台机子如master上
c.在master上生成一个授权key文件authorized_keys
d.最后把authorized_keys拷给所有集群中的机子,就能保证无密码登录

7.先在master上,在当前用户目录下生成公钥、私钥对
执行命令
$cd /home/hadoop
$ssh-keygen -t rsa -P”

8.导入公钥

执行命令
$cat .ssh/id_rsa.pub >> .ssh/authorized_keys

执行完以后,可以在本机上测试下,用ssh连接自己
执行命令
$ssh master

如果提示要输入密码,
查看authorized_keys文件权限,
如果是属于其他用户的,
需要修改该文件给其他用户权限

执行命令
$chmod 644 .ssh/authorized_keys

修改文件权限,然后再测试下 ssh master,如果不需要输入密码,就连接成功,表示ok,一台机器已经搞定了。

可能出现的问题:
a请先检查SSH服务是否启动,如果没启动,请启动!

b如果没有.ssh目录则创建一个:
c执行命令
$cd /home/hadoop
$mkdir .ssh

d如无权限,使用命令修改要操作文件夹的owner为当前用户:
执行命令
$sudo chown -R hadoop /home/hadoop

9.在其它机器上生成公钥、密钥,并将公钥文件复制到master

执行命令
在slave1上:
scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_1.pub
在slave2上:
scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_2.pub

master中,查看下/home/hadoop目录,应该有二个新文件id_rsa_1.pub、id_rsa_2.pub

10.在master上,导入这二个公钥

执行命令
$cat id_rsa_1.pub >> .ssh/authorized_keys
$cat id_rsa_2.pub >> .ssh/authorized_keys

这样,master这台机器上,就有所有3台机器的公钥了。

  1. 将master上的“最全”公钥,复制到其它机器
    在master上
    执行命令

$scp .ssh/authorized_keys hadoop@slave1:/home/hadoop/.ssh/authorized_keys
$scp .ssh/authorized_keys hadoop@slave2:/home/hadoop/.ssh/authorized_keys

修改其它机器上authorized_keys文件的权限
slave1以及slave2机器上,均执行命令
chmod 600 .ssh/authorized_keys

12 验证
在每个虚拟机上,均用命令 ssh+其它机器的hostname
都能正常无密码连接成功

执行命令
$ssh slave1
$ssh master
$ssh slave2

13.6.SSH免密码设置失败解决
a、权限问题
.ssh目录,以及/home/当前用户 需要700权限,参考以下操作调整
$sudo chmod 777 ~/.ssh
$sudo chmod 700 /home/当前用户
.ssh目录下的authorized_keys文件需要600或644权限,参考以下操作调整
$sudo chmod 644 ~/.ssh/authorized_keys

b、StrictModes问题
$sudo gedit /etc/ssh/sshd_config
找到
StrictModes yes
改成
StrictModes no

如果还不行,可以用ssh -vvv 目标机器ip 查看详情

三、配置Hadoop集群
一共有7个文件要修改:
hadoop-2.6.0/etc/hadoop/hadoop-env.sh
hadoop-2.6.0/etc/hadoop/yarn-env.sh
hadoop-2.6.0/etc/hadoop/core-site.xml
hadoop-2.6.0/etc/hadoop/hdfs-site.xml
hadoop-2.6.0/etc/hadoop/mapred-site.xml
hadoop-2.6.0/etc/hadoop/yarn-site.xml
hadoop-2.6.0/etc/hadoop/slaves

注意,配置之前,需要创建两个文件夹,hadoop临时目录(tmp)及数据目录(data),在/home/hadoop路径下
先进入Hadoop的安装目录中,方便下面修改$cd /home/hadoop/hadoop-2.6.0

  1. hadoop-env.sh 、yarn-env.sh
    这二个文件主要是修改JAVA_HOME改成实际本机jdk所在目录位置
    执行命令,也可以用vi
    $gedit etc/hadoop/hadoop-env.sh
    打开文件找到下面这行的位置,改成(jdk目录位置,大家根据实际情况修改)
    export JAVA _ HOME= /home/hadoop/jdk_1.7
    在 hadoop-env.sh中加上这句:
    export HADOOP_PREFIX=/home/hadoop/hadoop-2.6.0
    然后$vi etc/hadoop/yarn-env.sh
    打开文件找到下面这行的位置,改成(jdk目录位置,大家根据实际情况修改)
    export JAVA_HOME=/home/hadoop/jdk_1.7

2.core-site.xml 配置文件中加上


fs.defaultFS
hdfs://master:9000


hadoop.tmp.dir
/home/hadoop/tmp

3.hdfs-site.xml 配置文件中加上


dfs.datanode.ipc.address
0.0.0.0:50020


dfs.datanode.http.address
0.0.0.0:50075


dfs.namenode.name.dir
file:/home/hadoop/data/namenode


dfs.datanode.data.dir
file:/home/hadoop/data/datanode


dfs.namenode.secondary.http-address
slave1:9001


dfs.replication
1


dfs.permissions
false

4.mapred-site.xml 配置文件中加上


mapreduce.framework.name
yarn


mapreduce.jobhistory.address
master:10020


mapreduce.jobhistory.webapp.address
master:19888

5.yarn-site.xml 配置文件中加上


yarn.nodemanager.aux-services
mapreduce_shuffle


yarn.nodemanager.aux-services.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler


yarn.resourcemanager.scheduler.address
master:8030


yarn.resourcemanager.resource-tracker.address
master:8025


yarn.resourcemanager.address
master:8040

6.配置slaves
执行命令
$gedit slaves

编辑该文件,输入
slave1
slave2
这样只有slave1,slave2上有datanode进程。

7.配置完之后,测试一下。在master上启用 NameNode测试

执行命令
$ 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.
等看到执行信息有has been successfully formatted表示格式化ok

四、启动hadoop集群
1.执行命令
$HADOOP_HOME/sbin/start-dfs.sh

启动完成后,输入jps查看进程
执行命令
$jps
5161 SecondaryNameNode
4989 NameNode

如果看到上面二个进程,表示master节点成功
注意,如果hdfs-site.xml配置文件中,写的是slave1的话,则master中没有SecondaryNameNode,而是在slave1中。

2.然后执行命令
$start-yarn.sh
$jps
5161 SecondaryNameNode
5320 ResourceManager
4989 NameNode
如果看到上面3个进程,表示 yarn启动完成。

3.执行命令
$ stop-dfs.sh
$ stop-yarn.sh
保存退出停掉刚才启动的服务

4.如果之前没有用xshell同时编写三台虚拟机的配置文件的话,则也可以将master上的hadoop目录复制到slave1,slave2
master机器上
cd 先进入主目录
scp -r hadoop-2.6.0 hadoop@slave1:/home/hadoop/
scp -r hadoop-2.6.0 hadoop@slave2:/home/hadoop/

slave1、slave2上的hadoop临时目录(tmp)及数据目录(data),仍然要先手动创建。

五、测试Hadoop
1.master节点上,重新启动
执行命令
$ start-dfs.sh
$ start-yarn.sh

master节点上有几下3个进程:
7482 ResourceManager
7335 SecondaryNameNode
7159 NameNode

slave1、slave2上有几下2个进程:
2296 DataNode
2398 NodeManager

注意,同上,如果hdfs-site.xml配置文件中,写的是slave1的话,则master中没有SecondaryNameNode,而是在slave1中。

2.也可以使用web界面检查hadoop

hdfs管理界面 http://master:50070/
yarn的管理界面不再是原来的50030端口而是8088 http://master:8088/

查看hadoop状态
hdfs dfsadmin -report 查看hdfs的状态报告
yarn node -list 查看yarn的基本信息

3.可能出现的问题
a.若namenode上的core-site.xml中的fs.defaultFS缺失,则启动时会报错。

b.若各机器上的yarn-site.xml中的yarn.resourcemanager.resource-tracker.address缺失,
虽然resourcemanager与nodemanager进程能够正常启动,但是在执行yarn node -list会出现node数量为0的情况。

c.若各机器上的yarn-site.xml中的yarn.resourcemanager.scheduler.address或yarn.resourcemanager.address缺失,则在运行job时,
会卡在INFO mapreduce.Job: Job job_1422695884569_0001 running in uber mode : false
(文中有一些莫名的“\”字符,注意区分,因为MarkDown编辑器中有一些符号会解析成MarkDown中的语法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值