本文共 12718 字,大约阅读时间需要 42 分钟。
Linux虚拟机安装请看:https://blog.csdn.net/sjjsaaaa/article/details/105756559
主机规划:先选定要克隆的机器zaz01------菜单栏上的虚拟机------管理-------克隆
虚拟机的名字自己取,点完成即可,这样虚拟机就克隆好了。
打开虚拟机以后先root
然后执行:vi /etc/sysconfig/network
命令 将HOSTNAME= 后面的改成你想要改的名字。 按下esc。 :wq 保存退出。 先输入 ifconfig
看看有没有什么问题。
执行:vi /etc/udev/rules.d/70-persistent-net.rules
然后执行:vi /etc/sysconfig/network-scripts/ifcfg-eth0
把HWADDR改成刚才记住的6对数据。
把BOOTPROTO改成dhcp 把:这三行用#注释掉。
用:reboot
重启虚拟机
输入:ifconfig
说明网络配置好了。
接着输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0
捆绑主机和IP地址:
输入:vi /etc/hosts
把最后一行的ip地址最后三个数改掉,主机名改成你现在的主机名。
这样网络就配置好了。临时关闭: service iptables stop
chkconfig iptables off
重启:reboot
后生效 date
查看当前时间
cd /usr/share/zoneinfo/
进入时间区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
复制 yum install ntp
下载ntp ntpdate pool.ntp.org
同步时间 运行完上面几个步骤就可以看到是你当前的电脑时间了。
为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就可以了)
在zaz01节点,hadoop3用户下创建/home/hadoop3/tools目录。 mkdir /home/hadoop3/tools
cd /home/hadoop3/tools
将本地脚本文件上传至/home/hadoop3/tools目录下,这些脚本大家可以自己写, 如果不熟练也可以直接使用。 [hadoop3@zaz01r tools]$ rz deploy.conf
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
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
查询是否安装Java软件:rpm -qa | grep java
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
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-3.4.6.tar.gz安装包,然后上传至/home/hadoop3/app目录
解压、删除
[hadoop3@zaz01 app]$ tar –zxvf zookeeper-3.4.6.tar.gz
[hadoop3@zaz01 app]$ ls
[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
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安装成功。
到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
#查看目录
[hadoop3@zaz01 app]$ rm –rf hadoop-3.0.0-alpha2.tar.gz
# 删除压缩包
mv hadoop-3.0.0-alpha3 hadoop-3.0.0
#重命名 配置hadoop-env.sh
[hadoop3@zaz01 app]$ cd hadoop-3.0.0/etc/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进行相关的格式化操作,以后就不需要了。
先启动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 格式化
bin/hdfs zkfc -formatZK
#格式化高可用 [hadoop3@zaz01 hadoop]$bin/hdfs namenode
#启动namenode 备用节点zaz02\zaz03通过zaz01节点元数据信息,分别在zaz02、zaz03节点上执行。
[hadoop3@zaz02 hadoop]$ bin/hdfs namenode -bootstrapStandby
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
配置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
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
bin/yarn --daemon start nodemanager
[hadoop3@zaz03 hadoop]$ bin/yarn --daemon start nodemanager
如果以上操作没有问题,说明Hadoop3.0分布式高可用集群成功搭建完毕。