博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop Hadoop运行环境搭建
阅读量:4105 次
发布时间:2019-05-25

本文共 12718 字,大约阅读时间需要 42 分钟。

Hadoop运行环境搭建

Linux虚拟机安装请看:https://blog.csdn.net/sjjsaaaa/article/details/105756559

主机规划:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、虚拟机环境准备

1. 克隆虚拟机

先选定要克隆的机器zaz01------菜单栏上的虚拟机------管理-------克隆

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

虚拟机的名字自己取,点完成即可,这样虚拟机就克隆好了。

2.修改主机名

打开虚拟机以后先root

然后执行:vi /etc/sysconfig/network 命令
将HOSTNAME= 后面的改成你想要改的名字。
按下esc。
:wq 保存退出。

3.虚拟机网络配置

先输入 ifconfig 看看有没有什么问题。

在这里插入图片描述
此时网络有问题。

执行:vi /etc/udev/rules.d/70-persistent-net.rules

在这里插入图片描述

把倒数第一行的eth1改为eth0
记住倒数第二行的00:0c:29:84:6d:7b
在这里插入图片描述
删除或注释。
最后变成:
在这里插入图片描述

然后执行:vi /etc/sysconfig/network-scripts/ifcfg-eth0

在这里插入图片描述

把HWADDR改成刚才记住的6对数据。

把BOOTPROTO改成dhcp
把:在这里插入图片描述

这三行用#注释掉。

用:reboot 重启虚拟机

输入:ifconfig

在这里插入图片描述

说明网络配置好了。

接着输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0

把BOOTPROTO改成static
把注释的解开。

捆绑主机和IP地址:

输入: vi /etc/hosts

把最后一行的ip地址最后三个数改掉,主机名改成你现在的主机名。

这样网络就配置好了。

4.关闭防火墙

临时关闭: service iptables stop

永久关闭:chkconfig iptables off
重启:reboot 后生效

5.修改时间

date 查看当前时间

cd /usr/share/zoneinfo/ 进入时间区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 复制
yum install ntp 下载ntp
ntpdate pool.ntp.org 同步时间

运行完上面几个步骤就可以看到是你当前的电脑时间了。

6.配置免密码登录

为hadoop用户配置SSH免密码登录功能:

su hadoop (切换到hadoop用户)
cd (回到hadoop用户的根目录下)
mkdir .ssh (创建一个.ssh文件夹或目录)
ssh-keygen -t rsa(ssh-keygen是密钥生成器,-t是一个参数,rsa是一种加密算法)
cd .ssh/(进行.ssh目录)
cat id_rsa.pub >> authorized_keys(将公钥文件id_rsa.pub中的内容复制到相同目录下的authorized_keys文件中)
cd ..(切换到hadoop用户的根目录)
chmod 700 .ssh (为.ssh目录设置目录所有者权限为可读、可写、可运行,群组或其它人员没有任何请问权限)
chmod 600 .ssh/* (设置.ssh目录下的文件所有者权限为可读、可写,群组或其它人员没有任何请问权限)

ssh zaz01(zaz01是我的主机名,这里你把它改成自己的主机名)(执行了这条命令后,在那上面输入yes就可以了)

7.集群脚本工具的使用。

在zaz01节点,hadoop3用户下创建/home/hadoop3/tools目录。 mkdir /home/hadoop3/tools

进入该目录:cd /home/hadoop3/tools
将本地脚本文件上传至/home/hadoop3/tools目录下,这些脚本大家可以自己写, 如果不熟练也可以直接使用。

[hadoop3@zaz01r tools]$ rz deploy.conf

[hadoop3@zaz01 tools]$ rz deploy.sh
[hadoop3@zaz01 tools]$ rz runRemoteCmd.sh
[hadoop3@zaz01 tools]$ ls
deploy.conf deploy.sh runRemoteCmd.sh

deploy.con的配置文件内容:

zaz01,all,namenode,zookeeper,resourcemanager,zaz02,all,slave,namenode,zookeeper,resourcemanager,zaz03,all,slave,datanode,zookeeper,

deploy.sh远程复制文件脚本内容:

#!/bin/bash#set -xif [ $# -lt 3 ]then   echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag"  echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile"  exit fisrc=$1dest=$2tag=$3if [ 'a'$4'a' == 'aa' ]then  confFile=/home/hadoop3/tools/deploy.confelse   confFile=$4fiif [ -f $confFile ]then  if [ -f $src ]  then    for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`     do       scp $src $server":"${dest}    done   elif [ -d $src ]  then    for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`     do       scp -r $src $server":"${dest}    done   else      echo "Error: No source file exist"  fielse  echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"fi

runRemoteCmd.sh远程执行命令脚本内容:

#!/bin/bash#set -xif [ $# -lt 2 ]then   echo "Usage: ./runRemoteCmd.sh Command MachineTag"  echo "Usage: ./runRemoteCmd.sh Command MachineTag confFile"  exit ficmd=$1tag=$2if [ 'a'$3'a' == 'aa' ]then    confFile=/home/hadoop3/tools/deploy.confelse   confFile=$3fiif [ -f $confFile ]then    for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`     do       echo "*******************$server***************************"       ssh $server "source /etc/profile; $cmd"    done else  echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"fi

三个文件,方便我们搭建hadoop3分布式集群。

如果我们想直接使用脚本,还需要给脚本添加执行权限。

[hadoop3@zaz01 tools]$ chmod u+x deploy.sh

[hadoop3@zaz01 tools]$ chmod u+x runRemoteCmd.sh

同时我们需要将/home/hadoop3/tools目录配置到PATH路径中。

[hadoop3@zaz01 tools]$`vi ~/.bashrc` PATH=/home/hadoop3/tools:$PATH  export PATH

我们在zaz01节点上,通过runRemoteCmd.sh脚本,一键创建所有节点的软件安装目录.

[hadoop3@zaz01 tools]$ runRemoteCmd.sh "mkdir /home/hadoop3/app" all

安装JDK

查询是否安装Java软件:rpm -qa | grep java

如果安装的版本低于1.7,卸载该JDK: sudo rpm -e 软件包
查看JDK安装路径:which java 1

下载jdk1.8至本地,然后将jdk1.8上传至/home/hadoop3/app目录下。

导入文件:rz 导入你Windows的系统中下载好的jdk安装包。

rz 导入不进来 ,可以试试 rz -b 或者rz -wb

解压

[hadoop3@zaz01 app]$ tar –zxvf jdk-8u51-linux-x64.tar.gz

删除安装包:

[hadoop3@zaz01r app]$ rm –rf jdk-8u51-linux-x64.tar.gz

[hadoop3@zaz01 app]$ ls
jdk1.8.0_51

创建jdk软链接

[hadoop3@zaz01 app]$ ln –s jdk1.8.0_51 jdk

在hadoop3用户下,配置jdk环境变量

[hadoop3@zaz01 app]$ vi ~/.bashrc

JAVA_HOME=/home/hadoop3/app/jdkCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarPATH=$JAVA_HOME/bin:/home/hadoop3/tools:$PATHexport JAVA_HOME CLASSPATH PATH

生效配置文件

[hadoop3@zaz01 app]$ source ~/.bashrc

确认jdk配置成功

[hadoop3@zaz01 app]$ java -version

java version "1.8.0_51"Java(TM) SE Runtime Environment (build 1.8.0_51-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)

通过deploy.sh脚本将jdk安装目录分发到另外两个节点

[hadoop3@zaz01 app]$ deploy.sh jdk1.8.0_51 /home/hadoop3/app/ slave

在另外两个节点做相关操作,完成jdk配置.

Zookeeper安装

下载zookeeper-3.4.6.tar.gz安装包,然后上传至/home/hadoop3/app目录

解压、删除

[hadoop3@zaz01 app]$ tar –zxvf zookeeper-3.4.6.tar.gz

[hadoop3@zaz01 app]$ ls

zookeeper-3.4.6

[hadoop3@zaz01 app]$ rm –rf zookeeper-3.4.6.tar.gz

修改配置文件

[hadoop3@zaz01 app]$ cd zookeeper-3.4.6/conf/ #进入这个目录
[hadoop3@zaz01 conf]$ cp zoo_sample.cfg zoo.cfg

[hadoop3@zaz01 conf]$vi zoo.cfg # 修改这个配置文件

#The number of milliseconds of each tick

tickTime=2000
#The number of ticks that the initial
#synchronization phase can take
initLimit=10
#The number of ticks that can pass between
#sending a request and getting an acknowledgement
syncLimit=5
#the directory where the snapshot is stored.
#do not use /tmp for storage, /tmp here is just
#example sakes.
dataDir=/home/hadoop3/data/zookeeper/zkdata
dataLogDir=/home/hadoop3/data/zookeeper/zkdatalog
#the port at which the clients will connect
clientPort=2181
#the maximum number of client connections.
#increase this if you need to handle more clients
#maxClientCnxns=60
#Be sure to read the maintenance section of the
#administrator guide before turning on autopurge.
#http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
#Purge task interval in hours
#Set to “0” to disable auto purge feature
#autopurge.purgeInterval=1
server.1=zaz01:2888:3888
server.2=zaz02:2888:3888
server.3=zaz03:2888:3888

备注:

1 2 3代表服务编号;2888代表Zookeeper节点通信端口;3888代表zook选举端口

远程拷贝

通过远程脚本deploy.sh将Zookeeper安装目录拷贝到其他节点。

[hadoop3@zaz01 app]$ deploy.sh zookeeper-3.4.6 /home/hadoop3/app/ slave

所有节点创建数据目录和日志目录

[hadoop3@zaz01 app]$ runRemoteCmd.sh "mkdir -p /home/hadoop3/data/zookeeper/zkdata" all

[hadoop3@zaz01 app]$ runRemoteCmd.sh "mkdir -p /home/hadoop3/data/zookeeper/zkdatalog" all

创建myid文件

在各个节点上,在 dataDir 所指定的目录下创一个名为 myid 的文件, 文件内容为各个server 点后面的数字。

[hadoop3@zaz01 zkdata]$ vi myid

输入一个1,然后:wq保存三个节点都需要设置,第二个节点设置成2,第三个节点设置成3

测试运行:

使用runRemoteCmd.sh 脚本,启动所有节点上面的Zookeeper。

[hadoop3@zaz01 zookeeper-3.4.6]$runRemoteCmd.sh "/home/hadoop3/app/zookeeper-3.4.6/bin/zkServer.sh start" zookeeper

查看所有节点上面的QuorumPeerMain进程是否启动。

[hadoop3@zaz01 zookeeper-3.4.6]$ runRemoteCmd.sh "jps" all

查看所有Zookeeper节点状态。

[hadoop3@zaz01 zookeeper-3.4.6]$ runRemoteCmd.sh "/home/hadoop3/app/zookeeper-3.4.6/bin/zkServer.sh status"

如果一个节点为leader,另两个节点为follower,则说明Zookeeper安装成功。

Hadoop3.0分布式集群搭建

1配置HDFS

到Hadoop官网下载hadoop-3.0.0-alpha2.tar.gz,并上传至/home/hadoop3/app目录

解压、删除压缩包、重命名:

[hadoop3@zaz01 app]$tar –zxvf hadoop-3.0.0-alpha2.tar.gz #解压

[hadoop3@zaz01 app]$ ls#查看目录

hadoop-3.0.0-alpha2.tar.gz hadoop-3.0.0-alpha3

[hadoop3@zaz01 app]$ rm –rf hadoop-3.0.0-alpha2.tar.gz# 删除压缩包

[hadoop3@zaz01 app]$ mv hadoop-3.0.0-alpha3 hadoop-3.0.0#重命名

配置hadoop-env.sh

[hadoop3@zaz01 app]$ cd hadoop-3.0.0/etc/hadoop/

[hadoop3@zaz01 hadoop]$ vi hadoop-env.sh

export JAVA_HOME=/home/hadoop3/app/jdk

export HADOOP_HOME=/home/hadoop3/app/hadoop

配置core-site.xml

[hadoop3@zaz01 hadoop]$ vi core-site.xml

fs.defaultFS hdfs://myclusterhadoop.tmp.dir /home/hadoop3/data/tmpha.zookeeper.quorum   zaz01:2181,zaz02:2181,zaz03:2181

配置hdfs-site.xml

[hadoop3@zaz01 hadoop]$ vi hdfs-site.xml

dfs.nameservices  mycluster  dfs.permissions.enabled  false  dfs.ha.namenodes.mycluster  nn1,nn2,nn3  dfs.namenode.rpc-address.mycluster.nn1  zaz01:9820  dfs.namenode.rpc-address.mycluster.nn2  zaz02:9820  dfs.namenode.rpc-address.mycluster.nn3  zaz03:9820  dfs.namenode.http-address.mycluster.nn1  zaz01:9870  dfs.namenode.http-address.mycluster.nn2  zaz02:9870  dfs.namenode.http-address.mycluster.nn3  zaz03:9870  dfs.ha.automatic-failover.enabled  true   dfs.namenode.shared.edits.dir  qjournal://zaz01:8485;zaz02:8485;zaz03:8485/mycluster  dfs.journalnode.edits.dir  /home/hadoop3/data/journaldata/jn  dfs.client.failover.proxy.provider.mycluster  org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider  dfs.ha.fencing.methods  sshfence  dfs.ha.fencing.ssh.private-key-files  /home/hadoop3/.ssh/id_rsa  dfs.ha.fencing.ssh.connect-timeout  10000  dfs.namenode.handler.count  100   dfs.ha.automatic-failover.enabled   true

配置workers

[hadoop3@zaz01 hadoop]$ vi workers

zaz01zaz02zaz03

注意:hadoop2.x配置的是slaves文件,这里有所改变。

将hadoop3.0安装包分发到其他节点

[hadoop3@zaz01 app]$ deploy.sh hadoop-3.0.0 /home/hadoop3/app/ slave

创建hadoop3.0软连接

在所有节点上创建hadoop3.0软连接,这里以zaz01节点为例。

[hadoop3@zaz01 app]$ ln -s hadoop-3.0.0 hadoop[hadoop3@zaz01 app]$ lshadoop  hadoop-3.0.0

配置hadoop3.0环境变量

在所有节点上配置hadoop3.0环境变量,这里以zaz01节点为例.

[hadoop3@zaz01 app]$ vi ~/.bashrcJAVA_HOME=/home/hadoop3/app/jdkHADOOP_HOME=/home/hadoop3/app/hadoopCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarPATH=$JAVA_HOME/bin:HADOOP_HOME/bin:$PATHexport JAVA_HOME CLASSPATH PATH HADOOP_HOME

格式化hdfs

第一次安装hdfs的时候,需要对hdfs进行相关的格式化操作,以后就不需要了。

先启动Zookeeper

[hadoop3@zaz01 app]$runRemoteCmd.sh "/home/hadoop3/app/zookeeper-3.4.6/bin/zkServer.sh start" al

接着启动journalnode

[hadoop3@zaz01 app]$ runRemoteCmd.sh "/home/hadoop3/app/hadoop/sbin/hadoop-daemon.sh start journalnode"

在zaz01节点上执行格式化

[hadoop3@zaz01 hadoop]$ bin/hdfs namenode -format #namenode 格式化

[hadoop3@zaz01 hadoop]$ bin/hdfs zkfc -formatZK #格式化高可用
[hadoop3@zaz01 hadoop]$bin/hdfs namenode #启动namenode

备用节点zaz02\zaz03通过zaz01节点元数据信息,分别在zaz02、zaz03节点上执行。

[hadoop3@zaz02 hadoop]$ bin/hdfs namenode -bootstrapStandby

[hadoop3@zaz03 hadoop]$ bin/hdfs namenode -bootstrapStandby

zaz02 ,zaz03节点同步完zaz01上的元数据之后,在zaz01节点上按下ctrl+c来结束namenode进程。

关闭所有节点journalnode

[hadoop3@zaz01 app]$ runRemoteCmd.sh "/home/hadoop3/app/hadoop/sbin/hadoop-daemon.sh stop journalnode" all

启动HDFS

[hadoop3@zaz01 hadoop]$ sbin/start-dfs.sh

配置YARN

配置mapred-site.xml

[hadoop3@zaz01 hadoop]$ vi mapred-site.xml

mapreduce.framework.nameyarnmapreduce.application.classpath/home/hadoop3/app/hadoop/etc/hadoop,    /home/hadoop3/app/hadoop/share/hadoop/common/*,    /home/hadoop3/app/hadoop/share/hadoop/common/lib/*,    /home/hadoop3/app/hadoop/share/hadoop/hdfs/*,    /home/hadoop3/app/hadoop/share/hadoop/hdfs/lib/*,    /home/hadoop3/app/hadoop/share/hadoop/mapreduce/*,    /home/hadoop3/app/hadoop/share/hadoop/mapreduce/lib/*,    /home/hadoop3/app/hadoop/share/hadoop/yarn/*,    /home/hadoop3/app/hadoop/share/hadoop/yarn/lib/*

配置yarn-site.xml

[hadoop3@zaz01 hadoop]$ vi yarn-site.xml

yarn.resourcemanager.connect.retry-interval.ms2000yarn.resourcemanager.ha.enabledtrueyarn.resourcemanager.ha.automatic-failover.enabledtrueyarn.resourcemanager.ha.automatic-failover.embeddedtrueyarn.resourcemanager.cluster-idyarn-rm-clusteryarn.resourcemanager.ha.rm-idsrm1,rm2yarn.resourcemanager.hostname.rm1zaz01yarn.resourcemanager.hostname.rm2zaz02yarn.resourcemanager.recovery.enabledtrue The class to use as the persistent store. yarn.resourcemanager.store.class org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStoreyarn.resourcemanager.zk.state-store.addresszaz01:2181,zaz02:2181,zaz03:2181yarn.resourcemanager.zk-addresszaz01r:2181,zaz02:2181,zaz03:2181yarn.resourcemanager.address.rm1zaz01:8032yarn.resourcemanager.scheduler.address.rm1zaz01:8034yarn.resourcemanager.webapp.address.rm1zaz01:8088yarn.resourcemanager.address.rm2zaz02:8032yarn.resourcemanager.scheduler.address.rm2zaz02:8034yarn.resourcemanager.webapp.address.rm2zaz02:8088yarn.nodemanager.aux-servicesmapreduce_shuffleyarn.nodemanager.aux-services.mapreduce_shuffle.classorg.apache.hadoop.mapred.ShuffleHandler

脚本分发修改的yarn配置

[hadoop3@zaz01 hadoop]$ deploy.sh mapred-site.xml /home/hadoop3/app/hadoop-3.0.0/etc/hadoop/ slave

[hadoop3@zaz01 hadoop]$ deploy.sh yarn-site.xml /home/hadoop3/app/hadoop-3.0.0/etc/hadoop/ slave

启动yarn

在zaz01节点启动resourcemanager

[hadoop3@zaz01 hadoop]$ bin/yarn --daemon start resourcemanager

在zaz02节点启动resourcemanager

[hadoop3@zaz02 hadoop]$ bin/yarn --daemon start resourcemanager

在3个节点分别启动nodemanager

[hadoop3@zaz01 hadoop]$ bin/yarn --daemon start nodemanager

[hadoop3@zaz02 hadoop]$ bin/yarn --daemon start nodemanager
[hadoop3@zaz03 hadoop]$ bin/yarn --daemon start nodemanager

如果以上操作没有问题,说明Hadoop3.0分布式高可用集群成功搭建完毕。

你可能感兴趣的文章