一脸懵逼学习HBase的搭建(注意HBase的版本)
1:Hdfs分布式文件系统存的文件,文件存储。
2:Hbase是存储的数据,海量数据存储,作用是缓存的数据,将缓存的数据满后写入到Hdfs中。
3:hbase集群中的角色:
()、一个或者多个主节点,Hmaster;
()、多个从节点,HregionServer;
4、hbase集群的配置是一主多从或者多主多从(一定注意区分和hive之间的关系,切记),一主多从可以动态添加主节点,配置成多主多从。
5、如何配置HMaster主备:
a、添加主节点:
在任意的安装了hbase的机器上启动hmaster。命令如下所示:
[hadoop@slaver1 ~]$ local-master-backup.sh start 2
b、添加HBase的从节点regionserver节点:复制原子节点到新节点上,hbase-daemon.sh start regionserver 即添加regionserver节点。
1)、使用[hadoop@slaver1 ~]$ zkCli.sh 可以查看管理的节点。
2)、[zk: localhost:2181(CONNECTED) 0] ls /
3)、[zk: localhost:2181(CONNECTED) 1] ls /hbase 可以查看zookeeper管理的hbase的节点个数,然后进行kill和启动新节点操作。
1:由于HBase依赖hdfs,所以下载的时候注意HBase的版本:
注:我使用的是hadoop2.4版本的,所以HBase选择支持2版本的:hbase-0.96.2-hadoop-bin.tar.gz
2:上传hbase安装包,上传到一台机器即可:
建议:自己规划一下自己的机器,最好是独立的,再搞两台机器最好,
如果不想搞更多的机器,这里放到启动yarn进程的机器上:
如我的slaver5,slaver6(master节点,slaver1节点,slaver2节点安装Region Server,slaver5,slaver6安装Master ),
这样负载比较好点,自己电脑吃得消;
过程省略,上传结果如下所示;
2:解压缩刚才上传的hbase-0.96.2-hadoop2-bin.tar.gz:
[root@slaver5 hadoop]# tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz
3:配置HBase集群,要修改3个文件(首先Zookeeper集群已经安装好了哟):
注意:要把hadoop的hdfs-site.xml和core-site.xml 放到HBase/conf下;
[root@slaver5 conf]# cp /home/hadoop/hadoop-2.4.1/etc/hadoop/{core-site.xml,hdfs-site.xml} ./
开始修改配置文件:
3.1:修改hbase-env.sh:
修改如下所示:
//自己的jdk路径
export JAVA_HOME=/usr/java/jdk1..0_55
//hadoop配置文件的位置
export HBASE_CLASSPATH=/home/hadoop/hadoop-2.4.1/conf
//更准确的应该配置下面这个路径信息
export HBASE_CLASSPATH=/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/etc/hadoop
//告诉hbase使用外部的zk,export HBASE_MANAGES_ZK=true #如果使用独立安装的zookeeper这个地方就是false
export HBASE_MANAGES_ZK=false
演示操作如下所示:
可以使用命令查看jdk的路径:
[root@slaver6 hadoop]# echo $JAVA_HOME
/home/hadoop/jdk1.7.0_65
[root@slaver6 hadoop]#
按ESC进入命令行模式:
搜索内容如下所示:
改成如下内容,使用外部的Zookeeper管理HBase:
3.2:修改hbase-site.xml,vim hbase-site.xml:
修改内容如下所示:
<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<!--如果是三台机器,注意这个路径,比如hdfs://slaver1/hbase-->
<value>hdfs://ns1/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>master:,slaver1:,slaver2:</value>
</property>
</configuration>
配置或如下所示,下面的配置仅仅做一下参考,不是此篇博客配置的:
<configuration>
<property>
<!--hbasemaster的主机和端口-->
<name>hbase.master</name>
<value>master1:</value>
</property>
<property>
<!--时间同步允许的时间差-->
<name>hbase.master.maxclockskew</name>
<value></value>
</property>
<property>
<name>hbase.rootdir</name>
<!--hbase共享目录,持久化hbase数据-->
<value>hdfs://hadoop-cluster1/hbase</value>
</property>
<property>
<!--是否分布式运行,false即为单机-->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!--zookeeper地址-->
<name>hbase.zookeeper.quorum</name>
<value>slave1, slave2,slave3</value>
</property>
<property>
<!--zookeeper配置信息快照的位置-->
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/hbase/tmp/zookeeper</value>
</property>
</configuration>
修改操作如下所示:
[root@slaver5 conf]# vim hbase-site.xml
演示操作如下所示:
3.3:修改regionservers,vim regionservers:
因为master节点,slaver1节点,slaver2节点安装Region Server,所以这里配置一下,slaver5,slaver6安装Master就可以找到Region Server了;
4:然后将部署好的HBase传到其他几个节点上面(拷贝里面有html文档,拷贝起来有点慢,可以删除doc文档):
注:将配置好的HBase拷贝到每一个节点并同步时间。
[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ master:/home/hadoop/
[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ slaver1:/home/hadoop/
[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ slaver2:/home/hadoop/
[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ slaver6:/home/hadoop/
5:现在可以启动HBase了,不过启动HBase之前需要将HDFS启动起来(hdfs启动过程省略,之前启动好多次了),因为HBase在hdfs下面创建一个目录叫做hbase,自己配置的:
注:如果浏览器访问不了,记得关防火墙:service iptables stop,service iptables status;
启动所有的hbase
:分别启动zk
./zkServer.sh start
:启动hbase集群
start-dfs.sh
:启动hbase,在主节点上运行:
start-hbase.sh
启动完hdfs之后启动HBase:
注意:hbase依赖hdfs,所以yarn可以暂时不启动的。
可以查看这几个节点的进程的启动情况:
现在呢,一个HBase已经启动起来了,如果想启动两个HBase,第一个HBase启动不会自动启动第二个HBase,所以现在手动启动第二个HBase,操作如下所示:
注:为保证集群的可靠性,要启动多个HMaster
6:通过浏览器访问hbase管理页面
192.168.3.134:60010
可以看到三台master节点,slaver1节点,slaver2节点安装Region Server;slaver6是安装的备份的Master;
7:自己可以测试一下,杀死一个HMaster(slaver5节点的),另一个HMaster立马顶上去了,很强悍,依赖着Zookeeper,爽到爆啊。(kill -9 进程号,-9是强制杀死):
添加Hbase节点,删除的话直接kill:
[root@slaver6 hadoop]# hbase-daemon.sh start regionserver
8:使用HBase的命令行客户端操作一下HBase(测试使用,真实环境使用Java操作):
进入hbase的shell:hbase shell
退出hbase的shell:quit
页面:http://ip地址:60010/
由于HBase是非关系型数据库,可以查看一下help看看都有啥命令,然后再操作:
可以查看一些基本的命令:
HBase的一些基本命令(如果在hbase shell客户端,打错了,可按ctrl+BackSpace进行删除):
、#创建HBase数据表,如果不给定namespace的名称,默认创建在default命名空间中。
hbase(main):032:0> create 'myTables',{NAME => 'base_info',VERSIONS => },{NAME => 'extra_info'} hbase(main)::> create 'user','info01','info02'
#创建带有命名空间的hbase数据表,20180408是命名空间,user是表名称,col1是列簇。
hbase(main):033:0> create '20180408:user','col1'
hbase(main):034:0> list
、#查看有什么表,显示hbase表名称,类似mysql中的show tables;可以通过指定命名空间来查看对应命名空间中的表,默认是显示所有用户表,也支持模糊查询。类似命名list_namespace_table查看对命名空间内有那些表。
hbase(main):032:0> list 、#查看表结构
describe 'myTables'
hbase(main):016:0> describe '20180408:user' 、#禁用表
disable 'myTables' 、#删除表,删除之前要先禁用表。删除用户表之前需要将表设置为disable,然后删除。其实在hbase中如果需要对已有表进行ddl操作,均需要将其disable,在ddl操作完成后,再进行enable操作即可。
drop 'myTables'
hbase(main):040:0> disable '20180408:test'
hbase(main):041:0> drop '20180408:test'
hbase(main):042:0> list
5.1 #delete命令是删除指定table的指定rowkey的指定列,也就是说delete命令适合删除列的情况。如果需要删除当然rowkey的所有列数据,那么可以使用deleteall命令。
hbase(main):010:0> delete '20180408:user','row1','col1:sex'
hbase(main):012:0> deleteall '20180408:user','row1'
5.2 #清空数据表,truncate命令的作用是清空数据库,当我们数据库中的数据比较多的时候,我们可以选择该命令将数据库清空。底层原理是禁用表,删除表,创建表。
hbase(main):015:0> truncate '20180408:user' 、#插入数据,插入一个表的一行的一列的一个值,最后一个字段不带。hbase的put命令是进行数据添加的命令。
#不带分号
#put '表名称','行','base_info/extra_info:列名称','列值'
put 'myTables','','base_info:name','张三'
put 'myTables','','base_info:age',''
put 'myTables','','base_info:sex','男'
put 'myTables','','extra_info:addr','河南省'
#带有命名空间的hbase数据表插入操作:
hbase(main):001:0> put '20180408:user','row1','col1:name','zhangsan'
hbase(main):004:0> put '20180408:user','row1','col1:sex','nan'
hbase(main):005:0> put '20180408:user','row1','col1:age','20'
、#查询数据,查询某一行。get命名的作用是获取对应表中对应rowkey的数据。默认获取最新版本的全部列数据,可以通过时间戳指定版本信息,也可以指定获取的列。
get 'myTables',''
#row1是自己创建的行,注意,col1是列簇,都是自己创建的。
hbase(main):008:0> get '20180408:user','row1'
#查看指定行的指定列信息。
hbase(main):009:0> get '20180408:user','row1','col1:name'
get 'myTables','',{COLUMN => 'base_info:name',VERSION => }
#scan命令是hbase的另一种检索方式,是通过范围查找hbase中的数据。默认情况下是获取table的全部数据,可以通过指定column和filter等相关信息进行数据的过滤。
scan 'myTables'
#可以查看插入的数据信息
hbase(main):006:0> scan '20180408:user' #scan提供多种filter命令,常用的filter命令如下所示:ColumnPrefixFilter过滤列名是某前缀的,MultipleColumnValueExcludeFilter过滤多列的前缀只要满足其中一个的前缀,RowFilter满足那种类型的过滤,SingleColumnValueFilter某列的value值过滤,SingleColumnValueExcludeFilter过滤某列不符合给定的value值等等。需要注意的是,在指定的value之前需要加'binary';
hbase(main):012:0> scan '20180408:user',{FILTER=>"MultipleColumnPrefixFilter('n')"}
hbase(main):013:0> scan '20180408:user',{FILTER=>"MultipleColumnPrefixFilter('n','a')"}
hbase(main):001:0> scan '20180408:user',{FILTER=>"ColumnPrefixFilter('n')"}
hbase(main):002:0> scan '20180408:user',{FILTER=>"RowFilter(=,'binary:row1')"},注意,rowfilter需要给定两个参数,第一个参数:=,>,<,>=,<=。第二个参数是二进制的字符串数组。
hbase(main):001:0> scan '20180408:user',{FILTER=>"SingleColumnValueFilter('col1','name',=,'binary:zhangsan')"} 、#修改值操作,默认不显示历史值
put 'myTables','','base_info:name','李四' 9、namespace的相关命令:
#创建命名空间,create_namespace命令
hbase(main):019:0> create_namespace '20180408',{'comment'=>'this is my namespace'}
#显示命名空间,显示所有存在的命名空间,可以使用正则,可以验证自己创建的命名空间是否创建成功,也可以去hdfs上面查看。
hbase(main):020:0> list_namespace
hbase(main):020:0> list_namespace '20180408.*'
#删除命名空间,删除指定的命名空间,注意删除的命名空间内不能有table存在,也就是说只能删除空的namespace。
hbase(main):021:0> drop_namespace '20180408'
#显示命名空间的相关信息。describe_namespace命令。
hbase(main):026:0> describe_namespace '20180408'
#查看这个命名空间下面的hbase数据表。
hbase(main):035:0> list_namespace_table '20180408' 10、count命令是统计hbase表行数的一个命令,由于相当于一个内置的mapreduce程序,所以当数据量比较大的时候可以选择使用协处理器方式计算行数。默认情况下INTERVAL是1000间隔数,CACHE是10。
hbase(main):001:0> count '20180408:user'
hbase(main):002:0> count '20180408:user',INTERVAL=2
可以去Zookeeper查看hbase的一些信息:
[root@master sbin]# cd /home/hadoop/zookeeper-3.4./
[root@master zookeeper-3.4.]# ls
bin conf dist-maven ivy.xml NOTICE.txt recipes zookeeper-3.4..jar.asc
build.xml contrib docs lib README_packaging.txt src zookeeper-3.4..jar.md5
CHANGES.txt data ivysettings.xml LICENSE.txt README.txt zookeeper-3.4..jar zookeeper-3.4..jar.sha1
[root@master zookeeper-3.4.]# cd bin/
[root@master bin]# ls
README.txt zkCleanup.sh zkCli.cmd zkCli.sh zkEnv.cmd zkEnv.sh zkServer.cmd zkServer.sh zookeeper.out
[root@master bin]# ./zkCli.sh
Connecting to localhost:
-- ::, [myid:] - INFO [main:Environment@] - Client environment:zookeeper.version=3.4.-, built on // : GMT
-- ::, [myid:] - INFO [main:Environment@] - Client environment:host.name=master
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.version=1.7.0_65
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.vendor=Oracle Corporation
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.home=/home/hadoop/jdk1..0_65/jre
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.class.path=/home/hadoop/zookeeper-3.4./bin/../build/classes:/home/hadoop/zookeeper-3.4./bin/../build/lib/*.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/slf4j-api-1.6.1.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/netty-3.2.2.Final.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/log4j-1.2.15.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/jline-0.9.94.jar:/home/hadoop/zookeeper-3.4.5/bin/../zookeeper-3.4.5.jar:/home/hadoop/zookeeper-3.4.5/bin/../src/java/lib/*.jar:/home/hadoop/zookeeper-3.4.5/bin/../conf:
2017-12-18 17:08:22,385 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/i386:/lib:/usr/lib
2017-12-18 17:08:22,386 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2017-12-18 17:08:22,387 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2017-12-18 17:08:22,396 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2017-12-18 17:08:22,397 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=i386
2017-12-18 17:08:22,397 [myid:] - INFO [main:Environment@100] - Client environment:os.version=2.6.32-358.el6.i686
2017-12-18 17:08:22,398 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2017-12-18 17:08:22,428 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2017-12-18 17:08:22,470 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/home/hadoop/zookeeper-3.4.5/bin
2017-12-18 17:08:22,472 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@1238fa5
Welcome to ZooKeeper!
2017-12-18 17:08:22,994 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2017-12-18 17:08:23,281 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session
2017-12-18 17:08:24,145 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x16068706a9b0008, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[hadoop-ha, hbase, admin, zookeeper, consumers, config, 20171011, storm, yarn-leader-election, brokers, controller_epoch]
[zk: localhost:2181(CONNECTED) 3] get /hbase cZxid = 0xc00000007
ctime = Wed Oct 25 17:29:19 CST 2017
mZxid = 0xc00000007
mtime = Wed Oct 25 17:29:19 CST 2017
pZxid = 0xf0000004a
cversion = 23
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 15
[zk: localhost:2181(CONNECTED) 4] ls /
[hadoop-ha, hbase, admin, zookeeper, consumers, config, 20171011, storm, yarn-leader-election, brokers, controller_epoch]
[zk: localhost:2181(CONNECTED) 5] ls /hbase
[meta-region-server, backup-masters, region-in-transition, draining, table, table-lock, running, master, namespace, hbaseid, online-snapshot, replication, recovering-regions, splitWAL, rs]
[zk: localhost:2181(CONNECTED) 6] ls /hbase/table
[hbase:meta, hbase:namespace, user]
[zk: localhost:2181(CONNECTED) 7]
待续......
一脸懵逼学习HBase的搭建(注意HBase的版本)的更多相关文章
- 一脸懵逼学习Storm的搭建--(一个开源的分布式实时计算系统)
Storm的官方网址:http://storm.apache.org/index.html :集群部署的基本流程(基本套路): 集群部署的流程:下载安装包.解压安装包.修改配置文件.分发安装包.启动集 ...
- 一脸懵逼学习HBase---基于HDFS实现的。(Hadoop的数据库,分布式的,大数据量的,随机的,实时的,非关系型数据库)
1:HBase官网网址:http://hbase.apache.org/ 2:HBase表结构:建表时,不需要指定表中的字段,只需要指定若干个列族,插入数据时,列族中可以存储任意多个列(即KEY-VA ...
- 一脸懵逼学习Hadoop中的序列化机制——流量求和统计MapReduce的程序开发案例——流量求和统计排序
一:序列化概念 序列化(Serialization)是指把结构化对象转化为字节流.反序列化(Deserialization)是序列化的逆过程.即把字节流转回结构化对象.Java序列化(java.io. ...
- 一脸懵逼学习KafKa集群的安装搭建--(一种高吞吐量的分布式发布订阅消息系统)
kafka的前言知识: :Kafka是什么? 在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算.kafka是一个生产-消费模型. Producer:生产者,只负责数 ...
- 一脸懵逼学习基于CentOs的Hadoop集群安装与配置
1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的 ...
- 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)
1)集群规划:主机名 IP 安装的软件 运行的进程master 192.168.199.130 jdk.hadoop ...
- 一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)
1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的 ...
- 一脸懵逼学习Struts数据校验以及数据回显,模型驱动,防止表单重复提交的应用。
1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xm ...
- 一脸懵逼学习Hive的使用以及常用语法(Hive语法即Hql语法)
Hive官网(HQL)语法手册(英文版):https://cwiki.apache.org/confluence/display/Hive/LanguageManual Hive的数据存储 1.Hiv ...
随机推荐
- Windows Server 2008 R2忘记密码导致无法修改密码
其实有个记住密码的工具还是简单的,登陆系统后,CMD输入命令: net user administrator NewPassword 新密码即时生效
- 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考
最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...
- 随机生成游戏用户昵称(nodejs版本)(含机器人头像,金币等)
1 前言 有时需要生成随机的用户(或机器人)昵称,头像,金币等,但又不想太生硬,可以现在网上爬一些常见昵称到文本中,然后读取出来,随机使用即可. 2 代码 var nickNameArr = []; ...
- 解决layui选中项下一页清空问题
项目中遇到给用户在所有产品中匹配一部分产品.用layui 第一页选好之后到第二页再选,等回到第一页时之前选择的都没了,解决这个问题的办法如下: //勾选的产品id集合 var chooseAdids ...
- ModelSerializer序列化(Apiview)
url部分: url(r'^book/$',views.book.as_view()),url(r'^books/(\d+)/$', views.bookdetail.as_view(),name=' ...
- iOS Core Data 数据库的加密(待研究)
https://github.com/project-imas/encrypted-core-data 使用起来很方便,底层还是使用了SQLCipher,有时间要研究一下! 数据库的密码不能用固定字符 ...
- Swift 学习- 06 -- 控制流
// 控制流 // swift 提供了多种控制流结构,包括可以多次执行的 while 循环,基于特定条件选择执行不同分支的 if, guard 和 switch 语句,还有控制流程跳转到其它代码位置的 ...
- javascript中的字符串对象
1.javascript的对象的概念 在javascript中,除了null和undefined以处,其他的数据类型都被定义成了对象 也可以用创建对象的方法定义变量,string,math,array ...
- leetcode(js)算法之17电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母 示例: 输入:"23" 输出:[" ...
- 给div拼接html 拼接字符串
简单描述:拼接html 拼接字符串,说实话,拼接这种东西我自己弄,得花费很多时间,主要是转义字符,单引号,双引号这种小细节调整起来比较麻烦,一旦疏忽多了少了一个符号,页面就有点抽象了,我呢比较粗枝大叶 ...