不当菜狗。微信找到我:Ltong-520_1314
Hbase的安装
上传解压HBase安装包


修改HBase配置文件 都先在node01上修改,后面会分发
在:/export/servers/hbase-2.1.0/conf 目录下
修改:hbase-env.sh
cd /export/servers/hbase-2.1.0/conf
vim hbase-env.sh
# 第28行
export JAVA_HOME=/export/servers/jdk1.8.0_131
export HBASE_MANAGES_ZK=false
(export HBASE_MANAGES_ZK=false这个表示的是不让Hbase去管理zookeaper。)
修改:hbase-site.xml

这里<value>hdfs://node01:8020/hbase</value>的node01:8020这个是namenode的url必须和上面这个图的一样。后面/hbase是设置hbase之后的数据存在那个目录
在hadoop笔记中:

记住这个目录,因为Hbase配置需要用:

vim hbase-site.xml
——————————
<configuration>
<!– HBase数据在HDFS中的存放的路径 –>
<property>
<name>hbase.rootdir</name>
<value>hdfs://node01:8020/hbase</value>
</property>
<!– Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面 –>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!– ZooKeeper的地址端口号是2181可以省略,这里需要写上zookeeper所在的机器 –>
<property>
<name>hbase.zookeeper.quorum</name>
<value>node01,node02,node03</value>
</property>
<!– ZooKeeper快照的存储位置,这个也是zookeeper保存数据的目录–>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/export/servers/zookeeper-3.4.9/zkdatas</value>
</property>
<!– V2.1版本,在分布式情况下,将兼容性检测设置为false –>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration> 
配置环境变量
# 配置Hbase环境变量
vim /etc/profile
export HBASE_HOME=/export/servers/hbase-2.1.0
export PATH=$PATH:${HBASE_HOME}/bin:${HBASE_HOME}/sbin
#加载环境变量
source /etc/profile ![]()
复制jar包到lib
cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/
修改regionservers文件,指定Hbase有几个节点

vim regionservers
node01
node02
node03 
分发安装包与配置文件
cd /export/servers
scp -r hbase-2.1.0/ node02:$PWD
scp -r hbase-2.1.0/ node03:$PWD
scp -r /etc/profile node02:/etc
scp -r /etc/profile node03:/etc
在node02和node03加载环境变量
source /etc/profile
启动Hbase
Hbase必须最后启动,因为Hbase启动依赖于hadoop和zookeeper,后面zookeeper都用ZK表示。
# 启动ZK(zookeeper)三台都需要启动,如果不知道三台怎么顺序启动,去看Hadoop笔记。
/export/servers/zookeeper-3.4.9/bin/zkServer.sh start
# 启动hadoop
start-all.sh
启动history server
启动历史记录文件在hadoop-2.7.7:sbin/mr-jobhistory-daemon.sh start historyserver
# 启动hbase 在主节点node01上面运行就行。和启动hadoop一样。
start-hbase.sh
在关闭Hbase的时候也是像上面一样,先关闭zk和hadoop,最后关闭Hbase
验证Hbase是否启动成功
# 启动hbase shell客户端 在任意节点,这里我选择主节点。
hbase shell
# 输入status
[root@node1 onekey]# hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/export/server/hadoop-2.7.5/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/export/server/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use \”help\” to get list of supported commands.
Use \”exit\” to quit this interactive shell.
Version 2.1.0, re1673bb0bbfea21d6e5dba73e013b09b8b49b89b, Tue Jul 10 17:26:48 CST 2018
Took 0.0034 seconds
Ignoring executable-hooks-1.6.0 because its extensions are not built. Try: gem pristine executable-hooks –version 1.6.0
Ignoring gem-wrappers-1.4.0 because its extensions are not built. Try: gem pristine gem-wrappers –version 1.4.0
2.4.1 :001 > status
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 0.4562 seconds
2.4.1 :002 >

WebUI
16010是Hbase的端口号。
http://node01:16010/master-status 其实这样输入也行:node01:16010
查看日志:
进入之后按大写的G可以跳到最后。看erro的地方报的错误。
HBase高可用
考虑关于HBase集群的一个问题,在当前的HBase集群中,只有一个Master,一旦Master出现故障,将会导致HBase不再可用。所以,在实际的生产环境中,是非常有必要搭建一个高可用的HBase集群的。
HBase高可用简介 HBase的高可用配置其实就是HMaster的高可用。要搭建HBase的高可用,只需要再选择一个节点作为HMaster,在HBase的conf目录下创建文件backup-masters,然后再backup-masters添加备份Master的记录。一条记录代表一个backup master,可以在文件配置多个记录。
搭建HBase高可用(就是主节点挂了有其它顶上去)
1. 先在node01在hbase的conf文件夹中创建 backup-masters 文件
cd /export/servers/hbase-2.1.0/conf
touch backup-masters 2. 将node02和node03添加到该文件中 vim backup-masters
node02
node03 3. 将backup-masters文件分发到所有的服务器节点中
scp backup-masters node02:$PWD
scp backup-masters node03:$PWD 在关闭Hbase的时候也是像上面一样,先关闭zk和hadoop,最后关闭Hbase 4. 重新启动hbase
stop-hbase.sh
start-hbase.sh
http://node01:16010/master-status
验证:
尝试杀掉node01节点上的master
kill -9 HMaster进程id

安装Phoenix
下载
大家可以从官网上下载与HBase版本对应的Phoenix版本。对应到HBase 2.1,应该使用版本「5.0.0-HBase-2.0」。
http://phoenix.apache.org/download.html
也可以使用资料包中的安装包。 Phoenix官方网址:http://phoenix.apache.org/
安装 上传安装包到Linux系统,并解压 在三台里面都安装,先安装一个,然后在拷贝。

cd /export/softwars
tar -xvf apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz -C ../servers/
将phoenix的所有jar包添加到所有HBase RegionServer和Master的复制到HBase的lib目录
# 拷贝jar包到hbase lib目录
cp /export/servers/apache-phoenix-5.0.0-HBase-2.0-bin/phoenix-*.jar /export/servers/hbase-2.1.0/lib/
# 进入到hbase lib 目录
cd /export/servers/hbase-2.1.0/lib/
# 分发jar包到每个HBase 节点
scp phoenix-*.jar node02:$PWD
scp phoenix-*.jar node03:$PWD
修改配置文件
cd /export/servers/hbase-2.1.0/conf
vim hbase-site.xml
——
# 1. 将以下配置添加到 hbase-site.xml 后边
<!– 支持HBase命名空间映射 启用命名空间映射 –>
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property> <!– 建议:将系统表也映射到命名空间 –> <property> <name>phoenix.schema.mapSystemTablesToNamespace</name> <value>true</value> </property>
<!– 支持索引预写日志编码 –>
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
# 2. 将hbase-site.xml分发到每个节点
scp hbase-site.xml node02:$PWD
scp hbase-site.xml node03:$PWD

将配置后的hbase-site.xml拷贝到phoenix的bin目录 在node01上
cp /export/servers/hbase-2.1.0/conf/hbase-site.xml /export/servers/apache-phoenix-5.0.0-HBase-2.0-bin/bin/
重新启动HBase
stop-hbase.sh
start-hbase.sh
启动Phoenix客户端,连接Phoenix Server
注意:第一次启动Phoenix连接HBase会稍微慢一点。
cd /export/servers/apache-phoenix-5.0.0-HBase-2.0-bin/
bin/sqlline.py node01:2181
//或
bin/sqlline.py
# 输入!table查看Phoenix中的表
!table
!tables — 只会显示当前 schema 下的表
如果是ambari里面安装了phoenix咋们在这里找到
如果部署时勾选phoenix的话:/usr/hdp/3.1.4.0-315/phoenix/bin 在这个位置
也可以通过ps -ef|grep phoenix找到。 我建议安装

退出:

常用shell操作
我们可以以shell的方式来维护和管理HBase。例如:执行建表语句、执行增删改查操作等等。
当Hbase在shell里面输入错了之后,只会换行不会打印,这样就导致了我们没法输入,
所有需要输入>”这个符号去解决: 
HBase入门
介绍:
HBase 是构建在 HDFS 之上的分布式数据库
Hbase和Hive的对比
和hvie一样,数据都是存在Hdfs上的
两者区别:


Hadoop的局限
HBase 与 NoSQL
hbase参考文档:https://hbase.apache.org/book.html 
HBase应用场景
对象存储
不少的头条类、新闻类的的新闻、网页、图片存储在HBase之中,一些病毒公司的病毒库也是存储在HBase之中
时序数据
HBase之上有OpenTSDB模块,可以满足时序类场景的需求
推荐画像
用户画像,是一个比较大的稀疏矩阵,蚂蚁金服的风控就是构建在HBase之上
时空数据
主要是轨迹、气象网格之类,滴滴打车的轨迹数据主要存在HBase之中,另外在技术所有大一点的数据量的车联网企业,数据都是存在HBase之中
CubeDB OLAP
Kylin一个cube分析工具,底层的数据就是存储在HBase之中,不少客户自己基于离线计算构建cube存储在hbase之中,满足在线报表查询的需求
消息/订单
在电信领域、银行领域,不少的订单查询底层的存储,另外不少通信、消息同步的应用构建在HBase之上
Feeds流
典型的应用就是xx朋友圈类似的应用,用户可以随时发布新内容,评论、点赞。
NewSQL 通过Phoenix
之上有Phoenix的插件,可以满足二级索引、SQL的需求,对接传统数据需要SQL非事务的需求
HBase特点
结构
功能
HDFS对比HBase
hdfs:
Hbase
HBase架构
系统架构
Client
客户端,例如:发出HBase操作的请求。例如:之前我们编写的Java API代码、以及HBase shell,都是CLient
Master Server
在HBase的Web UI中,可以查看到Master的位置。

Region Server

逻辑结构模型

Region
在HBASE中,表被划分为很多「Region」,并由Region Server提供服务

Store
Region按列蔟垂直划分为「Store」,存储在HDFS在文件中
MemStore
StoreFile
WAL


Hbase启动方式:
Hbase必须最后启动,因为Hbase启动依赖于hadoop和zookeeper,后面zookeeper都用ZK表示。
# 启动ZK(zookeeper)三台都需要启动,如果不知道三台怎么顺序启动,去看Hadoop笔记。
/export/servers/zookeeper-3.4.9/bin/zkServer.sh start # 启动hadoop start-all.sh 启动history server 启动历史记录文件在hadoop-2.7.7:sbin/mr-jobhistory-daemon.sh start historyserver
# 启动hbase 在主节点node01上面运行就行。和启动hadoop一样。
start-hbase.sh
在关闭Hbase的时候也是像上面一样,先关闭zk和hadoop,最后关闭Hbase
验证Hbase是否启动成功
# 启动hbase shell客户端 在任意节点,这里我选择主节点。
hbase shell
# 输入status
[root@node1 onekey]# hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/export/server/hadoop-2.7.5/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/export/server/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use \”help\” to get list of supported commands.
Use \”exit\” to quit this interactive shell.
Version 2.1.0, re1673bb0bbfea21d6e5dba73e013b09b8b49b89b, Tue Jul 10 17:26:48 CST 2018
Took 0.0034 seconds
Ignoring executable-hooks-1.6.0 because its extensions are not built. Try: gem pristine executable-hooks –version 1.6.0
Ignoring gem-wrappers-1.4.0 because its extensions are not built. Try: gem pristine gem-wrappers –version 1.4.0
2.4.1 :001 > status
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 0.4562 seconds
2.4.1 :002 >

WebUI
16010是Hbase的端口号。
http://node01:16010/master-status 其实这样输入也行:node01:16010
查看日志:
进入之后按大写的G可以跳到最后。看erro的地方报的错误。
ambari看的方式:



安装目录说明
|
目录名 |
说明 |
|
bin |
所有hbase相关的命令都在该目录存放 |
|
conf |
所有的hbase配置文件 |
|
hbase-webapps |
hbase的web ui程序位置 |
|
lib |
hbase依赖的java库 |
|
logs |
hbase的日志文件 |
参考硬件配置
针对大概800TB存储空间的集群中每个Java进程的典型内存配置:
|
进程 |
堆 |
描述 |
|
NameNode |
8 GB |
每100TB数据或每100W个文件大约占用NameNode堆1GB的内存 |
|
SecondaryNameNode |
8GB |
在内存中重做主NameNode的EditLog,因此配置需要与NameNode一样 |
|
DataNode |
1GB |
适度即可 |
|
ResourceManager |
4GB |
适度即可(注意此处是MapReduce的推荐配置) |
|
NodeManager |
2GB |
适当即可(注意此处是MapReduce的推荐配置) |
|
HBase HMaster |
4GB |
轻量级负载,适当即可 |
|
HBase RegionServer |
12GB |
大部分可用内存、同时为操作系统缓存、任务进程留下足够的空间 |
|
ZooKeeper |
1GB |
适度 |
推荐:
HBase数据模型
在HBASE中,数据存储在具有行和列的表中。这是看起来关系数据库(RDBMS)一样,但将HBASE表看成是多个维度的Map结构更容易理解。
|
ROWKEY |
C1列蔟 |
C2列蔟 |
||||
|
rowkey |
列1 |
列2 |
列3 |
列4 |
列4 |
列6 |
|
rowkey |
0001 |
|
C1(Map) |
列1 => 值1 列2 => 值2 列3 => 值3 |
|
C2(Map) |
列4 => 值4 列5 => 值5 列6 => 值6 |

概念模型
|
Row Key |
Time Stamp |
ColumnFamily contents |
ColumnFamily anchor |
ColumnFamily people |
|
\”com.cnn.www\” |
t9 |
|
anchor:cnnsi.com = \”CNN\” |
|
|
\”com.cnn.www\” |
t8 |
|
anchor:my.look.ca = \”CNN.com\” |
|
|
\”com.cnn.www\” |
t6 |
contents:html = \”<html>…\” |
|
|
|
\”com.cnn.www\” |
t5 |
contents:html = \”<html>…\” |
|
|
|
\”com.cnn.www\” |
t3 |
contents:html = \”<html>…\” |
|
|
|
\”com.example.www\” |
t5 |
contents:html = \”<html>…\” |
|
people:author = \”John Doe\” |
术语
表(Table):

行(row)
后续,我们会讲解rowkey的设计策略。
列(Column)
c1是列族 后面的是限定列
列蔟(Column Family) 
列标识符(Column Qualifier) 真正的列
单元格(Cell)
这里Row就是RowKey
C1: 列蔟
列蔟:后面的ADDRESS是列 Timestamp:时间搓 Value:值 下面的这个框框的所有东西被称为单元格。
常用shell操作(知道这个方便写java) –简单了解 后续用Phoenix查询数据
我们可以以shell的方式来维护和管理HBase。例如:执行建表语句、执行增删改查操作等等。
当Hbase在shell里面输入错了之后,只会换行不会打印,这样就导致了我们没法输入,
所有需要输入>”这个符号去解决: 
需求
有以下订单数据,我们想要将这样的一些数据保存到HBase中。
|
订单ID |
订单状态 |
支付金额 |
支付方式ID |
用户ID |
操作时间 |
商品分类 |
|
001 |
已付款 |
200.5 |
1 |
001 |
2020-5-2 18:08:53 |
手机; |
接下来,我们将使用HBase shell来进行以下操作:
创建表
在HBase中,所有的数据也都是保存在表中的。要将订单数据保存到HBase中,首先需要将表创建出来。
启动HBase Shell
HBase的shell其实JRuby的IRB(交互式的Ruby),但在其中添加了一些HBase的命令。
启动HBase shell:
hbase shell
或者使用Phoenix客户端: 
创建表
语法:
create \”表名\”,\”列蔟1\”, \”列蔟2\”,……….
创建订单表,表名为ORDER_INFO,该表有一个列蔟为C1 create \’ORDER_INFO\’,\’C1\’ //记住了后面别加‘;’号 hbase(main):005:0> create \’test11\’,\’c1\’

注意:
https://github.com/apache/hbase/tree/branch-2.1/hbase-shell/src/main/ruby/shell/commands
查看表
hbase(main):005:0> list
TABLE
ORDER_INFO
1 row(s)
Took 0.0378 seconds
=> [\”ORDER_INFO\”]

删除表
要删除某个表,必须要先禁用表
禁用表
语法:disable \”表名\” 
删除表
语法:drop \”表名\” 
例如:删除ORDER_INFO表 disable \”ORDER_INFO\” drop \”ORDER_INFO\”
添加数据
需求 接下来,我们需要往订单表中添加以下数据。
|
订单ID |
订单状态 |
支付金额 |
支付方式ID |
用户ID |
操作时间 |
商品分类 |
|
ID |
STATUS |
PAY_MONEY |
PAYWAY |
USER_ID |
OPERATION_DATE |
CATEGORY |
|
000001 |
已提交 |
4070 |
1 |
4944191 |
2020-04-25 12:09:16 |
手机; |
PUT操作
HBase中的put命令,可以用来将数据保存到表中。但put一次只能保存一个列的值。以下是put的语法结构:
put \’表名\’,\’ROWKEY\’,\’列蔟名:列名\’,\’值\’ //put当\’列蔟名:列名\’存在时就是更新,不存在就是添加。所有更新命令也是这么写的。
要添加以上的数据,需要使用7次put操作。如下:
put \’ORDER_INFO\’,\’000001\’,\’C1:ID\’,\’000001\’
put \’ORDER_INFO\’,\’000001\’,\’C1:STATUS\’,\’已提交\’
put \’ORDER_INFO\’,\’000001\’,\’C1:PAY_MONEY\’,4070
put \’ORDER_INFO\’,\’000001\’,\’C1:PAYWAY\’,1
put \’ORDER_INFO\’,\’000001\’,\’C1:USER_ID\’,4944191
put \’ORDER_INFO\’,\’000001\’,\’C1:OPERATION_DATE\’,\’2020-04-25 12:09:16\’
put \’ORDER_INFO\’,\’000001\’,\’C1:CATEGORY\’,\’手机;\’

查看添加的数据
需求 要求将rowkey为:000001对应的数据查询出来。 get命令 语法: get \’表名\’,\’rowkey\’
get \’ORDER_INFO\’,\’000001\’

显示中文
在HBase shell中,如果在数据中出现了一些中文,默认HBase shell中显示出来的是十六进制编码。要想将这些编码显示为中文,我们需要在get命令后添加一个属性:{FORMATTER => \’toString\’}
查看订单的数据
这里必须是FORMATTER大写且\’toString\’中的S也必须是大写 get \”表名\”, \”rowkey\” get \’ORDER_INFO\’,\’000001\’, {FORMATTER => \’toString\’}
注:
更新操作
更新操作
将订单ID为000001的状态,更改为「已付款」
使用put来更新数据 同样,在HBase中,也是使用put命令来进行数据的更新,语法与之前的添加数据一模一样。
更新指定的列
put \’ORDER_INFO\’, \’000001\’, \’C1:STATUS\’, \’已付款\’ //如果C1:STATUS以前不存在,那么就会新建 
注意:
|
C1:STATUS timestamp=1588748844082, value=已提交 C1:STATUS timestamp=1588748952074, value=已付款 C1:STATUS timestamp=1588748994244, value=已付款 |
get \’ORDER_INFO\’, \’000001\’, {VERSIONS => 3, COLUMN => \’C1\’, FORMATTER => \’toString\’}
Hbase能不能时间穿梭得看表是否开启了这个功能:
查看表结构
describe \’ORDER_INFO\’
开启版本权限的流程:开启可以保存5个版本
# 先禁用表
disable \’ORDER_INFO\’
# 修改列族 C1 的版本数(比如设为 5)
alter \’ORDER_INFO\’, {NAME => \’C1\’, VERSIONS => 5}
# 重新启用表
enable \’ORDER_INFO\’

删除操作 -删除单元格数据
删除状态列数据
需求 将订单ID为000001的状态列删除。
delete命令
在HBase中,可以使用delete命令来将一个单元格的数据删除。语法格式如下:
delete \’表名\’, \’rowkey\’, \’列蔟:列\’。
注意:此处HBase默认会保存多个时间戳的版本数据,所以这里的delete删除的是最新版本的列数据,但是老版本这时就显示出来啦,若一直删除至老版本都没有的话,就彻底删除完了。
删除指定列的一个单元格
delete \’ORDER_INFO\’,\’000001\’,\’C1:STATUS\’

删除整行数据
需求 将订单ID为000001的信息全部删除(删除所有的列)
deleteall命令
deleteall命令可以将指定rowkey对应的所有列全部删除。语法:
deleteall \’表名\’,\’rowkey\’
删除指定的订单
deleteall \’ORDER_INFO\’,\’000001\’
清空表
需求 将ORDER_INFO的数据全部删除 truncate命令
truncate命令用来清空某个表中的所有数据。语法:
truncate \”表名\”
清空ORDER_INFO的所有数据 truncate \’ORDER_INFO\’ 

导入测试数据集
在资料的 数据集/ ORDER_INFO.txt 中,有一份这样的HBase数据集,我们需要将这些指令放到HBase中执行,将数据导入到HBase中。
可以看到这些都是一堆的put语句。那么如何才能将这些语句全部执行呢?
put \’表名\’,\’ROWKEY\’,\’列蔟名:列名\’,\’值\’ //put当\’列蔟名:列名\’存在时就是更新,不存在就是添加。所有更新命令也是这么写的。

开始导入:
上传ORDER_INFO.txt文件 将该数据集文件上传到指定的目录中
执行
使用以下命令执行:
hbase shell /export/softwars/ORDER_INFO.txt
即可。
完整路径:
/usr/hdp/3.1.4.0-315/hbase/bin/hbase shell /export/softwars/ORDER_INFO.txt 
计数操作
需求
查看HBase中的ORDER_INFO表,一共有多少条记录。
count命令
count命令专门用来统计一个表中有多少条数据。语法:
count ‘表名’ 注意:这个操作是比较耗时的。在数据量大的这个命令可能会运行很久。 
大量数据的计数统计
当HBase中数据量大时,可以使用HBase中提供的MapReduce程序来进行计数统计。语法如下:
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter \’表名\’

启动YARN集群
|
启动yarn集群 start-yarn.sh 启动history server 启动历史记录文件在hadoop-2.7.7:sbin/mr-jobhistory-daemon.sh start historyserver |
执行MR JOB
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter \’ORDER_INFO\’
通过观察YARN的WEB UI,我们发现HBase启动了一个名字为rowcounter_ORDER_INFO的作业。
查看值的话咋们要到yarn的日志里面去看:
yarn logs -applicationId application_1766057336546_0001 > result.txt
less result.txt
数据导入/导出(10W数据)
在资料中,有一份10W的抄表数据文件,我们需要将这里面的数据导入到HBase中。
Import JOB
在HBase中,有一个Import的MapReduce作业,可以专门用来将数据文件导入到HBase中。 用法
hbase org.apache.hadoop.hbase.mapreduce.Import 表名 HDFS数据文件路径
导入数据
1 将资料中数据文件上传到Linux中
2 再将文件上传到hdfs中
hadoop fs -mkdir -p /water_bill/output_ept_10W
hadoop fs -put part-m-00000_10w /water_bill/output_ept_10W
3 启动YARN集群
start-yarn.sh
4 使用以下方式来进行数据导入 这里面的数据要求是在Hdfs上。所以/water_bill/output_ept_10W目录是Hdfs上的目录,导入也是按照mapreduce操作一样,将这个目录下的数据进行导入。
hbase org.apache.hadoop.hbase.mapreduce.Import WATER_BILL /water_bill/output_ept_10W
解释:/water_bill/output_ept_10W:hdfs路径
导出数据
hbase org.apache.hadoop.hbase.mapreduce.Export WATER_BILL /water_bill/output_ept_10W_export
解释:/water_bill/output_ept_10W_export:这里数据是导入到hdfs的路径上了
说明:
当你运行:
hbase org.apache.hadoop.hbase.mapreduce.Export WATER_BILL /water_bill/output_ept_10W_export
导出的数据是 SequenceFile格式,存储在HDFS上。每个文件的内容结构如下:

查看导出数据的方法:
# 1. 查看HDFS上的文件列表
hadoop fs -ls /water_bill/output_ept_10W_export
# 输出类似:
# /water_bill/output_ept_10W_export/_SUCCESS
# /water_bill/output_ept_10W_export/part-m-00000
# /water_bill/output_ept_10W_export/part-m-00001
# 2. 查看SequenceFile内容(需要转换为文本查看)
hadoop fs -text /water_bill/output_ept_10W_export/part-m-00000 | head -n 5
# 看到的可能是二进制内容,或者转换后的文本类似:
# row_key1 column=cf1:col1, timestamp=1640995200000, value=value1
# row_key1 column=cf1:col2, timestamp=1640995200000, value=value2
# row_key2 column=cf1:col1, timestamp=1641081600000, value=value3
查看文件格式的方法:
# 1. 查看文件前几行
hadoop fs -cat /water_bill/output_ept_10W/part-m-00000_10w | head -n 5
# 2. 如果是SequenceFile,用-text参数
hadoop fs -text /water_bill/output_ept_10W/part-m-00000_10w | head -n 5
# 3. 如果是HFile,用hbase命令查看
hbase org.apache.hadoop.hbase.io.hfile.HFile -p -f /water_bill/output_ept_10W/part-m-00000_10w
如果我们的数据格式是:
# 假设你的数据格式:rowkey,columnfamily:column,value,timestamp
需要使用ImportTsv工具(文本转HBase) 然后在用org.apache.hadoop.hbase.mapreduce.Import导入
如果对于很大的数据量,我们就需要Bulk load这中方式 要自己写mapreduce代码了 可以 看后面HBase批量装载——Bulk load
扫描操作 scan命令
查看ORDER_INFO表中所有的数据
在HBase,我们可以使用scan命令来扫描HBase中的表。语法:
sca





