HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。接下来记录一下HBase的安装和一些基本的使用:
实际上,你需要一个完全分布式的配置来全面测试HBase,并将其用于实际场景中。在分布式配置中,集群包含多个节点,每个节点运行一个或者多个HBase守护进程。这些主要和备份HMaster,多个Zookeeper节点和多个RegionServer节点。此完全分布式将两个以上的节点添加到你的集群中,架构如下:
节点名称 | Master | Zookeeper | RegionServer |
---|---|---|---|
master 192.168.0.156 | 是 | 是 | 否 |
slove1 192.168.0.180 | 备份 | 是 | 是 |
slove2 192.168.0.181 | 否 | 是 | 是 |
建议:下面操作请切换到root账户进行操作
安装JDK
安装JDK具体操作,请点击链接
配置主机名
1、登录到192.168.0.156
主机,切换到root
用户,执行hostname master
命令,将其主机名设置为master
2、登录到192.168.0.180
主机,切换到root
用户,执行hostname slove1
命令,将其主机名设置为slove1
3、登录到192.168.0.181
主机,切换到root
用户,执行hostname slove2
命令,将其主机名设置为slove2
4、打开各个主机的/etc/hosts
文件,添加如下内容:
192.168.0.156 master
192.168.0.180 slove1
192.168.0.181 slove2
重启后生效
配置免密码登录
SSH设置需要在集群上执行不同的操作,如启动,停止和分布式守护shell操作。进行身份验证不同的Hadoop用户,需要一种用于Hadoop的用户提供的公钥/私钥对,并用不同的用户共享。以下的命令被用于生成秘钥值对:
1、在各个主机上执行如下命令:
ssh-keygen -t rsa
cat id_rsa.pub >> /root/.ssh/authorized_keys
2、将master
主机上的id_rsa.pub
文件分别拷贝到slove1
和slove2
主机上,在slove1
和slove2
主机上使用如下命令将其内容追加到authorized_keys
文件末尾:
# 注意是“>>”,“>”将会被覆盖
cat id_rsa.pub >> /root/.ssh/authorized_keys
3、将slove1
的id_rsa.pub
文件内容追加到master
与slove2
主机上的authorized_keys
文件末尾,再将slove2
的id_rsa.pub
文件内容追加到master
与slove1
主机上的authorized_keys
文件末尾
4、使用如下命令进行验证,验证各个主机之间是否已经不需要密码连接了:
ssh 主机名
注意:如果有提示输入密码,请查看authorized_keys
文件是否有追加错误!!
安装配置Hadoop
1、从官网下在相应版本的安装包,这里我下载的是2.9.0版本
2、解压
tar -zxvf hadoop-2.9.0.tar.gz
3、移动至/usr/local/hadoop
目录当中
mv hadoop-2.9.0 /usr/local/hadoop
4、配置环境变量,使用vi编辑器打开/etc/profile
文件,添加如下代码:
export HADOOP_HOME=/usr/local/hadoop
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"
应用刚刚配置的环境变量:
source /etc/profile
5、进入$HADOOP_HOME/etc/hadoop
目录当中,使用vi编辑器,打开hadoop-env.sh
文件,修改Java环境变量JAVA_HOME
的值,并且修改进程文件的存放目录:
export JAVA_HOME=/usr/local/jdk1.8.0_151
6、修改core-site.xml
。core-site.xml
包含用于Hadoop的实例,分配给文件系统,存储器限制用于存储数据和读/写缓冲器大小的信息。使用vi编辑器,打开core-site.xml
,并且在<configuration>
和</configuration>
标签之间添加如下属性:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
8、修改hdfs-site.xml
。hdfs-site.xml
包含复制数据的值,NameNode的路径,本地文件系统,要存储Hadoop基础架构的Datanode路径的信息。使用vi编辑器,打开hdfs-site.xml
,并且在<configuration>
和</configuration>
标签之间添加如下属性:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/pythoner/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/pythoner/hadoop/hdfs/datanode</value>
</property>
</configuration>
上面的属性值是用户自定义的,用户可以根据自己的Hadoop的基础架构进行更改。
9、修改yarn-site.xml
。此文件用于配置yarn
在Hadoop中。使用vi编辑器,打开yarn-site.xml
,并且在<configuration>
和</configuration>
标签之间添加如下属性:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
10、修改mapred-site.xml
。此文件用于指定MapReduce框架以使用。默认情况下,Hadoop包含mapred-site.xml模板,即mapred-site.xml.template
文件。首先需要从模板中复制到mapred-site.xml
中:
cp mapred-site.xml.template mapred-site.xml
使用vi编辑器,打开mapred-site.xml
,并且在<configuration>
和</configuration>
标签之间添加如下属性:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
验证Hadoop
1、格式化文件系统,命令如下:
hdfs namenode -format
预期结果如下:
...
17/12/04 17:01:49 INFO common.Storage: Storage directory /home/pythoner/hadoop/hdfs/namenode has been successfully formatted.
17/12/04 17:01:49 INFO namenode.FSImageFormatProtobuf: Saving image file /home/pythoner/hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 using no compression
17/12/04 17:01:49 INFO namenode.FSImageFormatProtobuf: Image file /home/pythoner/hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000000 of size 321 bytes saved in 0 seconds.
17/12/04 17:01:49 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
17/12/04 17:01:49 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.0.156
************************************************************/
2、启动namenode
和datanode
守护进程,命令如下:
start-dfs.sh
预期结果如下:
Starting namenodes on [master]
master: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-master.out
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-master.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-master.out
3、启动yarn
守护进程,命令如下:
start-yarn.sh
预期结果如下:
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-master.out
localhost: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-master.out
4、在浏览器上输入http://192.168.0.156:50070/
访问Hadoop服务。注:192.168.0.156
为博主Linux机器地址
5、在浏览器上输入http://192.168.0.156:8088/
验证集群中的所有应用程序。注:192.168.0.156
为博主Linux机器地址
安装HBase
因为各个主机上都需要安装HBase,这里先在master
主机上进行配置,而后直接将整个目录文件拷贝到slove1
与slove2
主机上
1、从官网下在相应版本的安装包,这里我下载的是1.2.6版本
2、解压
tar -zxvf hbase-1.2.6-bin.tar.gz
3、移动至/usr/local/HBase
目录当中
mv hadoop-2.9.0 /usr/local/HBase
4、进入/usr/local/HBase/conf
目录,使用vi编辑器,打开hbase-env.sh
文件,修改Java环境变量JAVA_HOME
的值和pid
存放位置,并且注释相关配置:
export JAVA_HOME=/usr/local/jdk1.8.0_151
export HBASE_PID_DIR=/var/hadoop/pids
#export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
#export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
5、进入/usr/local/HBase/conf
目录,使用vi编辑器,打开hbase-site.xml
文件。这是HBase的主要配置文件,你只需要在HBase和Zookeeper写入数据的本地文件系统上指定目录即可。将<property>
标签粘贴到标签下<configuration>
下:
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/pythoner/hbase/zookeeper</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slove1,slove2</value>
</property>
6、进入master
机器上HBase安装目录,进入conf
目录,使用vi编辑器,打开regionservers
,移除包含localhost
的那行,加上slove1
与slove2
7、配置HBase,将slove1
作为备份主控。在conf
目录,创建一个名为backup-masters
文件,添加slove1
8、将整个目录文件拷贝至slove1
与slove2
主机上
9、在各个主机上确保HBase没有在任何节点中运行。使用jps命令检查,如果存在HMaster
、HRegionServer
和HQuorumpeer
,请杀死它们
10、启动集群,在master
的HBase中的bin目录下,使用./start-hbase.sh
命令,你的输出将类似于下面的输出
root@master:/usr/local/hbase/bin# ./start-hbase.sh
slove1: starting zookeeper, logging to /usr/local/hbase/bin/../logs/hbase-root-zookeeper-slove1.out
slove2: starting zookeeper, logging to /usr/local/hbase/bin/../logs/hbase-root-zookeeper-slove2.out
master: starting zookeeper, logging to /usr/local/hbase/bin/../logs/hbase-root-zookeeper-master.out
starting master, logging to /usr/local/hbase/bin/../logs/hbase-root-master-master.out
slove2: starting regionserver, logging to /usr/local/hbase/bin/../logs/hbase-root-regionserver-slove2.out
slove1: starting regionserver, logging to /usr/local/hbase/bin/../logs/hbase-root-regionserver-slove1.out
slove1: starting master, logging to /usr/local/hbase/bin/../logs/hbase-root-master-slove1.out
验证进程正在运行
1、master
jps输出:
20355 Jps
20071 HQuorumPeer
20137 HMaster
2、slove1
jps输出:
15930 HRegionServer
16194 Jps
15838 HQuorumPeer
16010 HMaster
3、slove2
jps输出:
13901 Jps
13639 HQuorumPeer
13737 HRegionServer