部署完全分布式文件系统hadoop2.7.3+zookeeper+hbase(已排坑)


目录

  • 部署完全分布式文件系统hadoop2.7.3+zookeeper+hbase(已排坑)
  • 一、环境准备:
  • 二、安装JDK
  • 三、安装HADOOP
  • 四、安装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

hadoop etc里没有profile etc文件下找不到hadoop_xml

二、安装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

hadoop etc里没有profile etc文件下找不到hadoop_hadoop_02

注意:虽说=左右不能留空格,但~/ 和 $也不能留,不然会发现不仅jdk路径没配好, 其他所有命令都无法正常使用了

错误演示:

hadoop etc里没有profile etc文件下找不到hadoop_hdfs_03


hadoop etc里没有profile etc文件下找不到hadoop_hadoop_04


然后需要初始化环境变量

export PATH=/usr/bin:bin
vi ~/.bashrc /*vi
source ~/.bashrc

环境变量没问题只需要使环境变量生效

source ~/.bashrc

3.然后检查jdk是否安装成功

java -version

hadoop etc里没有profile etc文件下找不到hadoop_hadoop_05

三、安装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

hadoop etc里没有profile etc文件下找不到hadoop_hdfs_06

使环境变量生效

source ~/.bashrc

whereis 检验hdfs start-all.sh是否安装成功

hadoop etc里没有profile etc文件下找不到hadoop_hadoop_07

3.修改hadoop配置文件,到hadoop(自己hadoop文件名,这里是软链接)的etc文件下

cd /hadoop/ect/hadoop

3-1.修改hadoop-env.sh,找到以下代码,去掉export前的#

vi hadoop-env.sh

hadoop etc里没有profile etc文件下找不到hadoop_zookeeper_08

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>

hadoop etc里没有profile etc文件下找不到hadoop_hadoop_09


3-3.然后修改hdfs-site.xml文件,配置分布式节点个数,修改dfs.replicatinotallow=2[默认3]

vi hdfs-site.xml
<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>

hadoop etc里没有profile etc文件下找不到hadoop_hdfs_10


这里的节点可以理解分布式系统中打工仔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>

hadoop etc里没有profile etc文件下找不到hadoop_hadoop_11


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>

hadoop etc里没有profile etc文件下找不到hadoop_hadoop_12


3-6.配置slaves文件(指定哪些主机是Slaves(被控制的主机),这时还没有克隆出来,这个配置完成之后克隆)把原先的localhost改为node2和node3(自己要克隆出来的主机名)

vi slaves

hadoop etc里没有profile etc文件下找不到hadoop_zookeeper_13


4.克隆主机,构建集群环境,保证没台主机都有hdfs和jdk,不用再修改配置文件和环境变量,当然这步可以放到最后

在vmawre中在者台主机上鼠标右击——>管理——>克隆,克隆出两台主机,需挂起(保留当前状态)或者关机

hadoop etc里没有profile etc文件下找不到hadoop_hdfs_14


4-1.依此更改另外两台主机的主机名为node2、node3

sudo vi /etc/hostname

4-2.对3台主机都进行映射IP地址及主机名,格式如下,头部只保留localhost,尾部依此添加自己的每台主机的ip(ifconfig查看)空格+主机名

sudo vi /etc/hosts

hadoop etc里没有profile etc文件下找不到hadoop_hdfs_15


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

hadoop etc里没有profile etc文件下找不到hadoop_zookeeper_16


5-1此时我们的完全分布式文件系统已经部署完成,可以用jps查看master和slaver的进程

hadoop etc里没有profile etc文件下找不到hadoop_xml_17


hadoop etc里没有profile etc文件下找不到hadoop_zookeeper_18


5-2.也可以登陆web端查看进程,主机名加端口号

namenode、datanode (50070)sercondarynamenode(50090 ),YARN(8088)

hadoop etc里没有profile etc文件下找不到hadoop_hdfs_19


hadoop etc里没有profile etc文件下找不到hadoop_xml_20

四、安装ZOOKEEPER

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

hadoop etc里没有profile etc文件下找不到hadoop_hadoop_21

2.修改zoo.samgle.cfg为zoo.cfg

sudo mv zoo.samgle.cfg zoo.cfg

3.到tmp文件夹下创建新建mkid文件标识主机名(我们这里是编辑新文件),

cd ..
cd tmp
sudo vi myid

因为是第一主机node1,只编写1

hadoop etc里没有profile etc文件下找不到hadoop_hdfs_22


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

hadoop etc里没有profile etc文件下找不到hadoop_hdfs_23

六、安装HBASE

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>

hadoop etc里没有profile etc文件下找不到hadoop_hdfs_24

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

hadoop etc里没有profile etc文件下找不到hadoop_xml_25

七、启动顺序与查看进程

1.当所有文件配置好后就可以开始启动我们的集群了
启动顺序:hdfs(node1)——> zookeeper(node1/node2/node3) ——> hbase(node1)

第一步:

hadoop etc里没有profile etc文件下找不到hadoop_hadoop_26


此时node1 三个进程(不含jps),node2/node3是两个

hadoop etc里没有profile etc文件下找不到hadoop_zookeeper_27


第二步:启动三台主机的zookeeper

cd ~/zookeeper
bin/zkServer.sh start

hadoop etc里没有profile etc文件下找不到hadoop_zookeeper_28


hadoop etc里没有profile etc文件下找不到hadoop_hdfs_29


hadoop etc里没有profile etc文件下找不到hadoop_hadoop_30


挨个启动zookeeper就行,没有主次,启动后会bin/zkServer.sh status查看状态,会发现有一台主机是leader,另外两台是follower,并非是node1是leader

hadoop etc里没有profile etc文件下找不到hadoop_xml_31

jps查看进程:

hadoop etc里没有profile etc文件下找不到hadoop_zookeeper_32


第三步:启动hbase(hbase会默认启动hbase的主机为Master,所以不要在node2/node3启动hbase)

cd ~/hbase
bin/start-hbase.sh

hadoop etc里没有profile etc文件下找不到hadoop_hadoop_33


jps查看进程:

hadoop etc里没有profile etc文件下找不到hadoop_hdfs_34


大功告成!