imp命令導入指定表_Sqoop 使用shell命令的各種參數的配置及使用方法

點擊上方藍色字體,選擇“設為星標

回復”資源“獲取更多資源

3e518efcf46beb7231cfc2dd4565a3a6.png

本文作者:Sheep Sun本文鏈接:https://www.cnblogs.com/yangxusun9/p/12558683.html

ec8966907bce936488e80770507fd187.png

大數據技術與架構點擊右側關注,大數據開發領域最強公眾號!04d04c9d06f6dda1b24c0d240c05afd6.png

e051dc473ebddcd23aefe37ca2ef5795.png

暴走大數據點擊右側關注,暴走大數據!053968b83a866816579838e7e984e5be.png一、Sqoop簡介Sqoop將用戶編寫的Sqoop命令翻譯為MR程序,MR程序讀取關系型數據庫中的數據,寫入到HDFS或讀取HDFS上的數據,寫入到關系型數據庫!在MR程序中如果要讀取關系型數據庫中的數據,必須指定輸入格式為DBInputformat!在MR程序中如果要向關系型數據庫寫入數據,必須指定輸出格式為DBOutputformat!Sqoop命令運行的MR程序,只有Map階段,沒有Reduce階段!只需要做數據傳輸,不需要對數據進行合并和排序!二、sqoop導入數據(將關系型數據庫的數據導入到 HDFS)數據如下1503cabdff0fb6506fd519d6b8943135.png2.1 直接導入HDFS

2.1.1 全表導入(部分導入)

bin/sqoop import \##連接的關系型數據庫的url,用戶名,密碼--connect jdbc:mysql://hadoop102:3306/test \--username root \--password 123 \##連接的表--table t_emp \##導出數據在hdfs上存放路徑--target-dir /sqoopTest \##如果路徑已存在則先刪除--delete-target-dir \##導入到Hdfs上后,每個字段使用什么參數進行分割--fields-terminated-by "\t" \##要啟動幾個MapTask,默認4個--num-mappers 2 \##數據集根據哪個字段進行切分,切分后每個MapTask負責一部分--split-by id \##要實現部分導入,加入下面的參數,表示導入哪些列##columns中如果涉及到多列,用逗號分隔,分隔時不要添加空格--columns id,name,age

2.1.2?使用sqoop關鍵字篩選查詢導入數據

bin/sqoop import \--connect jdbc:mysql://hadoop102:3306/test \--username root \--password 123 \--table t_emp \##指定過濾的where語句,where語句最好使用引號包裹--where 'id>6' \--target-dir /sqoopTest \--delete-target-dir \--fields-terminated-by "\t" \--num-mappers 1 \--split-by?id?

2.1.3 使用查詢語句導入

bin/sqoop import \--connect jdbc:mysql://hadoop102:3306/test \--username root \--password 123 \##查詢語句最好使用單引號##如果query后使用的是雙引號,則$CONDITIONS前必須加轉移符,防止shell識別為自己的變量--query 'select * from t_emp where id>3 and $CONDITIONS' \--target-dir /sqoopTest \--delete-target-dir \--fields-terminated-by "\t" \--num-mappers 1 \--split-by?id?
注意:1、如果使用了--query,就不能指定--table,和--columns和--where  --query 和 --table一定不能同時存在!  --where和--query同時存在時,--where失效  --columns和--query同時存在時,還有效!2、--query 必須跟--target-dir2.2?導入到Hive
bin/sqoop import \--connect jdbc:mysql://hadoop102:3306/test \--username root \--password 123 \--query 'select * from t_emp where id>3 and $CONDITIONS' \--target-dir /sqoopTest \##如果不限定分隔符,那么hive存儲的數據將不帶分隔符,之后再想操作很麻煩,所以建議加上--fields-terminated-by "\t" \--delete-target-dir \##導入到hive--hive-import \##是否覆蓋寫,不加這個參數就是追加寫--hive-overwrite \##指定要導入的hive的表名--hive-table t_emp \--num-mappers 1 \--split-by?id
原理還是分倆步:先把數據從關系數據庫里導到hdfs中,然后再從hdfs中導到hive中,此時hdfs中的文件會被刪除注意:如果hive中沒表會自動創建表,但是類型是自動生成的,所以還是建議手動創建?也可以分倆步走:先導入hdfs
#!/bin/bashimport_data(){$sqoop import \--connect jdbc:mysql://hadoop102:3306/gmall \--username root \--password 123 \--target-dir /origin_data/gmall/db/$1/$do_date \--delete-target-dir \--query "$2 and  \$CONDITIONS" \--num-mappers 1 \--fields-terminated-by '\t' \# 使用壓縮,和指定壓縮格式為lzop--compress \--compression-codec lzop \#將String類型和非String類型的空值替換為\N,方便Hive讀取--null-string '\\N' \--null-non-string '\\N'}
然后利用? load data? 命令導入hive注意:這里使用到了空值處理 ——Hive中的Null在底層是以“\N”來存儲,而MySQL中的Null在底層就是Null,為了保證數據兩端的一致性。在導出數據時采用--input-null-string和--input-null-non-string兩個參數。導入數據時采用--null-string和--null-non-string。2.3?導入到 Hbase
bin/sqoop import \--connect jdbc:mysql://hadoop102:3306/test \--username root \--password 123 \--query 'select * from t_emp where id>3 and $CONDITIONS' \--target-dir /sqoopTest \--delete-target-dir \##表不存在是否創建--hbase-create-table \##hbase中的表名--hbase-table "t_emp" \##將導入數據的哪一列作為rowkey--hbase-row-key "id" \##導入的列族--column-family "info" \--num-mappers 2 \--split-by?id
1、當選用自動創建表時,如果版本不兼容會報錯:20/03/24 13:51:24 INFO mapreduce.HBaseImportJob: Creating missing HBase table t_emp
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V1c73122ad2ebf7d4f491b2df746b1917.png?此時只能自己手動創建或者可以重新編譯sqoop源碼2、如果要多列族導入,只能多次運行命令,一次導入一個列族三、導出將Hdfs上的數據導出到關系型數據庫中3.1 SQL中表為空表時
bin/sqoop export \--connect 'jdbc:mysql://hadoop102:3306/test?useUnicode=true&characterEncoding=utf-8' \--username root \--password 123 \##導出的表名,需要自己提前創建好--table t_emp2 \--num-mappers 1 \##hdfs上導出的數據的路徑--export-dir /user/hive/warehouse/t_emp \##hdfs上數據的分隔符--input-fields-terminated-by?"\t"
3.2?表不為空表時如果插入的數據的主鍵和表中已有數據的主鍵沖突,那么會報錯Duplicate entry '5' for key 'PRIMARY'如果在SQL下,可以使用
INSERT INTO t_emp2 VALUE(5,'jack',30,3,1111) ON DUPLICATE KEY UPDATE NAME=VALUES(NAME),deptid=VALUES(deptid),empno=VALUES(empno);
意為指定當插入時,主鍵重復時時,對于重復的記錄,只做更新,不做插入!而用sqoop時,則可以啟用以下倆種模式

3.2.1updateonly模式

bin/sqoop export \--connect 'jdbc:mysql://hadoop103:3306/mydb?useUnicode=true&characterEncoding=utf-8' \--username root \--password 123456 \--table t_emp2 \--num-mappers 1 \--export-dir /hive/t_emp \--input-fields-terminated-by "\t" \--update-key id
利用 --update-key 字段? ,表示主鍵重復時會進行更新,但是主鍵不重復的時候,數據不會插入進來

3.2.2allowinsert模式

bin/sqoop export \--connect 'jdbc:mysql://hadoop103:3306/mydb?useUnicode=true&characterEncoding=utf-8' \--username root \--password 123456 \--table t_emp2 \--num-mappers 1 \--export-dir /hive/t_emp \--input-fields-terminated-by "\t" \--update-key id \--update-mode??allowinsert
表示主鍵重復時會進行更新,主鍵不重復的時候,數據也會插入進來3.3?如何查看導出命令的具體實現

3.3.1配置/etc/my.cnf

bin/sqoop export \--connect 'jdbc:mysql://hadoop103:3306/mydb?useUnicode=true&characterEncoding=utf-8' \--username root \--password 123456 \--table t_emp2 \--num-mappers 1 \--export-dir /hive/t_emp \--input-fields-terminated-by "\t" \--update-key id \--update-mode??allowinsert

3.3.2重啟mysql服務

3.3.3進入/var/lib/mysql,調用方法

sudo mysqlbinlog mysql-bin.000001
歡迎點贊+收藏+轉發朋友圈素質三連

f64478d89930cbe0a12cc15635f2d30a.png

文章不錯?點個【在看】吧!??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393795.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393795.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393795.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

黑客頻繁來襲 關注云計算的安全與保障

本文講的是 : 黑客頻繁來襲 關注云計算的安全與保障 , 【IT168 資訊】日前,虎嗅網遭受網絡攻擊的事件,引起業內關注。2月27日晚,虎嗅網中斷訪問,虎嗅網新浪官方微博隨即發表聲明,表示網站受到惡意攻擊,隨…

51nod 1100:斜率最大

題目鏈接 斜率最大點對橫坐標必相鄰 #include <bits/stdc.h> using namespace std; const int maxn 1e4 100;struct point {int x, y, pos;bool operator < (const point& rhs)const{return x<rhs.x;} } a[maxn]; double xielv(point a, point b) {return (a…

ik分詞和jieba分詞哪個好_Pubseg:一種單雙字串的BiLSTM中文分詞工具

中文分詞是中文自然語言處理中的重要的步驟&#xff0c;有一個更高精度的中文分詞模型會顯著提升文檔分類、情感預測、社交媒體處理等任務的效果[1]。Pubseg是基于BiLSTM中文分詞工具&#xff0c;基于ICWS2005PKU語料訓練集訓練而成&#xff0c;其優點在于在ICWS2005-PKU語料下…

freecodecamp_freeCodeCamp.org隱私權政策:問題與解答

freecodecampWe take your privacy seriously. And we give you full control over your data.我們把你的隱私當回事。 而且&#xff0c;我們可以完全控制您的數據。 freeCodeCamp doesnt show you ads or sell your data to anyone. Our nonprofit is instead supported by t…

leetcode1029. 兩地調度(貪心算法)

公司計劃面試 2N 人。第 i 人飛往 A 市的費用為 costs[i][0]&#xff0c;飛往 B 市的費用為 costs[i][1]。 返回將每個人都飛到某座城市的最低費用&#xff0c;要求每個城市都有 N 人抵達。 示例&#xff1a; 輸入&#xff1a;[[10,20],[30,200],[400,50],[30,20]] 輸出&…

第一階段沖刺4

1、我昨天的成就&#xff1a;看相關android開發視頻&#xff0c;上網尋找如何實現app動畫效果2、遇到什么困難&#xff1a;網上的用的很高級&#xff0c;看不懂別人如何實現的&#xff0c;搬過來實現不了。3、今天的任務&#xff1a;繼續實現動畫效果。 轉載于:https://www.cnb…

小白做淘客店鋪新玩法

微信淘客在朋友圈刷了將近兩個月。有些大咖賺得盆滿缽滿&#xff0c;有些小白交了不少學費。有人日入幾千幾萬&#xff0c;也有入不敷出。在此咖妹并沒有褒貶之意&#xff0c;只是提醒大家&#xff0c;不光淘客如此&#xff0c;其他項目亦是如此&#xff0c;別人能做成功的項目…

局域網中實現linux與windows文件共享,使用samba組建Linux與Windows局域網實現文件共享...

使用samba&#xff0c;可以組建Windows與Linux的局域網&#xff0c;Linux我用的是Fedora Core 6。Samba軟件的最新版本可以從網站免費獲得。共可下得5個rpm&#xff0c;分別為&#xff1a;samba-3.0.24-1.i386.rpm&#xff1a;服務器端&#xff1b;samba-client-3.0.24-1.i386.…

python sum函數numpy_如何用numba加速python?

我把寫好的markdown導入進來&#xff0c;但是沒想到知乎的排版如此感人。如果對知乎排版不滿想要看高清清爽版&#xff0c;請移步微信公眾號原文 如何用numba加速python&#xff1f;同時歡迎關注前言說道現在最流行的語言&#xff0c;就不得不提python。可是python雖然容易上手…

服務概述

Android中的服務Service&#xff0c;和Activity不同的是不能與用戶交互的&#xff0c;不能自己啟動&#xff0c;系統的后臺運行&#xff0c;當程序退出時&#xff0c;我們沒有顯示的調用停止服務&#xff0c;那么這個Service就沒有結束&#xff0c;它仍然在后臺運行。Service和…

[ZJOI2019]麻將

Luogu5279 , LOJ3042題意&#xff1a;給出初始13張手牌&#xff0c;求理論可以和牌的最小輪數的期望&#xff0e;定義和牌為&#xff1a;4句話1對亂將&#xff0c;不能有杠&#xff1b;七對 原始題解-shadowice 寫得很好的題解 首先分析期望&#xff1a;\(<--\)所有和牌的步…

二進制搜索算法_二進制搜索的一個扭曲故事

二進制搜索算法by Divya Godayal通過Divya Godayal 二進制搜索的一個扭曲故事 (A twisted tale of Binary Search) Awesome. That’s how I feel right now. Writing my first solo tech article.太棒了 那就是我現在的感覺。 寫我的第一篇個人技術文章。 I must say I have …

leetcode1221. 分割平衡字符串(貪心算法)

在一個「平衡字符串」中&#xff0c;‘L’ 和 ‘R’ 字符的數量是相同的。 給出一個平衡字符串 s&#xff0c;請你將它分割成盡可能多的平衡字符串。 返回可以通過分割得到的平衡字符串的最大數量。 示例 1&#xff1a; 輸入&#xff1a;s “RLRRLLRLRL” 輸出&#xff1a…

javascript中對變量類型的推斷

本文正式地址&#xff1a;http://www.xiabingbao.com/javascript/2015/07/04/javascript-type 在JavaScript中&#xff0c;有5種基本數據類型和1種復雜數據類型&#xff0c;基本數據類型有&#xff1a;Undefined, Null, Boolean, Number和String。復雜數據類型是Object。Object…

U盤流暢運行linux發行版,做各種linux發行版的啟動U盤方法

偶用tuxboot先移植gparted到16GB的U盤。然后裁剪N個iso 做成一個U盤安裝或體驗N個系統的多功能盤。選單曬出來&#xff1a;default vesamenu.c32timeout 3000prompt 0menu title Android RHEL6.4 Ubuntu13.04 GpartedMENU BACKGROUND Gsplash.pnglabel 001menu label GRUB4DOSk…

采樣次數不同平均值不一樣_不同的真石漆裝飾效果也是不一樣的

外墻真石漆真的是一件很好的產品&#xff0c;具有防火性、防水性、安全且環保、粘力強、永不褪色等特點&#xff0c;無疑是人們較好的選擇&#xff0c;在很早之前就已經逐漸的取代了瓷磚和其他石材在人們心中的位置。真石漆的品種不止一種&#xff0c;按照裝飾效果我們可以分為…

No-3.Linux 終端命令格式

Linux 終端命令格式 01. 終端命令格式 command [-options] [parameter]說明&#xff1a; command&#xff1a;命令名&#xff0c;相應功能的英文單詞或單詞的縮寫[-options]&#xff1a;選項&#xff0c;可用來對命令進行控制&#xff0c;也可以省略parameter&#xff1a;傳給命…

電子設計速成_Web設計速成課程:從一個非設計者到另一個

電子設計速成by Ali Spittel通過Ali Spittel Web設計速成課程&#xff1a;從一個非設計者到另一個 (A Web Design Crash Course: from one non-designer to another) I will preface this by saying that I’m not a professional designer. That being said, I like building…

android項目方法數超過65536的解決辦法

2019獨角獸企業重金招聘Python工程師標準>>> 當項目的總方法數超過65536個&#xff0c;運行在手機上&#xff0c;指不定會報找不到哪個文件的錯。 我把項目的PullRefresh框架切換為SmartRefresh框架出現了方法數超過65536。 此文只是做一下筆記&#xff0c;不多做解…

leetcode1046. 最后一塊石頭的重量(堆)

有一堆石頭&#xff0c;每塊石頭的重量都是正整數。 每一回合&#xff0c;從中選出兩塊 最重的 石頭&#xff0c;然后將它們一起粉碎。假設石頭的重量分別為 x 和 y&#xff0c;且 x < y。那么粉碎的可能結果如下&#xff1a; 如果 x y&#xff0c;那么兩塊石頭都會被完全…