Hadoop2.7.3部署

来源:互联网 发布:服装之星v8数据库补丁 编辑:程序博客网 时间:2024/06/16 09:53

一、安装前准备

1. 宿主机安装虚拟机

VMware-workstation-full-12.1.1-3770994.exe

2. 虚拟机安装CentOS操作系统

CentOS-7-x86_64-DVD-1611.iso

在装好的VMware中新建虚拟机并安装Linux CentOS64位操作系统,为保证系统运行效率,避免图形界面占用太多资源,本次实验选用了CentOS-7-x86_64。虚拟机的内存设为1G,硬盘设为20G,网络模式设为“桥接”。CentOS选择最小化安装。

3. 配置ip地址

a) 输入如下命令修改配置ip地址

# vi /etc/sysconfig/network-scripts/ifcfg-ens33

ifcfg-ens33后面的数字是自动生成的,每台机器可能不一样,进行如下配置:

BOOTPROTO=static #把dhcp改为static,启用静态地址

ONBOOT=yes #把no改为yes,开启自动启用网络连接

IPADDR=192.168.241.235

GATEWAY=192.168.241.129

NETMASK=255.255.255.128

DNS=192.168.241.128

b) 输入如下命令重启网络

# service network restart

CentOS 7 不再使用 ifconfig 而是用 ip 命令查看网络信息

# ip addr

4. 修改主机名

a) 输入命令:

# vi /etc/hostname

b) 修改为如下主机名:

master

c) 输入命令:

# shutdown -r now

5. 添加本机ip到域名

a) 输入命令:

# vi /etc/hosts

b) 添加如下:

127.0.0.1 localhost localhost.localdomainlocalhost4 localhost4.localdomain4

::1    localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.241.235 master

6. 设置yum方式从本地安装软件包

CentOS虚拟机不能联网状况下yum命令无法使用,需做如下配置

a) 挂载CentOS安装光盘

# mkdir /mnt/cdrom

# mount -t iso9660 /dev/cdrom /mnt/cdrom

b) 修改yum配置文件

# cd /etc/yum.repos.d/

会看到三个文件,第一个CentOS-Base.repo是yum网络源的配置文件,第三个CentOS-Media.repo是本地源的配置。

修改CentOS-Media.repo

在baseurl中,修改第2个路径为/mnt/cdrom(即为光盘挂载点)

将enabled=0改为1

c) 将yum网络源配置文件改名为CentOS-Base.repo.bak,否在会先在网络源中寻找适合的包,改名之后直接从本地源读取。

好了,现在你可以安装你要的包了,比如你要安装gcc,输入命令yuminstall gcc即可!

7. 安装szrz

CentOS7.0最小化版不支持sz、rz命令,输入如下命令安装

# yum install lrzsz

8. 安装vim

# yum -y install vim

9. 宿主机安装XShell

文件-->新建,连接主机

二、Hadoop部署

1. Java安装

所有的机器上都要安装JDK,先在Master服务器安装,其他服务器按照步骤重复进行即可,也可以采用完全复制已经安装好的虚拟机的方法。安装JDK以及配置环境变量,需要以"root"的身份进行。下载java开发工具包,在实际使用中,我们下载的版本是jdk-8u112-linux-x64.rpm。

1.1 安装JDK

打开XShell,用root身份登录"master",后在"/usr"下创建"java"文件夹。命令如下: 

# mkdir /usr/java

# cd /usr/java

# rz

选择已下载到宿主机上的jdk-8u112-linux-x64.rpm

# chmod+x jdk-8u112-linux-x64.rpm

# rpm -ivh jdk-8u112-linux-x64.rpm

1.2 配置环境变量

编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容。命令如下:

# vi /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_112

export CLASSPATH=$CLASSPATH:$JAVA_HOME /lib:$JAVA_HOME/jre/lib

export PATH=$PATH:$JAVA_HOME/bin


保存并退出,执行下面命令使其配置立即生效。

# source /etc/profile

1.3 验证安装成功

配置完毕并生效后,用下面命令判断是否成功。

# java -version

出现了相关参数提示,如图所示,说明java开发环境已经安装完毕。

2. Hadoop集群安装

所有的机器上都要安装hadoop,先在Master服务器安装,然后其他服务器按照步骤重复进行即可。也可以采用完全复制已经安装好的虚拟机的方法。安装和配置hadoop需要以"root"的身份进行。本次实验下载的版本为hadoop-2.7.3。

2.1 安装Hadoop

a) 上传hadoop-2.7.3.tar.gz到虚拟机

在root路径下新建文件夹Hadoop,并进入目录,再使用rz命令把" hadoop-2.7.3.tar.gz "上传到"/root/Hadoop"目录下面。

# mkdir /root/Hadoop

# cd /root/Hadoop

# rz

通过rz命令弹出的“打开”对话框在宿主机上找到hadoop-2.7.3.tar.gz

b) 解压hadoop-2.7.3.tar.gz

用下面命令把"hadoop-2.7.3.tar.gz "进行解压,然后删除" hadoop-2.7.3.tar.gz "安装包。

# tar -zxvf hadoop-2.7.3

# rm -rf hadoop-2.7.3

2.2 配置Hadoop

# vim/root/Hadoop/hadoop-2.7.3/etc/hadoop/hadoop-env.sh

在hadoop-env.sh最后增加exportJAVA_HOME=/usr/java/jdk1.8.0_112

# vim /etc/profile

在profile最后添加如下设置:

export HADOOP_HOME=/root/Hadoop/hadoop-2.7.3

exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

2.3 配置core-site.xml文件

a) 在/root/Hadoop/hadoop-2.7.3/目录下创建tmp文件夹

# mkdir /root/ Hadoop/hadoop-2.7.3/tmp

b) 编辑core-site.xml

# vim/root/Hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml

在<configuration></configuration>中加入以下内容

       <property>

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

              <value>/root/Hadoop/hadoop-2.7.3/tmp</value>

              <!--请先在 /usr/hadoop 目录下建立 tmp 文件夹-->

              <description>Abase for other temporary directories.</description>

       </property>

       <!--file system properties -->

       <property>

              <name>fs.default.name</name>

              <value>hdfs://master:9000</value>

       </property>

如下配置是读写sequence file 的 buffer size,可减少 I/O 次数。在大型的 Hadoop cluster,建议可设定为 65536 到 131072,默认值 4096

       <property>

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

              <value>131702</value>

       </property>

2.4 配置hdfs-site.xml文件

配置数据副本数量,先配成1,再复制。

# vim /root/Hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml

在<configuration></configuration>中加入以下内容

       <property>

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

              <value>file:/root/Hadoop/hadoop-2.7.3/tmp/dfs/name</value>

       </property>

       <property>

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

              <value>file:/root/Hadoop/hadoop-2.7.3/tmp/dfs/data</value>

       </property>

       <property>

              <name>dfs.replication</name>

              <value>1</value>

              <!--备注:replication 是数据副本数量,默认为3,salve少于3台就会报错-->

       </property>

       <property>

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

              <value>master:9001</value>

       </property>

       <property>

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

              <value>true</value>

       </property>

2.5 配置mapred-site.xml文件

配置的是JobTracker的地址和端口,复制一份template,并改名。

# vim/root/Hadoop/hadoop-2.7.3/etc/hadoop/mapred-site.xml

在<configuration></configuration>中加入以下内容

       <property>

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

              <value>yarn</value>

       </property>

       <property>

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

              <value>master:10020</value>

       </property>

       <property>

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

              <value>master:19888</value>

       </property>

2.6 配置yarn-site.xml文件

# vim/root/Hadoop/hadoop-2.7.3/etc/hadoop/yarn-site.xml

在<configuration></configuration>中加入以下内容

       <property>

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

              <value>mapreduce_shuffle</value>

       </property>

       <property>

              <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>

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

       </property>

       <property>

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

              <value>master:8032</value>

       </property>

       <property>

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

              <value>master:8030</value>

       </property>

       <property>

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

              <value>master:8031</value>

       </property>

       <property>

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

              <value>master:8033</value>

       </property>

       <property>

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

              <value>master:8088</value>

       </property>

 <property>

       <name>yarn.resourcemanager.hostname</name>

        <value>master</value>

  </property>

  <property>

       <description>The https adddress of the RM webapplication.</description>

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

       <value>${yarn.resourcemanager.hostname}:8090</value>

  </property>

2.7 配置masters文件:(目录下没有,从slaves复制一份)

打开该文件,把“localhost”改为master。该文件指定namenode

2.8 配置slaves文件(Master主机特有)

打开该文件,把“localhost”改为slave1。该文件中有哪些主机名,哪些主机就作为datanode,每个主机名占一行

3. 配置Slaves节点

为了降低配置Hadoop的难度,并且同时测试系统动态扩展的能力,Slave节点的配置实际上分为两个阶段:

复制主节点虚拟机作为从节点1:

1) 使用VMWare的“克隆”功能复制主节点作为从节点1;

2) 将从节点1命名为slave1;

3) 将从节点1的ip地址配置为192.168.241.236;

4) 将从节点1的主机名改为slave1

5) 修改从节点1的hosts网址和域名映射

复制从节点1作为从节点2和从节点3

1) 在VMware中克隆虚拟机,分别命名为Slave2和Slave3(完全复制)

2) 打开从节点,分别把IP地址改为192.168.241.237,192.168.241.238

3) 修改从节点2、3的主机名、ip地址和域名映射

4) 修改master节点配置文件,加入两个新的从节点

$ vim $HADOOP_HOME/etc/hadoop/slaves

添加如下内容:

slave1

slave2

slave3

该文件只在master节点上起作用,各个slave节点改不改都可以。

将新添加的节点的主机名添加到该文件中,一个主机名占一行。

5) 修改master配置,子节点数改为3;

$ vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

       <property>

              <name>dfs.replication</name>

              <value>3</value>

              <!--备注:replication 是数据副本数量,默认为3,salve少于3台就会报错-->

       </property>

6) 分别重启四台虚拟机。

执行完所有的配置之后,需要确保所有的机器之间都可以可以访问到的,通过命令行中的“ping 机器IP”指令,验证所有虚拟机之间都是可以互通的。

4. 安装SSH

4.1 安装和启动SSH协议

安装CentOS6.0时,我们选择了一些基本安装包, ssh和rsync已经安装了。通过下面命令查看:

# rpm -qa | grep openssh

# rpm -qa | grep rsync

结果显示如下图:

4.2 Master机器上生成密码对

在Master节点上执行以下命令:

# ssh-keygen -t rsa -P ''

保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/root/.ssh"目录下。

4.3 把id_rsa.pub追加到授权的key里面去

在Master节点上做如下配置:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

4.4 修改文件"authorized_keys"权限

chmod 600 ~/.ssh/authorized_keys

4.5 设置SSH配置

用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容:

RSAAuthentication yes # 启用 RSA 认证

PubkeyAuthentication yes # 启用公钥私钥配对认证方式

AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)

4.6 验证设置

设置完之后,重启SSH服务,使设置有效,执行如下命令:

service sshd restart 

4.7 复制公钥到Slave机器上

在主机上执行:

scp ~/.ssh/id_rsa.pub root@192.168.241.236:~/

在Slave机器上创建.ssh文件夹并设置权限为700

mkdir ~/.ssh

chmod 700 ~/.ssh

4.8 追加到授权文件

把主节点的公钥追加到授权文件"authorized_keys"

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

4.9 用root用户修改slave节点的"/etc/ssh/sshd_config"

具体命令如下:

RSAAuthentication yes # 启用 RSA 认证

PubkeyAuthentication yes # 启用公钥私钥配对认证方式AuthorizedKeysFile/root/.ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)

     重启服务:service sshd restart

4.10 用Master.Hadoop使用SSH无密码登录Slave1.Hadoop

在Slave节点:

ssh-keygen -t rsa -P ''

cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

scp ~/.ssh/id_rsa.pub root@192.168.241.235:~/

在Master节点:

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

完成ssh配置

5. 格式化Hadoop系统

在启动Hadoop系统之前,需要先格式化一个Hadoop系统,执行如下指令:

# hadoop namenode -format

如果顺利完成,则说明系统格式化完成,下面即可启动并使用Hadoop系统了,如果失败,则需要查看Hadoop安装目录中的logs目录下的日志了。

6. 启动Hadoop集群

6.1 启动

在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。

a) 关闭防火墙执行命令:

# sudo systemctl stop firewalld.service && sudo systemctldisable firewalld.service

b) 启动NameNode、DataNode和SecondaryNameNode

# start-dfs.sh

执行结果如下图:

c) 启动ResourceManager和NodeManager

# start-yarn.sh

执行结果如下图:

6.2 验证hadoop启动

用““hadoop dfsadmin -report”

Master服务器的状态:

Slave服务器的状态:


7. 遇到的困难及解决方法

7.1 slaver

注意:单词拼写slave写成slaver会导致意料不到的错误

7.2 service iptables stop 提示Failed to stop iptables.service: Unit iptables.service not loaded

centos从7开始默认用的是firewalld,这个是基于iptables的,虽然有iptables的核心,但是iptables的服务是没安装的。所以你只要停止firewalld服务即可:sudo systemctl stop firewalld.service&& sudo systemctl disable firewalld.service

如果你要改用iptables的话,需要安装iptables服务:

sudo yum install iptables-services

sudo systemctl enable iptables && sudosystemctl enable ip6tables

sudo systemctl start iptables && sudosystemctl start ip6tables

7.3 使用hadoop命令提示如下错误

DEPRECATED: Use of this script to execute hdfscommand is deprecated.

Instead use the hdfs command for it.

从0.21.0版本以后,hadoop 命令换成了hdfs命令,将命令中的hadoop换为hdfs即可。

7.4 出现如下警告是版本不一致问题

Java HotSpot(TM) Client VM warning: You haveloaded library /usr/local/hadoop2.5/lib/native/libhadoop.so.1.0.0 which mighthave disabled stack guard. The VM will try to fix the stack guard now

Java HotSpot(TM) 64-Bit Server VM warning: Youhave loaded library /usr/local/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0 whichmight have disabled stack guard. The VM will try to fix the stack guard now.

WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable

这个问题的错误原因会发生在64位的操作系统上,原因是从官方下载的hadoop使用的本地库文件(例如lib/native/libhadoop.so.1.0.0)都是基于32位编译的,运行在64位系统上就会出现上述错误。解决方法之一是在64位系统上重新编译hadoop,另一种方法是在hadoop-env.sh和yarn-env.sh中添加如下两行:

exportHADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native

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

7.5 执行start-dfs.sh后,DateNode消失

打开hdfs-site.xml里配置的datanode和namenode对应的目录,分别打开current文件夹里的VERSION,可以看到clusterID项正如日志里记录的一样,确实不一致,修改datanode里VERSION文件的clusterID 与namenode里的一致,再重新启动dfs(执行start-dfs.sh)再执行jps命令可以看到datanode已正常启动。

Hadoop配置完成!

出现该问题的原因:在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode-format),这时namenode的clusterID会重新生成,而datanode的clusterID 保持不变。


原创粉丝点击