IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Shell基础知识 -> 正文阅读

[大数据]Shell基础知识

1.基础

Shell操作第一步是启动Shell,使用以下命令:

hbase shell

离开可以输入:

exit或者quit

2.命令

在输入命令的时候必须遵循一定的规则:

  1. 引用名:命令行要求在使用表名和列名时,必须通过单引号或者双引号对其引用。
  2. 引用值:命令行支持二进制、八进制、十六进制的输入和输出。用户在引用时必须使用双引号,否则会被当做文件进行处理。
  3. 使用逗号分隔参数:参数之间需要使用逗号进行分隔。
  4. 散列属性:一些命令需要使用键值对属性,要按照以下格式来完成:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {‘key1’ => ‘value1’, ‘key2’ => ‘value2’, …}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 键值对需要包含在大括号中,键值对之间使用“=>”分隔。使用键值对模式赋值的key通常是NAME、VERSION或COMPRESSION,并且不需要引号。? ? ? ? ? ? ? ? ? ??

3.使用create命令创建表

在HBase?Shell执行以下命令:

create 'user', 'cf1'

这句话的意思是建立一个叫user的表,里面有一个叫做cf1的列族。

输出结果:

Created table user

Took 4.6033 seconds ?????????????????????????????????????????????????????????????????????????

=> Hbase::Table – user

?4.使用list命令查看有哪些表

在HBase?Shell执行以下命令:

list

输出结果:?

TABLE ???????????????????????????????????????????????????????????????????????????????????????

user ????????????????????????????????????????????????????????????????????????????????????????

1 row(s)

Took 0.0890 seconds ?????????????????????????????????????????????????????????????????????????

=> ["user"]

5.使用describe命令来查看表属性

在HBase?Shell执行以下命令:

describe 'user'

?输出结果:

Table user is ENABLED ???????????????????????????????????????????????????????????????????????

user ????????????????????????????????????????????????????????????????????????????????????????

COLUMN FAMILIES DESCRIPTION ?????????????????????????????????????????????????????????????????

{NAME => 'cf1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'} ????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

1 row(s)

QUOTAS ??????????????????????????????????????????????????????????????????????????????????????

0 row(s)

Took 1.4010 second

6.使用put命令来插入数据

在HBase?Shell执行以下命令:

put 'user', 'rk0001', 'cf1:name', 'zhangsan'

这条语句的意思是:

(1)向user表插入一个单元格

(2)这个单元格的row?key为rk0001

(3)这个单元格的列族是cf1

(4)这个单元格的列名是name

(5)这个单元格的数据值是zhangsan

输出结果:

Took 0.0364 seconds?

7.使用scan来查看表数据

scan是最常用的查询表数据的命令,这个命令相当于传统数据库的select。通过以下命令就可以遍历出user表的数据:

scan 'user'?

输出结果:

ROW ????????????????????COLUMN+CELL ????????????????????????????????????????????????????????

? ? rk0001 ???????????????column=cf1:age, timestamp=1594263341992, value=24

? ? rk0001 ???????????????column=cf1:name, timestamp=1594262772226, value=zhangsan

? ? rk0002 ???????????????column=cf1:gender, timestamp=1594263392732, value=man

? ? rk0002 ???????????????column=cf1:name, timestamp=1594263341800, value=lisi

? ? rk0003 ???????????????column=cf1:name, timestamp=1594263341860, value=wangwu

? ? rk0004 ???????????????column=cf1:name, timestamp=1594263341924, value=zhaoliu

4 row(s)

Took 0.0606 seconds

ROW列显示的就是row?key,COLUMN+CELL列显示的就是这个记录的列族(column冒号前的部分)、列(column冒号后的部分)、时间戳(timestamp)和值(value)等信息

(STARTROW)和结束行(ENDROW)来限制显示记录的条数。STARTROW和ENDROW都是可选参数,可以不输入。如果ENDROW不输入的话,就从STARTROW开始一直显示下去直到表的结尾;如果STARTROW不输入的话,就从表头开始一直显示到ENDROW为止。

例:

下面这条命令会显示所有row?key大于且等于rk0002的记录:

scan 'user', {STARTROW => 'rk0002'}

下面这条命令会显示所有row?key小于rk0004的记录:

scan 'user', {ENDROW => 'rk0004'}

下命这条命令会显示所有row?key大于且等于rk0002并且小于rk0004的记录:

scan 'user', {STARTROW => 'rk0002', ENDROW => 'rk0004'}

8.使用get来获取单元格数据

get最简单的用法就是查询某个单元格的记录:

get 'user', 'rk0001', 'cf1:name'?

?输出结果:

COLUMN ??????????????????CELL ???????????????????????????????????????????????????????????????

?cf:name ??????????????????timestamp=1594262772226, value=zhangsan ????????????????????????????

1 row(s)

Took 1.1362 seconds

当使用scan或者get命令的时候默认会显示拥有最大timestamp值的数据。?

9.使用delete来删除单元格数据

有增就有删,接下来我们看看如何删除数据,最简单的例子如下:

delete 'user', 'rk0002', 'cf1:age'

执行的结果就是user表中rk0002行的cf1:age单元格被删除了。

delete命令也可以跟上时间戳(timestamp)参数,就像这样:

delete 'user', 'rk0002', 'cf1:name', 1594262772226

需要注意的是,HBase删除记录并不是真的立即删除了数据,而是放置了一个墓碑标记(tombstone marker),把这个版本数据标记为不可见。被打上tombstone marker的记录还是可以被查询到的,只需要使用scan命令时设置RAW参数的值为true即可。例子如下:

scan 'user', {RAW => true, VERSIONS => 5}

在结果我们可以找到这样一条记录:

rk0002??????????????????column=cf1:age, timestamp=1594263341992, type=Delete

那些type=Delete的列就是被打上墓碑标记的记录。

10.使用deleteall删除整行记录

deleteall 'user', 'rk0001'

11.使用disable来停用表

在删除表之前需要先做一个下线(disable)操作把表停用。停用user表的命令如下:

disable 'user'

当你停用掉一个表后,你可以用scan测试一下表是不是真的被关闭了:

scan 'user'

你会发现无法使用scan命令,并且会输出一个错误信息ERROR: user is disabled,意思是表已经被关闭了,不能scan了。

如果需要启用user表,使用以下命令:

enable?'user'

12.使用drop来删除表

drop 'user'?

然后在使用list命令查看下数据还有什么表,发现数据库中user表已经被删除。?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:47:32  更:2021-12-11 15:49:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:37:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码