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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第一章 Sqoop专题之常见面试题

發布時間:2024/3/26 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第一章 Sqoop专题之常见面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、Sqoop是什么

Sqoop本質上是一塊使用MR程序進行數據遷移的工具;

公司使用的是1.4.6;

2、hcatalog的作用

hcatalog是hive對外的一個統一存儲格式的接口,使用hcatalog對接到hive的數據不需要擔心數據在hive中的存儲格式和存儲位置,注意版本為1.4.6(sqoop在1.4.4之后的版本集成了Hcatalog);

3、使用Sqoop導入數據到Hive中

3.1、第一種方式:Sqoop + Hcatalog
  • 使用建表方式增量導入hive orc;
    • 如果已經使用hcatalog,則hive-import系列的值全都不能用,否則報錯;
    • hcatalog-storage-stanze,存儲格式和壓縮格式會自動對齊hive表的配置;
sqoop import #1、指定關系數據庫的jdbc --connect jdbc:mysql://127.0.0.1:3306/test #指定mysql數據庫test --username you_user_name --passwarod 123456#2、指定mysql表 --table table_name --driver com.mysql.jdbc.Driver --query “select a”#3、創建hive表,如果表已存在,必須去掉 --create-hcatalog-table --hcatalog-storage-stanza 'stored as orc tbproperties("orc.compress"="gzip")'#4、指定導入數據的hive表 --hcatalog-database test --hcatalog-table table_name#5、指定導入數據的hive表分區 - key和value必須同時存在,相當于靜態分區 --hcatalog-partition-keys year,month,day --hcatalog-partition-values 2021,12,9#6、以自增長鍵作增量導入 --incremental append --check-column order_id --last-values 0 #6、以時間戳抽增量導入 --increatmental lastmodified --check-column time --last-value "2014-11-09 21:00:00"#7、指定mysql數據為空值時用什么符號存儲 --null-string '\\N' --null-not-string '\\N'#8、設置無視字符串中的分隔符 --hive-drop-import-delims#9、并行導入需要指定分片字段,盡量指定int型 --split-by key -m 3
3.2、第二種方式: Sqoop + HDFS + Hive
  • 思路
步驟:①將RDBMS中的數據增量導入到HDFS上的臨時目錄下;②將HDFS上臨時目錄下的文件剪切到Hive表相應的分區目錄下;注意點:導入時,若不使用臨時目錄,直接導入到相應的HIVE分區目錄下,是不可以的,分區目錄下的值不會自動裝載到表中(注意:可以直接導入到hive非分區目錄下,可以感知到,是可以成功);

(1)將mysql數據通過sqoop導入到HDFS中

  • 將mysql表中歷史數據及剛產生的數據導入到hdfs臨時目錄下了(每張hive表對應一張臨時目錄);
sqoop job --create bap_us_order --import\ #1、指定mysql連接 --connect jdbc:mysql://master:3306/....\ #2、指定mysql的jdbc --driver com.mysql.jdbc.Driver \ --username root \ #指定密碼文件 --passward-file hdfs:///password.file \ --table uesr_order \ #3、指定導入的臨時目錄 --target-dir /mtbap/ods_tmp_ods_user_order/ \ #4、指定字段之間的分隔符 --fields-terminated-by '\001' \ #5、指定增量導入方式 --check-columnn order_id \ --increamental append \ --last-value 0 \#上述語句是創建了一個增量導入的job,帶到運行時,只需要執行job即可; sqoop job --exec bap_us_order

(2)load data statments,將臨時目錄下的數據into到特定分區表對應的目錄下

args=$1 dt= if[${#args} == 0] thendt=`data-d "1days ago" "+%Y%m%d"1` elsedt=$1 fiecho "run hive load data" hive --database databse_name -e "load data inpath '/mtbap/ods_tmp_ods_user_order/' into table ods_tmp_ods_user_order partition(dt=$(dt))" echo "run hive load data end"

4、sqoop導出hive數據到mysql中

介紹(前提:要從hive表中將數據導出到rdbms中);①待導出的源是hive表所對應的hdfs上特定的目錄,該目錄下存儲有hive表最終保存的數據;②可以實現的條件:上述hive表對應的hdfs上的目錄下的文件格式是textfile(普通的文本文件)真實生產環境下此情形比較少,一般都是壓縮后的數據,為了節省hdfs的空間③不能實現的場合:上述hive表對應的hdfs上的目錄下的文件格式不是textfile,是壓縮之后的文件,如:orcFile,或者是sequenceFile,直接導出會報錯;此種情形下,只能選用hive hcatalog導出方式實現;

(1)hive hcatalog導出方式,hive表存儲格式不是textfile格式

sqoop export \ #1、指定hive表中數據 --hcatalog-database temp \ --hcatalog-table js_pianyuan_orc \ --hcatalog-partition-keys curdate \#2、指定JDBC連接及mysql導出表 --connect jdbc:mysql://ip:3306/test \ --username username \ --password passwd \ --table js_pianyuan#3、maptask的并行度 --m 10 \#4、設置空值轉義,否則會報錯 --input-null-string '\\N' --input-null-non-string '\\N'#5、設置更新的方式導出數據(key不存在時允許新增) --update-key id --update-mode allowinsert#導出時默認使用4個maptask任務

5、Sqoop常用參數

sqoop import \ --connect \ --username \ --passward \ --target-dir \ --delete-target-dir \ #可選,刪除目錄 --num-mappers \ #指定并行度 --filds-terminated-by \ #指定分隔符 --query "$2" and $CONDITIONS;

總結

以上是生活随笔為你收集整理的第一章 Sqoop专题之常见面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

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