mysql hbase 同步_HBase 简介和使用 Sqoop 同步 Mysql 数据到 HBase
HBase 數據模型
Namespace: 命名空間
類似于關系型數據庫中的 database schema
Table: 表
一個 Namespace 下有多個表,一個表可以包含多個行
Row: 行
在 HBase 中 Row 由一個 Row Key 和一個或多個列及其值組成,數據值的存儲按照 Row Key 的字典順序存儲的。
Column: 列
在 HBase 中, 每個列有它所屬的 Column Family(列簇), 以及Column Qualifier(列修飾符), 列名組成是 Column Family:Column Qualifier
Column Family: 列簇
在 HBase 中將列進行分類,每個列都有它所屬的列簇,列簇 把列和相應的值物理上聯合在一起。創建表的時候,必須指定至少一個 列簇。每個列出是一個存儲屬性的集合,
Column Qualifier: 列修飾符
列簇 和 列修飾符 才是實際意義上的列唯一標識,假設存在 列簇 content, 可以存在 列修飾符 xml, 組成一個唯一的列標識 content:xml;創建表的時候,列簇 已經被指定了,但是 列修飾符 是可變的,可以再 put 指令中隨意指定屬于 列簇 的 列修飾符。
Cell
一個Cell是行,列簇和列修飾符的組合,并且包含一個值和時間戳,時間戳代表著值的版本。
Timestamp(時間戳)
一個時間戳是連同值一起被寫入的,是值版本的唯一標識,默認情況下,時間戳表示數據寫入時RegionServer的時間,但是當你在寫數據到Cell的時候,你可以指定一個不同的時間戳。
HBase 常用指令1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16create_namespace 'n1' // 創建一個 namespace n1
list_namespace // 列出所有的 namespace
create 'n1:t1', 'CF1', 'CF2' // 創建表 t1
list_namespace_tables 'n1' // 列出 namespace n1 下的所有 table
describe 'n1:t1' // 查看表結構
>put 'n1:t1', 'rk', 'CF1:name', 'test' // 往表 n1:t1 中 row key 是 rk 的行中插入列名稱是 CF1:name 的值 'test'
>get 'n1:t1', 'rk' // 獲取表 'n1:t1' 中 row key 是 rk 的所有數據
>scan 'n1:t1' // 模糊查看表 n1:t1
>scan 'n1:t1', FILTER=>"ColumnPrefixFilter('name') AND ValueFilter(=,'substring:test')" // 模糊查詢,列修飾符前綴為name 且值中包含字段 test 的數據
>delete 'n1:t1', 'rk', 'CF1:name' // 刪除 row key 是 rk 列 `CF1:name` 的數據
>disable 'n1:t1' // 禁用表 n1:t1,被被刪除之前必須先被禁用
>is_enabled 'n1:t1' // 查看表 n1:t1 是否可用
>is_disabled 'n1:t1' // 查看表 n1:t1 是否被禁用
>enable 'n1:t1' // 啟用表 n1:t1
>drop 'n1:t1' // 刪除表 n1:t1,注意:只能刪除被禁用的表
>drop_namespace 'n1' // 刪除命名空間 n1,注意:只能刪除沒有表的 namespace
sqoop 導出 mysql 數據到 HBase1
2export HADOOP_CLASSPATH=/absolute/path/to/mysql-connector-java-5.1.15.jar
sqoop import --connect jdbc:mysql://ip:port/database_name --username 'username' --password 'password' --table 'table_name' --columns "id,name,code,description" --hbase-table 'test:hbase_table_name' --hbase-create-table --hbase-row-key 'id,code' --column-family info
上述命令行解析
“1. 設置 HADOOP_CLASSPATH
首先需要設置 HADOOP_CLASSPATH,值是 mysql-connector-java-5.1.15.jar 的絕對路徑,否則會報錯:java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver--connect
連接數據庫的url,從這個數據庫中導出數據
--username
數據庫用戶名
--password
數據庫密碼
--table
導出數據的源數據庫表
--columns
本次導出的數據,可以一次導出多列,用逗號分隔,導出的列在hbase 中屬于 --column family 參數指定的列簇,列名稱是 column family:mysql表中的列名,需要注意的是,如果沒有指定參數 --hbase-row-key,在hbase 表中的row key 將是 --columns 中第一列。
--hbase-table
本次導入數據的 hbase 表,需要注意的是導入數據的hbase 表可以不存在,但是hbase 表所屬的 namespace 必須是存在的,否則會報錯:Import failed: org.apache.hadoop.hbase.NamespaceNotFoundException: org.apache.hadoop.hbase.NamespaceNotFoundException: 'namespace'
--hbase-create-table
如果導入數據的表不存在,則創建該表
--hbase-row-key
設置 hbase 中的 Row Key,參數值是mysql 表中的列名,可以設置多個列合并成 Row Key, 用逗號分隔
“10. --column-family
指定導入數據所屬的列簇,每次導入數據只能導入屬于同一個列簇 的數據,如果 mysql 表中數據屬于多個 列簇,只能通過多條指令分批導入。
注意:上述指令沒有指定列分隔符和行分隔符,默認的列分隔符是 '
總結
以上是生活随笔為你收集整理的mysql hbase 同步_HBase 简介和使用 Sqoop 同步 Mysql 数据到 HBase的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基础练习 FJ的字符串 递推
- 下一篇: c语言5版第10章答案,第10章 指