admin

Hbase + Hadoop 伪分布式环境搭建
前言最近公司打算使用Hbase来存储数据,所以需要学习一波Hadoop和Hbase,刚开始可以说是毫无头绪,不知如...
扫描右侧二维码阅读全文
25
2018/10

Hbase + Hadoop 伪分布式环境搭建

前言

最近公司打算使用Hbase来存储数据,所以需要学习一波HadoopHbase,刚开始可以说是毫无头绪,不知如何下手,由于Hbase底层的存储我们选择的是HadoopHDFS,所以学习Hbase之前还是需要先学习一下Hadoop,但是Hadoop的内容比较多,而且学习起来也比较复杂,所以我也只是大致地了解了一下Hadoop,其核心就是MapReduce,了解了它的工作机制之后再去看Hbase就会好很多了。
之前是一开始直接去看Hbase的文档,结果里面有关Hadoop部分的都是一笔带过,看得不清不楚的,所以在学习Hbase之前先去了解一下Hadoop还是非常有必要的(经过这几天的学习,发现如果Hbase只是简单用作存储数据,从入门角度来看,完全没要先掌握MapReduce才能写代码,当然了Hbase是可以与MapReduce集成的)。
既然是入门学习,所以是从简单的增删改查做起的。
推荐书籍:

  • 《Hadoop权威指南》
  • 《Hbase权威指南》

注:《Hbase权威指南》中的代码与现在的版本的API存在一些差别,不过不怎么影响学习。

环境搭建

安装Habse时注意选择对应的Hadoop版本,官方文档中有介绍,如果版本没有对应上,可能会出现各种问题。
首先安装Hadoop:

[/opt]# tar -xvf hadoop-2.7.7.tar.gz
[/opt]# cd hadoop-2.7.7/etc/hadoop

配置环境变量:

export HADOOP_HOME=/opt/hadoop-2.7.7
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export HADOOP_SSH_OPTS="-p 16383"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

这里说下遇到的一些问题:

  1. ssh 端口问题,如果环境变量HADOOP_SSH_OPTS不进行配置,Hadoop默认ssh端口为22
  2. HADOOP_CONF_DIR环境变量的配置,设置Hadoop配置文件的目录,如果不设置的话,启动可能会发现配置不起作用

接下来配置集群所需的SSH免密码登录(用作集群的启动、停止等操作):

[/opt]# ssh-keygen -t rsa
[/opt]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[/opt]# chmod 0600 ~/.ssh/authorized_keys

编辑core-site.xml配置文件,这里只是为了跑起来,只配置关键属性即可,其他属性默认:

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://192.168.0.11:9001</value>
   </property>
</configuration>

这里注意端口问题即可。

编辑hdfs-site.xml文件,配置 hdfs 副本数、namenode 以及 datanode 数据存放位置:

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>

   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode</value>
   </property>

   <property>
      <name>dfs.data.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode</value>
   </property>
</configuration>

编辑yarn-site.xml文件:

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
</configuration>

编辑mapred-site.xml文件:

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

最后验证Hadoop是否安装成功:

  1. 执行格式化namenode命令:hdfs namenode -format
  2. 执行启动命令:start-all.sh

启动完毕后使用jps查看java进程:

  • SecondaryNameNode
  • NodeManager
  • ResourceManager
  • NameNode
  • DataNode

如果少了有关进程,注意查看日志文件,到此,Hadoop环境搭建完毕。
浏览器打开http://localhost:50070查看安装情况:
192.168.0.11_50070_dfshealth.html#tab-overview.png

浏览器打开http://localhost:8088/查看集群情况,这里我单机只有一个节点:
Nodes of the cluster.png

接下来安装Hbase

[/opt]# tar -xvf hbase-2.0.2.tar.gz
[/opt]# cd hbase-2.0.2/conf

配置环境变量:

export HBASE_SSH_OPTS="-p 16383"

这里我没有配HbaseHOME目录了,以及没有把Hbasebin目录配置到PATH环境变量中去,所以后面执行Hbase命令的时候需要切换到Hbasebin目录下去。

编辑hbase-site.xml文件:

<configuration>
   <!--//Here you have to set the path where you want HBase to store its files.-->
   <property>
      <name>hbase.rootdir</name>
      <value>hdfs://192.168.0.11:9001/hbase</value>
   </property>
   <!--Here you have to set the path where you want HBase to store its built in zookeeper  files.-->
   <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/home/hadoop/zookeeper</value>
   </property>
   <property>
       <name>hbase.cluster.distributed</name>
       <value>true</value>
   </property>
</configuration>

注意hbase.rootdir属性,配置的是使用Hadoophdfs文件系统(也可以使用本地文件系统,即填写一个本地路径),也就是Hadoopcore-size.xml里配置的地址加上一个目录名称。

由于这里使用过的是伪分布式模式,所以hbase.zookeeper.property.dataDir以及hbase.cluster.distributed也需要配置起来,单机模式只需配置hbase.rootdir即可。

到此,可以使用命令启动了:

[/opt/hbase-2.0.2/bin]# ./start-hbase.sh
localhost: running zookeeper, logging to /opt/hbase-2.0.2/bin/../logs/hbase-root-zookeeper-bensongtan.com.out
running master, logging to /opt/hbase-2.0.2/bin/../logs/hbase-root-master-bensongtan.com.out
: running regionserver, logging to /opt/hbase-2.0.2/bin/../logs/hbase-root-regionserver-bensongtan.com.out

HDFS中检查HBASE目录:

[/opt/hadoop-2.7.7/bin]# ./hadoop fs -ls /hbase
drwxr-xr-x - root supergroup 0 2018-10-25 10:57 /hbase/.hbck
drwxr-xr-x - root supergroup 0 2018-10-25 15:00 /hbase/.tmp
drwxr-xr-x - root supergroup 0 2018-10-25 15:00 /hbase/MasterProcWALs
drwxr-xr-x - root supergroup 0 2018-10-25 15:00 /hbase/WALs
drwxr-xr-x - root supergroup 0 2018-10-25 12:16 /hbase/archive
drwxr-xr-x - root supergroup 0 2018-10-25 10:57 /hbase/corrupt
drwxr-xr-x - root supergroup 0 2018-10-25 11:30 /hbase/data
-rw-r--r-- 1 root supergroup 42 2018-10-25 10:57 /hbase/hbase.id
-rw-r--r-- 1 root supergroup 7 2018-10-25 10:57 /hbase/hbase.version
drwxr-xr-x - root supergroup 0 2018-10-25 10:57 /hbase/mobdir
drwxr-xr-x - root supergroup 0 2018-10-25 15:00 /hbase/oldWALs
drwx--x--x - root supergroup 0 2018-10-25 10:57 /hbase/staging

此时再次使用jps命令查看java进程,发现多了3个HBASE的进程:

  • HRegionServer
  • HQuorumPeer
  • HMaster

这里我遇到的一个问题就是启动后没有HMaster进程,解决办法:
先停止Hbase:./stop-hbase.sh
然后清空Zookeeper目录下的文件:即hbase-size.xml里配置的/home/hadoop/zookeeper

还有一个小问题就是HBaseSLF4J的jar包与Hadoop冲突,问题不大,解决办法就是删除Hbaselib目录下的slf4j-log4j12-x.x.x.jar文件。

验证Hbase安装情况,启动一个Hbase shell

[/opt/hbase-2.0.2/bin]# ./hbase shell
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 2.0.2, r1cfab033e779df840d5612a85277f42a6a4e8172, Tue Aug 28 20:50:40 PDT 2018
Took 0.0020 seconds
hbase(main):001:0>

到此,Hbase+Hadoop伪分布式环境搭建完毕!

Last modification:October 25th, 2018 at 03:13 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment