部署完全分布式文件系统hadoop2.7.3+zookeeper+hbase(已排坑)
目录
一、环境准备:
1台虚拟机,使用NET模式连接网络
然后进行以下操作(非必须)
sudo apt update //首先更新软件,否则无法定位软件包
sudo apt install net-tools //配置网卡,ifconfig无效时
sudo apt install ufw //安装防火墙
sudo ufw diasable //禁用防火墙
sudo apt-get install openssh-client //下载ssh客服端
sudo apt-get install openssh-server //下载ssh服务器
sudo /etc/init.d/ssh restart //重启ssh服务器
sudo dpkg –l | grep ssh //可检查ssh客户端、服务器是否安装
更改这台要作为master的主机名为node1(也可以直接master,然后克隆出来的主机改为slaver)
sudo vi /etc/hostname
二、安装JDK
1.下载软件,jdk-8u261-linux-x64.tar.gz: https://mirrors.huaweicloud.com/java/jdk/从华为镜像或者官网下载jdk8(jdk1.8),jdk版本过高会与hadoop不匹配,导致无法进行一些进程(如MapReduce),如果使用openjdk会导致无法开启zookeeper服务。
找到下载好的jdk(一般在Downloads)解压到根目录或其他,为其添加软链接,当环境变量配置成功后,如jdk版本下载错或者下载多个jdk版本时只需要更改软链接,不需再重新配置环境变量,相当于一个快捷方式。
tar -zxvf jdk1.8.0_261 -C ~/
cd ~
ln -s jdk1.8.0_261 jdk
2.配置环境变量,添加jdk路径,我安装在根目录所以是 ~/jdk( ~/ 为家目录,相当于/home/自己的用户名/),没加sudo编辑退出时需要加! ,末尾插入以下代码
编辑环境变量 vi ~/.bashrc
export JAVA_HOME=~/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:${JAVA_HOME}/bin
注意:虽说=左右不能留空格,但~/ 和 $也不能留,不然会发现不仅jdk路径没配好, 其他所有命令都无法正常使用了
错误演示:
然后需要初始化环境变量
export PATH=/usr/bin:bin
vi ~/.bashrc /*vi
source ~/.bashrc
环境变量没问题只需要使环境变量生效
source ~/.bashrc
3.然后检查jdk是否安装成功
java -version
三、安装HADOOP
1.下载软件,hadoop-2.7.3.tar.gz: https://hadoop.apache.org/releases.html首先安装伪分布式文件系统,找到安装包,同样解压到根目录下,并为其新建软链接
tar -zxvf hadoop-2.7.3.tar.gz -C ~/
cd ~
ln -s hadoop-2.7.3 hadoop
2.同样给hadoop配只环境变量,末尾插入以下代码
编辑环境变量 vi ~/.bashrc
export HBASE_HOME=~/hbase
export PATH=$PATH:$HBASE_HOME/bin
使环境变量生效
source ~/.bashrc
whereis 检验hdfs start-all.sh是否安装成功
3.修改hadoop配置文件,到hadoop(自己hadoop文件名,这里是软链接)的etc文件下
cd /hadoop/ect/hadoop
3-1.修改hadoop-env.sh,找到以下代码,去掉export前的#
vi hadoop-env.sh
3-2.修改core-site.xml,在本来没有配置的标签内加入以下代码(node1为自己主机名)
vi core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/jack/hadoop/tmp</value>
</property>
3-3.然后修改hdfs-site.xml文件,配置分布式节点个数,修改dfs.replication=2[默认3]
vi hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
这里的节点可以理解分布式系统中打工仔slaver(被操控的主机)。即一台主机构成伪分布式文件系统。因为我们后面会有3三台主机node1/node2/node3,2代表着,node1作为master,node2/node3作为slaver,即有2个节点。也可以改为1,即一台主机做牛做马,既当master又当slaver
3-4.修改mapred-site.xml,让MapReduce运行在YARN框架上(需先复制,或 mv 改名生成)
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3-5.修改yarn-site.xml文件
vi yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
3-6.配置slaves文件(指定哪些主机是Slaves(被控制的主机),这时还没有克隆出来,这个配置完成之后克隆)把原先的localhost改为node2和node3(自己要克隆出来的主机名)
vi slaves
4.克隆主机,构建集群环境,保证没台主机都有hdfs和jdk,不用再修改配置文件和环境变量,当然这步可以放到最后
在vmawre中在者台主机上鼠标右击——>管理——>克隆,克隆出两台主机,需挂起(保留当前状态)或者关机
4-1.依此更改另外两台主机的主机名为node2、node3
sudo vi /etc/hostname
4-2.对3台主机都进行映射IP地址及主机名,格式如下,头部只保留localhost,尾部依此添加自己的每台主机的ip(ifconfig查看)空格+主机名
sudo vi /etc/hosts
4-3.进行免密登陆设置,当切换主机、启动集群服务(hdfs、hbase)时不需要多次输入密码,在node1上进行密钥生成并复制到自己主机和node2、node3
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub node1
ssh-copy-id -i ~/.ssh/id_rsa.pub node2
ssh-copy-id -i ~/.ssh/id_rsa.pub node3
4-4.三台主机分别安装NTP服务获取网络时间保证集群内的主机时间一致,并验证
sudo apt-get install ntp
sudo dpkg -l | grep ntp
5-1此时我们的完全分布式文件系统已经部署完成,可以用jps查看master和slaver的进程
5-2.也可以登陆web端查看进程,主机名加端口号
namenode、datanode (50070)sercondarynamenode(50090 ),YARN(8088)
四、安装ZOOKEEPER
-
1.下载软件,zookeeper-3.4.14.tar.gz
-
https://zookeeper.apache.org/releases.html
在node1上操作,解压安装包至根目录,ln -s创建软链接为zookeeper
tar -zxvf zookeeper-3.4.14.tar.gz -C ~/
ln -s zookeeper-3.4.14 zookeeper
先cd至zookeeper创建一个tmp文件,用于存放数据文件和配置zookeeper的id
再cd至 conf目录给zoo.samgle.cfg配置以下信息
cd ~/zookeeper
mkdir tmp
cd conf
vi zoo.samgle.cfg
修改dataDir
dataDir=/home/jack/zookeeper/tmp
添加:
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
2.修改zoo.samgle.cfg为zoo.cfg
sudo mv zoo.samgle.cfg zoo.cfg
3.到tmp文件夹下创建新建mkid文件标识主机名(我们这里是编辑新文件),
cd ..
cd tmp
sudo vi myid
因为是第一主机node1,只编写1
4.把配置好的zookeeper文件夹(不是软链接)拷贝到node2、node3并修改他们的myid为2和3,@前为自己用户名 :后没有空格
scp -r zookeeper-3.4.14 jack@node2:~/
scp -r zookeeper-3.4.14 jack@node3:~/
然后到node2、node3添加软链接
5.配置三台主机的环境变量,末尾添加zookeeper路径
vi ~/.bashrc
export ZOOKEEPER_HOME=~/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
六、安装HBASE
-
1.下载软件,hbase-2.2.5-bin.tar.gz
-
https://hbase.apache.org/downloads.html
跟安装zookeeper一样,现在node1上操作,在拷贝到slaver再配置三台主机的环境变量
解压hbase至根目录并创建软链接
tar -zxvf hbase-2.2.5-bin.tar.gz -C ~/
ln -s hbase-2.2.5 hbase
2.cd至/hbase目录,创建zookeeper(自定义)文件夹,需要配置到/hbase/conf/hbase-site.xml中的hbase.zookeeper.property.dataDir中
cd hbase
mkdir zookeeper
3-1.cd至/conf配置hbase-site.xml和hbase-env.sh文件
cd ..
cd conf
vi hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://node1:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1,node2,node3</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>hbase.master.maxclockskew</name>
<value>180000</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/jack/hbase/zookeeper</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
3-2配置hbase-env.sh,HBASE_MANAGES_ZK=true中true改为false,就不会用到hbase中自带的zookeeper而是集群中部署的zookeeper,再添加jdk的路径。
vi hbase-env.sh
export HBASE_MANAGES_ZK=false
export JAVA_HOME=/home/jack/jdk
jdk路径这里前面不能使用~/ ,应该是hbase默认的 ~/ 是/home/root/,这个问题困扰了我好久,期间我一直再检查其他的配置文件
4.把node1配好的hbase目录拷贝到node2、node3节点,然后到另外两台主机中添加软链接(ln -s)
scp -r hbase-2.2.5 jack@node2:~/
scp -r hbase-2.2.5 jack@node3:~/
4.最后配置三台主机的环境变量,把hbase的路径加进去
vi ~/.bashrc
export HBASE_HOME=~/hbase
export PATH=$PATH:$HBASE_HOME/bin
七、启动顺序与查看进程
1.当所有文件配置好后就可以开始启动我们的集群了
启动顺序:hdfs(node1)——> zookeeper(node1/node2/node3) ——> hbase(node1)
第一步:
此时node1 三个进程(不含jps),node2/node3是两个
第二步:启动三台主机的zookeeper
cd ~/zookeeper
bin/zkServer.sh start
挨个启动zookeeper就行,没有主次,启动后会bin/zkServer.sh status查看状态,会发现有一台主机是leader,另外两台是follower,并非是node1是leader
jps查看进程:
第三步:启动hbase(hbase会默认启动hbase的主机为Master,所以不要在node2/node3启动hbase)
cd ~/hbase
bin/start-hbase.sh
jps查看进程:
大功告成!