Hadoop+Hbase+Zookeeper伪分布式集群实践初探和心得记录

一.背景:

首先是为了配合开发同学搭建列数据库,Hbase环境作为测试,由于服务器资源有限,只能把所有组件都安装部署在同一台服务器上,同时需要启用zookeeper,所以为伪分布式集群模式。而大数据流行的今天,学习相关组件技术也是很有必要的。为了更好的了解每一个组件,甚至是每一条配置的具体作用和原理,这里我们采用每个不同组件单独部署,而非使用CDH(Cloudera)等集成环境安装包去进行一键式部署。

二.部署相关:

1.安装java环境

下载jdk1.8.0_131并配置好环境变量,linux环境写入/etc/profile,此处不详细介绍。

/etc/profile内容如下,其中自行根据实际jdk目录修改对应的文件路径,修改后用source /etc/profile使环境变量生效:

# Java
export JAVA_HOME=/usr/java/jdk1.8.0_131
export JRE_HOME=/usr/java/jdk1.8.0_131/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH

2.安装hadoop

此处我选用的是非源码版本hadoop-2.9.1,软件压缩包文件大小约为340M。

(1)解压后,/etc/profile加入如下环境变量,同样,自行修改文件实际路径,修改后用source /etc/profile使环境变量生效:

# Hadoop
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.9.1
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

(2)然后修改etc/hadoop下的几个配置文件,新增或修改如下配置:

1.hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_131
# 指定ssh端口,顾名思义,不指定则默认为22
export HADOOP_SSH_OPTS="-p 63000"


2.core-site.xml
<configuration>
  <property>
     <name>fs.defaultFS</name>
     <value>hdfs://test6:9000</value>
  </property>
  <property>
     <name>hadoop.tmp.dir</name>
     <value>/root/hadoop/tmp/</value>
     <description>Abase for other temporary directories.</description>
  </property>
</configuration>

3.hdfs-site.xml
<configuration>
<property>
   <name>dfs.replication</name>
   <value>1</value>
</property>
<property>
      <name>dfs.permissions</name>
      <value>false</value>
      <description>need not permissions</description>
</property>
</configuration>

4.mapred-site.xml
<configuration>
<property>
    <name>mapred.job.tracker</name>
    <value>test6:9001</value>
</property>
</configuration>

说明:

①hadoop-env.sh脚本中,由于服务器自定义了ssh服务端口,所以需要添加变量HADOOP_SSH_OPTS="-p 63000"指向新端口63000

②core-site.xml中,test6为服务器的主机名hostname,可根据实际修改,由于该环境作测试用,所以hadoop的数据节点datanode和名称节点namenode不使用永久路径存放,而采用临时空间路径存放在/root/hadoop/tmp下,初始化hadoop前注意提前建立好相关目录

③hdfs-site.xml中,因为是伪分布式集群,所以dfs.replication只有一个分片,值为1

④mapred-site.xml,同样test6为主机名请对应自己的服务器主机名修改,注意此处没有启用hadoop的yarn框架

(3)执行bin/hadoop namenode -format 初始化hdfs数据

(4)执行bin/start-all.sh启动hadoop所有组件,接着运行jps命令会看到ResourceManager,SecondaryNameNode,NodeManager,NameNode,DataNode五个进程,并可在浏览器上查看hadoop的状态信息http://test6:50070

3.安装zookeeper

(1)开发同学提出要求用zookeeper接入hbase,且zookeeper集群推选主节点Master等几个角色要求服务器节点为奇数个1,3,5,7....,由于本次搭建的是伪分布式集群模式,所以只部署1台服务器

(2)下载zookeeper-3.4.12,同样不选用源码版,不自行编译,然后解压,进入conf目录并拷贝默认的配置文件模板zoo_sample.cfg,并命名为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=/root/zk/data
# 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=test6:2888:3888

说明:

①dataDir=/root/zk/data         #指定zookeeper的数据存放目录,启动前需要建立好该目录

②server.1=test6:2888:3888  #此处需要按行分开指定所有的zookeeper集群节点,server后的数字 “1” 表示节点的id,范围为1-255,即zookeeper集群最多可以有255个节点,test6依然为节点服务器的主机名hostname,此处由于我们是伪分布式集群模式,只有一个节点,所以只有一行配置

(3)由于上述配置文件定义当前节点服务器的zookeeper的id为1,所以需要在dataDir目录下创建一个内容为id值 “1” ,文件名为myid的文件,表面当前节点的id为1

(4)最后执行bin目录下的zkServer.sh start ,启动zookeeper

4.安装hbase

(1)下载hbase-1.4.7并解压,同样不使用src源码包

(2)添加hbase的环境变量到/etc/profile,同时添加PATH变量便于直接使用各组件相关的工具:

# HBase
export HBASE_HOME=/usr/local/hadoop/hbase-1.4.7

export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${HBASE_HOME}/bin:$PATH

(3)修改hbase目录conf下的配置文件,更新或新增配置如下:

1.hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_131
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.9.1
export HBASE_HOME=/usr/local/hadoop/hbase-1.4.7
export HBASE_CLASSPATH=/usr/local/hadoop/hadoop-2.9.1/etc/hadoop
export HBASE_MANAGES_ZK=false

2.hbase-site.xml
<configuration>
<!-- 存储目录 -->
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://test6:9000/hbase</value>
    <description>The directory shared byregion servers.</description>
  </property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>test6</value>
  </property>
  <property>
    <name>hbase.tmp.dir</name>
    <value>/root/hbase/tmp</value>
  </property>
<!-- false是单机模式,true是分布式模式  -->
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.master</name>
    <value>test6:60000</value>
  </property>
</configuration>

说明:

①hbase-env.sh中的HBASE_CLASSPATH指定hadoop的配置文件目录以便hbase能探测到hadoop,否则hbase在使用hdfs数据源,非单机模式下的时候启动会报异常导致无法启动

②hbase-env.sh中的HBASE_MANAGES_ZK=false指定hbase不使用自带zookeeper而使用独立安装的

③hbase-site.xml中hbase.rootdir项指定hbase使用hadoop的hdfs数据存储,test6为hadoop所在节点服务器的主机名hostname,9000为hdfs的服务监听端口

④hbase-site.xml中hbase.zookeeper.quorum中指定zookeeper所在的节点主机名,当前为伪分布式集群模式,只有test6一个节点,如有多个zookeeper节点可以用逗号分隔开不同的主机名,如hostname1,hostname2,hostname3...

⑤hbase-site.xml中hbase.tmp.dir指定hbase的临时数据存储目录为/root/hbase/tmp,注意启动hbase前需要提前建立好对应目录

⑥hbase-site.xml中hbase.cluster.distributed中指定当前hbase为分布式还是单机模式,由于我们使用外部的zookeeper,所以此处要为分布式true,如为false,则hbase会使用自带的zookeeper,由于前面的步骤我们设置了hbase不启用自带zookeeper,所以会导致冲突出错无法启动hbase

⑦hbase-site.xml中hbase.master指定hbase的master角色所在的主机名hostname和所监听的端口,但实际情况下,在伪分布式集群模式中,启动hbase后发现60000端口没有启动监听,这个问题后续待探究

(4)拷贝zookeeper刚才conf目录下修改的zoo.cfg配置文件到hbase的conf目录下,告诉hbase去读取外部zookeeper的这个配置

(5)执行bin目录下的start-hbase.sh,启动hbase,注意启动前要先确保hadoop已经启动且可以写入数据

 

参考文章:

https://blog.csdn.net/xuedingkai/article/details/78816862

https://blog.csdn.net/xiaolin93/article/details/54985962

https://blog.csdn.net/dream_an/article/details/52089883

https://blog.csdn.net/hliq5399/article/details/78193113

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值