當前位置:編程學習大全網 - 源碼下載 - hbase數據庫是關系型數據庫嗎

hbase數據庫是關系型數據庫嗎

Hive 存儲格式和關系型數據庫之間進行導入導出

最近更新時間:2020-09-29 15:54:18

前往 GitHub 編輯?

我的收藏

本頁目錄:

1. 開發準備

2. 將關系型數據庫導入到 Hive 中

3. 將 Hive 導入到關系型數據庫中

使用 HDFS 中的 Hive 數據

使用 Hcatalog 進行導入

4. 將 orc 格式的 Hive 表格導入到關系型數據庫中

本文介紹了使用騰訊雲 Sqoop 服務將數據在 MySQL 和 Hive 之間相互導入導出的方法。

1. 開發準備

確認已開通騰訊雲,並且創建了壹個 EMR 集群。在創建 EMR 集群的時候需要在軟件配置界面選擇 Sqoop,Hive 組件。

Sqoop 等相關軟件安裝在路徑 EMR 雲服務器的/usr/local/service/路徑下。

2. 將關系型數據庫導入到 Hive 中

本節將繼續使用上壹節的用例。

進入 EMR 控制臺,復制目標集群的實例 ID,即集群的名字。再進入關系型數據庫控制臺,使用 Ctrl+F 進行搜索,找到集群對應的 MySQL 數據庫,查看該數據庫的內網地址 $mysqlIP。

登錄 EMR 集群中的任意機器,最好是登錄到 Master 節點。登錄 EMR 的方式請參考?登錄 Linux 實例。這裏我們可以選擇使用 WebShell 登錄。單擊對應雲服務器右側的登錄,進入登錄界面,用戶名默認為 root,密碼為創建 EMR 時用戶自己輸入的密碼。輸入正確後,即可進入命令行界面。

在 EMR 命令行先使用以下指令切換到 Hadoop 用戶,並進入 Hive 文件夾:

[root@172 ~]# su hadoop[hadoop@172 ~]# cd /usr/local/service/hive

新建壹個 Hive 數據庫:

[hadoop@172 hive]$ hive

hive> create database hive_from_sqoop;

OK

Time taken: 0.167 seconds

使用 sqoop-import 命令把上壹節中創建的 MySQL 數據庫導入到 Hive 中:

[hadoop@172 hive]# cd /usr/local/service/sqoop

[hadoop@172 sqoop]$ bin/sqoop-import --connect ?jdbc:mysql://$mysqlIP/test --username root -P --table sqoop_test_back --hive-database hive_from_sqoop --hive-import --hive-table hive_from_sqoop

$mysqlIP:騰訊雲關系型數據庫(CDB)的內網地址。

test:MySQL 數據庫名稱。

--table:要導出的 MySQL 表名。

--hive-database:Hive 數據庫名。

--hive-table:導入的 Hive 表名。

執行指令需要輸入您的 MySQL 密碼,默認為您創建 EMR 集群時設置的密碼。執行成功後,可以在 Hive 中查看導入的數據庫:

hive> select * from hive_from_sqoop;OK1 first 2018-07-03 16:07:46.0 spark2 second 2018-07-03 15:30:57.0 mr3 third 2018-07-03 15:31:07.0 yarn4 forth 2018-07-03 15:39:38.0 hbase5 fifth 2018-07-03 16:02:29.0 hive6 sixth 2018-07-03 16:09:58.0 sqoopTime taken: 1.245 seconds, Fetched: 6 row(s)

3. 將 Hive 導入到關系型數據庫中

Sqoop 支持將 Hive 表中的數據導入到關系型數據庫中。先在 Hive 中創建新表並導入數據。

登錄 EMR 集群中的任意機器,最好是登錄到 Master 節點。在 EMR 命令行先使用以下指令切換到 Hadoop 用戶,並進入 Hive 文件夾:

[root@172 ~]# su hadoop[hadoop@172 ~]# cd /usr/local/service/hive

新建壹個 bash 腳本文件 gen_data.sh,在其中添加以下代碼:

#!/bin/bashMAXROW=1000000 #指定生成數據行數for((i = 0; i < $MAXROW; i++))do   echo $RANDOM, \"$RANDOM\"done

並按如下方式執行:

[hadoop@172 hive]$ ./gen_data.sh > hive_test.data

這個腳本文件會生成1,000,000個隨機數對,並且保存到文件 hive_test.data 中。

使用如下指令把生成的測試數據先上傳到 HDFS 中:

[hadoop@172 hive]$ hdfs dfs -put ./hive_test.data /$hdfspath

其中 $hdfspath 為 HDFS 上的您存放文件的路徑。

連接 Hive 並創建測試表:

[hadoop@172 hive]$ bin/hivehive> create database hive_to_sqoop; ?#創建數據庫 hive_to_sqoopOK

Time taken: 0.176 secondshive> use hive_to_sqoop; #切換數據庫OK

Time taken: 0.176 secondshive> create table hive_test (a int, b string)hive> ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';                #創建數據表 hive_test, 並指定列分割符為’,’

OK

Time taken: 0.204 secondshive> load data inpath "/$hdfspath/hive_test.data" into table hive_test; ? #導入數據

$hdfspath 為 HDFS 上的您存放文件的路徑。

成功後可使用quit命令退出 Hive 數據倉庫。連接關系型數據庫並創建對應的表格:

[hadoop@172 hive]$ mysql -h $mysqlIP –p

Enter password:

其中 $mysqlIP 為該數據庫的內網地址,密碼為您創建集群時設置的密碼。

在 MySQL 中創建壹個名為 test 的表格,MySQL 中的表字段名字和 Hive 中的表字段名字必須完全壹致:

mysql> create table table_from_hive (a int,b varchar(255));

成功創建表格後即可退出 MySQL。

使用 Sqoop 把 Hive 數據倉庫中的數據導入到關系型數據庫中有兩種方法,可以直接使用 HDFS 存儲的 Hive 數據,也可以使用 Hcatalog 來進行數據的導入。

使用 HDFS 中的 Hive 數據

切換進入 Sqoop 文件夾,然後使用以下指令把 Hive 數據庫中的數據導出到關系型數據庫中:

[hadoop@172 hive]$ cd ?../sqoop/bin

[hadoop@172 bin]$ ./sqoop-export --connect jdbc:mysql://$mysqlIP/test --username root -P

--table table_from_hive --export-dir /usr/hive/warehouse/hive_to_sqoop.db/hive_test

其中 $mysqlIP 為您的關系型數據庫的內網 IP 地址,test 為關系型數據庫中的數據庫名,--table 後跟的參數為您的關系型數據庫的表名,--export-dir 後跟的參數為 Hive 表中的數據在 HDFS 中存儲的位置。

使用 Hcatalog 進行導入

切換進入 Sqoop 文件夾,然後使用以下指令把 Hive 數據庫中的數據導出到關系型數據庫中:

[hadoop@172 hive]$ cd ?../sqoop/bin

[hadoop@172 bin]$ ./sqoop-export --connect jdbc:mysql://$mysqlIP/test --username root -P

--table table_from_hive --hcatalog-database hive_to_sqoop --hcatalog-table hive_test

其中 $mysqlIP 為您的關系型數據庫的內網 IP 地址,test 為關系型數據庫中的數據庫名,--table 後跟的參數為您的關系型數據庫的表名,--hcatalog-database 後面跟的參數是要導出的 Hive 表所在的數據庫的名稱,--hcatalog-table 後面跟的參數是要 Hive 中要導出的表的名稱。

操作完成後可以進入關系型數據庫查看是否導入成功:

[hadoop@172 hive]$ mysql -h $mysqlIP –p ?#連接 MySQLEnter password:mysql> use test;

Database changed

mysql> select count(*) from table_from_hive; #現在表中有1000000條數據+----------+| count(*) |+----------+| 1000000 |+----------+1 row in set (0.03 sec)

mysql> select * from table_from_hive limit 10; #查看表中前10條記錄+-------+----------+| a | b |

+-------+----------+

| 28523 | ?"3394" ?|| 31065 | ?"24583" |

| ? 399 | ?"23629" || 18779 | ?"8377" ?|

| 25376 | ?"30798" || 20234 | ?"22048" |

| 30744 | ?"32753" || 21423 | ?"6117" ?|

| 26867 | ?"16787" || 18526 | ?"5856" ?|

+-------+----------+

10 rows in set (0.00 sec)

更多關於 sqoop-export 命令的參數可以通過如下命令查看:

[hadoop@172 bin]$ ./sqoop-export --help

4. 將 orc 格式的 Hive 表格導入到關系型數據庫中

  • 上一篇:wr指標的絕招
  • 下一篇:未來意思是什麽
  • copyright 2024編程學習大全網