日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Sqoop(三)将关系型数据库中的数据导入到HDFS(包括hive,hbase中)

發布時間:2024/9/27 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sqoop(三)将关系型数据库中的数据导入到HDFS(包括hive,hbase中) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文轉自:https://www.cnblogs.com/yfb918/p/10855170.html
一、說明:
將關系型數據庫中的數據導入到 HDFS(包括 Hive, HBase) 中,如果導入的是 Hive,那么當 Hive 中沒有對應表時,則自動創建。

二、操作

1、創建一張跟mysql中的im表一樣的hive表im:

sqoop create-hive-table \ --connect jdbc:mysql://192.168.200.100:3306/yang \ --username root \ --password 010209 \ --table im \ --hive-table im

過程中報錯總結:

ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register 解決方法:1、將hive-site.xml復制到${SQOOP_HOME}/conf下2、vim $JAVA_HOME/jre/lib/security/java.policy:在grant{}內部添加如下內容:permission javax.management.MBeanTrustPermission "register"; Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR 解決方法:將hive 里面的lib下的hive-exec-**.jar 放到sqoop 的lib 下

2、將mysql中的數據導入到HDFS

sqoop import \ --connect jdbc:mysql://192.168.200.100:3306/yang \ --username root \ --password 010209\ --table im \ -m 1

3、將mysql中的數據導入到HDFS(按照指定分隔符和路徑進行導入)

sqoop import \ --connect jdbc:mysql://192.168.200.100:3306/yang \ --username root \ --password 010209 \ --table im \ --target-dir /test/ \ --fields-terminated-by ',' \ -m 1

4、將mysql中的數據導入到HDFS(帶where條件)

sqoop import \ --connect jdbc:mysql://192.168.200.100:3306/yang \ --username root \ --password 010209 \--where "name='dccc'" \ --table im \ --target-dir /test/ \ -m 1帶where條件,查詢指定列(相當于select name from im where name="dccc") sqoop import \ --connect jdbc:mysql://192.168.200.100:3306/yang \ --username root \ --password 010209 \--columns "name" \ --where "name='dccc'" \ --table im \ --target-dir /test/ \ -m 1

5、將mysql中的數據導入到HDFS(自定義查詢SQL)

sqoop import \ --connect jdbc:mysql://192.168.200.100:3306/yang \ --username root \ --password 010209 \ --target-dir /test/ \ --query 'select id,name from im where $CONDITIONS ' \ --split-by id \ --fields-terminated-by '\t' \ -m 2

說明: 
–split-by:

.split-by 根據不同的參數類型有不同的切分方法,如int型,Sqoop會取最大和最小split-by字段值,然后根據傳入的num-mappers來 確定劃分幾個區域。比如select max(split_by),min(split-by) from得到的max(split-by)和min(split-by)分別為1000和1,而num-mappers(-m)為2的話,則會分成兩個區域 (1,500)(501-1000),同時也會分成2個sql給2個map去進行導入操作,分別為select XXX from table where split-by>=1 and split-by<500和select XXX from table where split-by>=501 and split-by<=1000.最后每個map各自獲取各自SQL中的數據進行導入工作。 .當split-by不是int型時出現如上場景中的問題。目前想到的解決辦法是:將-m 設置稱1,split-by不設置,即只有一個map運行,缺點是不能并行map錄入數據。(注意,當-m 設置的值大于1時,split-by必須設置字段) .split-by即便是int型,若不是連續有規律遞增的話,各個map分配的數據是不均衡的,可能會有些map很忙,有些map幾乎沒有數據處理的情況

CONDITIONS:

SQoop Query imports自由查詢模式下$CONDITIONS的作用:1、必須制定目標文件的位置:--target-dir2、必須使用$CONDITIONS關鍵字3、選擇使用--split-by分片(分區,結果分成多個小文件)

6、將mysql中的數據導入到Hive

sqoop import --connect jdbc:mysql://192.168.200.100:3306/yang --username root --password 010209 --table im --hive-import -m 1

7、指定分隔符和列分隔符,指定hive-import,指定覆蓋導入,指定自動創建Hive表,指定表名,指定刪除中間結果數據目錄

sqoop import \ --connect jdbc:mysql://192.168.200.100:3306/yang \ --username root \ --password 010209 \ --table im \ --fields-terminated-by "\t" \ --lines-terminated-by "\n" \ --hive-import \ --hive-overwrite \ --create-hive-table \ --delete-target-dir \ --hive-database yang \ --hive-table im-m 1

8、將Mysql數據庫中的表數據導入到Hbase(普通導入)

sqoop import \ --connect jdbc:mysql://192.168.200.100:3306/yang \ --username root \ --password 010209 \ --table im \ --hbase-table im \ --column-family cf \ --hbase-row-key keyid

總結

以上是生活随笔為你收集整理的Sqoop(三)将关系型数据库中的数据导入到HDFS(包括hive,hbase中)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。