搭建hadoop2.6.0开发环境


前言:因为没有实体机做测试,要学习hadoop搭建环境,在本地笔记本做3台linux虚拟机是个蛮不错的选择安装一个VMware,准备3台一样的linux虚拟机.

Linux虚拟机ISO:

虚拟机平台服务器版本:

PS:关于软件,软件描述如下所示:

本地笔记本:T420,8G内存,64位操作系统,配置如下:

1.安装虚拟机

1.1安装VMware-workstation,一路下一步即可,导入redhat系统,使用ISO方式搭建linux虚拟机

2.安装linux虚拟机

2.1安装VMware-workstation完成后,选择新建虚拟机,导入Red Hat Enterprise Linux 7.3,使用ISO方式搭建linux虚拟机

选择路径

选择多核

选择2G内存

选择桥连接的方式

选择磁盘I/O方式

创建全新的虚拟机

选择磁盘类型

虚拟机文件存储方式

设置虚拟机文件存放路径

完成打开,报错如下:

Could not prepare the install disc at E:\software\wmware\RedHat Enterprise Linux 7.3-bin-DVD1.iso. Make surethat you are using a valid Linux install disc. If the error persists,you mayneed to reinstall VMware Workstation.

原因是笔记本没有开启虚拟机功能选项,重启电脑,然后按住F1键,进入BIOS设置,找到Virtual选项,设置成enable,然后保存退出。

打开报错:EDD: Error8000 reading sector 2073976

原因是:VMware Workstation 9,版本太老,升级到10版本,就OK了。

设置虚拟机网络连接(固定IP)

设置连接方式为NAT模式

看下是否能上外网,左键点击笔记本右下角无线图标,再点击打开网络与共享中心,关闭VMnet01,只保留VMnet08,然后使用默认的IPv4的ip地址192.168.52.1

克隆另外一台完全一模一样的虚拟机

在虚拟机name02上右键弹出菜单里点击”管理(M)”,然后点击右边下拉菜单”克隆(C)”,如下所示:

继续下一步

选择创建完成克隆(F)

设置好名称和位置,点击完成

开始复制,时间较长,耐心等待,如下

点击关闭按钮,完成本次clone。

在使用同样的办法,clone另外一台data02出来,如下图所示:

OK,最后3台一模一样配置的虚拟机全部搭建完成,可以去搭建hadoop环境,可以开始大数据学习之旅了。

3.安装JDK7

3.1下载JDK安装包

安装版本:jdk-7u60-linux-x64.gz

查看最新:http://www.oracle.com/technetwork/java/javase/downloads/index.html

3.2解压安装

我们把JDK安装到这个路径:/usr/lib/jvm
如果没有这个目录,我们就新建一个目录
cd /usr/lib
sudo mkdir jvm

将jdk-7u45-linux-x64.tar.gz复制到linux桌面

tar zxvf jdk-7u45-linux-x64.tar.gz -C/usr/lib/jvm

3.3配置环境变量

(1)只对当前用户生效
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45

export JRE_HOME=$JAVA_HOME/jre

exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存退出,然后输入下面的命令来使之生效
source ~/.bashrc

(2)对所有用户生效(root用户登录)
vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45

export JRE_HOME=$JAVA_HOME/jre

exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

exportHADOOP_PREFIX=/hd/hdinstall/hadoop-2.6.0/

exportHADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native

exportHADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"

保存退出,然后输入下面的命令来使之生效
source /etc/profile

3.4配置默认JDK(一般情况下这一步都可以省略)

由于一些Linux的发行版中已经存在默认的JDK,如OpenJDK等。所以为了使得我们刚才安装好的JDK版本能成为默认的JDK版本,我们还要进行下面的配置。
执行下面的命令:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_45/bin/java300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_45/bin/javac300
注意:如果以上两个命令出现找不到路径问题,只要重启一下机器在重复上面两行代码就OK了。

执行下面的代码可以看到当前各种JDK版本和配置:
sudo update-alternatives --config java

3.5测试

在linux命令行,使用java -version来查看java版本,显示结果如下:

4安装hadoop2.6.0

4.1系统架构

集群角色:
主机名     ip地址              角色
server01   192.168.137.2     NameNode、ResourceManager(JobTracker)
server02   192.168.137.3     DataNode、NodeManager(TaskTracker)
server03   192.168.137.4    DataNode、NodeManager(TaskTracker)

系统环境:

Red Hat Enterprise Linux 7.3
硬盘:30G
内存:2G

4.2环境准备

a. 系统设置:
关闭iptables:
                /sbin/serviceiptables stop
           /sbin/chkconfig iptables off
关闭selinux: setenforce 0
                 sed "s@^SELINUX=enforcing@SELINUX=disabled@g"/etc/sysconfig/selinux

vi /etc/hosts
#localhost.localdomain=data01 #或者name01,data02
192.168.137.2   server01

192.168.137.3   server02

192.168.137.4   server03

hostname server01; hostname server02;hostname server03;

 

设置节点名称,所有节点执行

b. 用户目录创建 :
创建hadoop运行账户:
使用root登陆所有机器后,所有的机器都创建hadoop用户
useradd hadoop //添加用户

passwd hadoop //修改密码
#sudo useradd –s /bin/bash –d /home/hadoop –m hadoop –g hadoop –G admin  

//添加一个zhm用户,此用户属于hadoop用户组,且具有admin权限。
#su hadoop   //切换到zhm用户中

chown -R hadoop:hadoop /home

c.创建hadoop相关目录:
定义需要数据及目录的存放路径,定义代码及工具存放的路径
mkdir -p /home/hadoop/src
mkdir -p /home/hadoop/tools
chown -R hadoop.hadoop /home/hadoop/*
d. 定义数据节点存放的路径到跟目录下的hadoop文件夹, 这里是数据节点存放目录需要有足够的空间存放
mkdir -p /data/hadoop/hdfs
mkdir -p /data/hadoop/tmp
mkdir -p /var/logs/hadoop
chmod -R 777 /data/hadoop
chown -R hadoop.hadoop /data/hadoop/*
chown -R hadoop.hadoop /var/logs/hadoop

4.3 配置ssh免密码登陆

参考文章地址:http://blog.csdn.net/ab198604/article/details/8250461
SSH主要通过RSA算法来产生公钥与私钥,在数据传输过程中对数据进行加密来保障数
据的安全性和可靠性,公钥部分是公共部分,网络上任一结点均可以访问,私钥主要用于对数据进行加密,以防他人盗取数据。总而言之,这是一种非对称算法,
想要破解还是非常有难度的。Hadoop集群的各个结点之间需要进行数据的访问,被访问的结点对于访问用户结点的可靠性必须进行验证,hadoop采用的是ssh的方
法通过密钥验证及数据加解密的方式进行远程安全登录操作,当然,如果hadoop对每个结点的访问均需要进行验证,其效率将会大大降低,所以才需要配置SSH免
密码的方法直接远程连入被访问结点,这样将大大提高访问效率。
namenode节点配置免密码登陆其他节点,每个节点都要产生公钥密码,Id_dsa.pub为公钥,id_dsa为私钥,紧接着将公钥文件复制成authorized_keys文件,这个步骤是必须的,过程如下:

a. 每个节点分别产生密钥
# 提示:
(1):.ssh目录需要755权限,authorized_keys需要644权限;
(2):Linux防火墙开着,hadoop需要开的端口需要添加,或者关掉防火墙;
(3):数据节点连不上主服务器还有可能是使用了机器名的缘故,还是使用IP地址比较稳妥。

关闭防火墙

systemctl status firewalld

systemctl disable firewalld

关闭服务器的防火墙

在每台机器上运行

[root@localhost jdk1.7]# service iptablesstop

iptables: Flushing firewall rules:                         [  OK  ]

iptables: Setting chains to policy ACCEPT:filter          [  OK  ]

iptables: Unloading modules:                               [  OK  ]

[root@localhost jdk1.7]# service iptablesstatus

iptables: Firewall is not running.

[root@localhost jdk1.7]# chkconfig iptablesoff

[root@localhost jdk1.7]#

看下iptables状态

[root@localhost jdk1.7]# chkconfig --listiptables

iptables             0:off 1:off 2:off 3:off 4:off 5:off 6:off

[root@localhost jdk1.7]#

设置开机不自启动

chkconfig iptables off

 

创建用户组:groupadd hadoop
创建用户:useradd -g hadoop hadoop(用户归属weblogic组)
设置密码:passwd hadoop

[hadoop@localhost hadoop]$ su - root

密码:

su: 鉴定故障

[hadoop@localhost hadoop]$exit

b. name01(192.168.85.128)主库上面:
namenode主节点hadoop账户创建服务器登陆公私钥:
mkdir -p /home/hadoop/.ssh
chown hadoop.hadoop -R /home/hadoop/.ssh
chmod 755 /home/hadoop/.ssh 
su - hadoop
cd /home/hadoop/.ssh
ssh-keygen -t dsa -P '' -f id_dsa

如果错误执行:setenforce 0

Id_dsa.pub为公钥,id_dsa为私钥,紧接着将公钥文件复制成authorized_keys文件,这个步骤是必须的,过程如下:

[hadoop@name01 .ssh]$ cat id_dsa.pub>> authorized_keys

data01和data02执行以上相同的操作,生产authorized_keys

c. 构造3个通用的authorized_keys
在name01(192.168.85.128)上操作:
su - hadoop
cd /home/hadoop/.ssh
scp hadoop@server02:/home/hadoop/.ssh/id_dsa.pub ./id_dsa.pub.server02

scphadoop@server03:/home/hadoop/.ssh/id_dsa.pub ./id_dsa.pub.server03
cat id_dsa.pub.server02 >> authorized_keys
cat id_dsa.pub.server03 >> authorized_keys

cat authorized_keys

看到authorized_keys文件里面有3行记录,分别代表了访问name01,data01,data02的公用密钥。把这个authorized_keys公钥文件copy到data01和data02上面同一个目录下。

copy文件 authorized_keys,然后通过hadoop远程彼此连接name01、data01、data02就可以免密码
scp authorized_keys hadoop@server02:/home/hadoop/.ssh/
scp authorized_keys hadoop@server03:/home/hadoop/.ssh/
然后分别在name01、data01、data02以hadoop用户执行权限赋予操作
su - hadoop 
chmod 600 /home/hadoop/.ssh/authorized_keys
chmod 700 -R /home/hadoop/.ssh

测试ssh免秘钥登录,首次连接的时候,需要输入yes,之后就不用输入密码直接可以ssh过去了。

d. 验证name01、data01、data02任何ssh免密码登录
[hadoop@data02 ~]$ ssh name01
Last login: Thu Aug 21 02:38:46 2014 from data02
[hadoop@name01 ~]$ ssh data01
Last login: Thu Aug 21 02:30:35 2014 from localhost.localdomain
[hadoop@data01 ~]$ ssh data02
Last login: Thu Aug 21 02:32:57 2014 from localhost.localdomain
[hadoop@data02 ~]$ ssh data01
Last login: Thu Aug 21 02:39:55 2014 from name01
[hadoop@data01 ~]$ ssh name01
Last login: Thu Aug 21 02:39:51 2014 from data02
[hadoop@name01 ~]$ ssh data02
Last login: Thu Aug 21 02:39:58 2014 from data01
[hadoop@data02 ~]$ 

4.4安装部署hadoop环境

4.4.1 java环境准备

root账户下所有节点安装jdk

4.4.2安装hadoop

A.版本2.6.0安装
从本地copy到linux虚拟机桌面
tar zxvf hadoop-2.6.0-x64.tar.gz -C /home/hadoop/src/

 

B.配置环境变量:
使用root设置环境变量
vi /etc/profile
export HADOOP_HOME=/home/hadoop/src/hadoop-2.6.0
export JAVA_HOME= /usr/lib/jvm/jdk1.7.0_45
export PATH=/home/hadoop/src/hadoop-2.6.0/bin:/home/hadoop/src/hadoop-2.6.0/sbin:$PATH

source /etc/profile

4.4.3 hadoop配置文件

hadoop群集涉及配置文件:hadoop-env.shcore-site.xml hdfs-site.xml mapred-site.xml yarn-env.sh slaves yarn-site.xml
涉及到的配置文件有7个:

以下个别文件默认不存在的,可以复制相应的template文件获得。
cp /home/hadoop/src/hadoop-2.6.0/etc/hadoop
hadoop-env.sh
yarn-env.sh
slaves
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml

a.修改hadoop-env.sh配置:
vim hadoop-env.sh
增加java环境变量(将注释去掉,添加jdk的路径)
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45

b.修改yarn-env.sh配置:
vim yarn-env.sh
修改java_home值为  export JAVA_HOME="/usr/lib/jvm/jdk1.7.0_45"
/usr/lib/jvm/jdk1.7.0_45
c.修改slaves配置,写入所有从节点主机名:
vim slaves

server02
server03

d.修改core-site.xml配置文件:

<property>

   <name>fs.defaultFS</name>

         <value>hdfs://server01:9000</value>

</property>

<property>

   <name>io.file.buffer.size</name>

         <value>131072</value>

</property>

<property>

   <name>hadoop.tmp.dir</name>

   <value>file:/root/tmp</value>

   <description>Abase for other temporarydirectories.</description>

</property>

<property>

         <name>hadoop.proxyuser.hduser.hosts</name>

         <value>*</value>

</property>

<property>

   <name>hadoop.proxyuser.hduser.groups</name>

   <value>*</value>

</property>

e.修改hdfs-site.xml配置:

创建相关目录
mkdir -p /data/hadoop/name
chown -R hadoop.hadoop /data/hadoop/name
mkdir -p /data/hadoop/data
chown -R hadoop.hadoop /data/hadoop/data

<property>

   <name>dfs.namenode.secondary.http-address</name>

   <value>server01:9001</value>

</property>

<property>

   <name>dfs.namenode.name.dir</name>

   <value>file:/data/hadoop/name</value>

</property>

<property>

   <name>dfs.datanode.data.dir</name>

   <value>file:/data/hadoop/data</value>

</property>

<property>

   <name>dfs.replication</name>

   <value>3</value>

</property>

<property>

   <name>dfs.webhdfs.enabled</name>

   <value>true</value>

</property>

f.修改mapred-site.xml配置
#这个文件不存在,需要自己VIM创建

<property>

   <name>mapreduce.framework.name</name>

   <value>yarn</value>

</property>

<property>

   <name>mapreduce.jobhistory.address</name>

   <value>server01:10020</value>

</property>

<property>

   <name>mapreduce.jobhistory.webapp.address</name>

   <value>server01:19888</value>

</property>

g.修改yarn-site.xml配置:

<property>

   <name>yarn.nodemanager.aux-services</name>

   <value>mapreduce_shuffle</value>

</property>

<property>

   <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

   <value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

<property>

   <name>yarn.resourcemanager.address</name>

   <value>server01:8032</value>

</property>

<property>

   <name>yarn.resourcemanager.scheduler.address</name>

   <value> server01:8030</value>

</property>

<property>

   <name>yarn.resourcemanager.resource-tracker.address</name>

   <value>server01:8031</value>

</property>

<property>

   <name>yarn.resourcemanager.admin.address</name>

   <value>server01:8033</value>

</property>

<property>

   <name>yarn.resourcemanager.webapp.address</name>

   <value>server01:8088</value>

</property>

所有节点采用相同的配置文件和安装目录,直接整个目录copy过去安装把server01上面的所有hadoop目录copy到server02上面去:
scp -r /home/hadoop/* hadoop@server02:/home/hadoop/

scp -r /data/hadoop/*hadoop@server02:/data/hadoop/

把server01上面的所有hadoop目录copy到server03上面去:

scp -r /home/hadoop/*hadoop@server03:/home/hadoop/

scp -r /data/hadoop/*hadoop@server03:/data/hadoop/

4.4.4格式化文件系统

在name01主库上面执行 hadoop namenode -format操作,格式化hdfs文件系统。

[root@master bin]# pwd

/home/hadoop/src/hadoop-2.6.0/bin

格式化namenode

./hdfs namenode –format

注意:上面只要出现“successfullyformatted”就表示成功了,只在第一次启动的时候格式化,不要每次启动都格式化。理解为我们新买了块移动硬盘,使用之前总要格式化硬盘。如果真的有必要再次格式化,请先把“$HADOOP_HOME/tmp”目录下的文件全部删除。
读者可以自己观察目录”$HADOOP_HOME/tmp”在格式化前后的变化情况。格式化操作很少有出现失败的情况。如果真出现了,请检查配置是否正确。

4.5讲述hadoop 启动的三种方式

4.5.1第一种,一次性全部启动

执行start-all.sh 启动hadoop,观察控制台的输出,可以看到正在启动进程,分别是namenode、datanode、secondarynamenode、jobtracker、tasktracker,一共5 个,待执行完毕后,并不意味着这5 个进程成功启动,上面仅仅表示系统正在启动进程而已。我们使用jdk 的命令jps 查看进程是否已经正确启动。执行以下jps,如果看到了这5 个进程,说明hadoop 真的启动成功了。如果缺少一个或者多个,那就进入到“Hadoop的常见启动错误”章节寻找原因了。

停止应用:
/home/hadoop/src/hadoop-2.6.0/sbin/stop-all.sh
启动应用:
/home/hadoop/src/hadoop-2.6.0/sbin/start-all.sh

检查后台各个节点运行的hadoop进程

[hadoop@name01 hadoop]$ jps

[hadoop@data01 ~]# jps

查看集群状态

[root@hd0 sbin]# cd../bin/

[root@hd0 bin]#./hdfs dfsadmin -report

14/07/21 05:10:55WARN util.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable

Configured Capacity:10321133568 (9.61 GB)

Present Capacity:8232607744 (7.67 GB)

DFS Remaining:8232558592 (7.67 GB)

DFS Used: 49152 (48KB)

DFS Used%: 0.00%

Under replicatedblocks: 0

Blocks with corruptreplicas: 0

Missing blocks: 0

-------------------------------------------------

通过网站查看hadoop集群情况

进入http://192.168.52.128:50070/dfshealth.html#tab-overview,看集群基本信息,如下图所示:

 

4.5.2第二种,分别启动HDFS 和yarn

执行命令start-dfs.sh,是单独启动hdfs。执行完该命令后,通过jps 能够看到NameNode、DataNode、SecondaryNameNode 三个进程启动了,该命令适合于只执行hdfs
存储不使用yarn做资源管理。关闭的命令就是stop-dfs.sh 了。

3.4.3.1 先启动HDFS
[hadoop@name01 sbin]$ jps
3687 Jps
[hadoop@name01 sbin]$ pwd
/home/hadoop/src/hadoop-2.6.0/sbin
[hadoop@name01 sbin]$ start-dfs.sh
Starting namenodes on [name01]
name01: starting namenode, logging to /home/hadoop/src/hadoop-2.6.0/logs/hadoop-hadoop-namenode-name01.out
data01: starting datanode, logging to /home/hadoop/src/hadoop-2.6.0/logs/hadoop-hadoop-datanode-data01.out
data02: starting datanode, logging to /home/hadoop/src/hadoop-2.6.0/logs/hadoop-hadoop-datanode-data02.out
Starting secondary namenodes [name01]
name01: starting secondarynamenode, logging to /home/hadoop/src/hadoop-2.6.0/logs/hadoop-hadoop-secondarynamenode-name01.out

在name01节点下,查看后台的jps进程如下:
[hadoop@name01 sbin]$ jps
4081 Jps
3800 NameNode
3977 SecondaryNameNode
[hadoop@name01 sbin]$
[root@hadoop03 src]# jps
13894 Jps
13859 DataNode

去data01节点看下,后台的jps进程如下:
[hadoop@data01 ~]$ jps
3194 Jps
2863 DataNode
[hadoop@data01 ~]$ 

再启动yarn
执行命令start-yarn.sh,可以单独启动资源管理器的服务器端和客户端进程,关闭的命令就是stop-yarn.sh 

[hadoop@name01 sbin]$ start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/src/hadoop-2.6.0/logs/yarn-hadoop-resourcemanager-name01.out
data01: starting nodemanager, logging to /home/hadoop/src/hadoop-2.6.0/logs/yarn-hadoop-nodemanager-data01.out
data02: starting nodemanager, logging to /home/hadoop/src/hadoop-2.6.0/logs/yarn-hadoop-nodemanager-data02.out

在name01节点下,查看后台的jps进程,多了一个ResourceManager进程,如下所示:
[hadoop@name01 sbin]$ jps
4601 ResourceManager
3800 NameNode
4853 Jps
3977 SecondaryNameNode
[hadoop@name01 sbin]$ 

去data01节点看下,后台的jps进程多了一个NodeManager进程,如下所示:
[hadoop@data01 ~]$ jps
3249 NodeManager
2863 DataNode
3365 Jps
[hadoop@data01 ~]$

依次关闭,先关闭yarn再关闭HDFS
[hadoop@name01 sbin]$ stop-yarn.sh
stopping yarn daemons
stopping resourcemanager
data01: stopping nodemanager
data02: stopping nodemanager
no proxyserver to stop
[hadoop@name01 sbin]$ 
[hadoop@name01 sbin]$ stop-dfs.sh
Stopping namenodes on [name01]
name01: stopping namenode
data01: stopping datanode
data02: stopping datanode
Stopping secondary namenodes [name01]
name01: stopping secondarynamenode
[hadoop@name01 sbin]$ 

PS:当然,也可以先启动MapReduce,再启动HDFS。说明HDFS 和MapReduce的进程之间是互相独立的,没有依赖关系。

4.5.3第三种,分别启动各个进程

 [root@book0bin]# jps
14821 Jps
[root@book0 bin]# hadoop-daemon.sh start namenode
[root@book0 bin]# hadoop-daemon.sh start datanode
[root@book0 bin]# hadoop-daemon.sh start secondarynamenode
[root@book0 bin]# hadoop-daemon.sh start jobtracker
[root@book0 bin]# hadoop-daemon.sh start tasktracker
[root@book0 bin]# jps
14855 NameNode
14946 DataNode
15043 SecondaryNameNode
15196 TaskTracker
15115 JobTracker
15303 Jps
执行的命令是“hadoop-daemon.sh start [进程名称]”,这种启动方式适合于单独增加、删除节点的情况,在安装集群环境的时候会看到

4.6另外一种检查状态hadoop集群的状态

用"hadoop dfsadmin -report"来查看hadoop集群的状态

 

可参考文档

http://www.xuebuyuan.com/2196230.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值