Hbase + Hadoop 伪分布式环境搭建 时间: 2018-10-25 15:12 分类: JAVA,hadoop ####前言 最近公司打算使用`Hbase`来存储数据,所以需要学习一波`Hadoop`和`Hbase`,刚开始可以说是毫无头绪,不知如何下手,由于`Hbase`底层的存储我们选择的是`Hadoop`的`HDFS`,所以学习`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`配置文件,这里只是为了跑起来,只配置关键属性即可,其他属性默认: ``` fs.default.name hdfs://192.168.0.11:9001 ``` 这里注意端口问题即可。 编辑`hdfs-site.xml`文件,配置 hdfs 副本数、namenode 以及 datanode 数据存放位置: ``` dfs.replication 1 dfs.name.dir file:///home/hadoop/hadoopinfra/hdfs/namenode dfs.data.dir file:///home/hadoop/hadoopinfra/hdfs/datanode ``` 编辑`yarn-site.xml`文件: ``` yarn.nodemanager.aux-services mapreduce_shuffle ``` 编辑`mapred-site.xml`文件: ``` mapreduce.framework.name yarn ``` 最后验证`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][1] 浏览器打开`http://localhost:8088/`查看集群情况,这里我单机只有一个节点: ![Nodes of the cluster.png][2] 接下来安装`Hbase`: > [/opt]# tar -xvf hbase-2.0.2.tar.gz > [/opt]# cd hbase-2.0.2/conf 配置环境变量: ``` export HBASE_SSH_OPTS="-p 16383" ``` 这里我没有配`Hbase`的`HOME`目录了,以及没有把`Hbase`的`bin`目录配置到`PATH`环境变量中去,所以后面执行`Hbase`命令的时候需要切换到`Hbase`的`bin`目录下去。 编辑`hbase-site.xml`文件: ``` hbase.rootdir hdfs://192.168.0.11:9001/hbase hbase.zookeeper.property.dataDir /home/hadoop/zookeeper hbase.cluster.distributed true ``` 注意`hbase.rootdir`属性,配置的是使用`Hadoop`的`hdfs`文件系统(也可以使用本地文件系统,即填写一个本地路径),也就是`Hadoop`的`core-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` 还有一个小问题就是`HBase`中`SLF4J`的jar包与`Hadoop`冲突,问题不大,解决办法就是删除`Hbase`的`lib`目录下的`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`伪分布式环境搭建完毕! [1]: https://0o0.me/usr/uploads/2018/10/2175046465.png [2]: https://0o0.me/usr/uploads/2018/10/1777393752.png 标签: hadoop hbase