使用sqoop將mysql數據導入到hive中


首先准備工具環境:hadoop2.7+mysql5.7+sqoop1.4+hive3.1

准備一張數據庫表:

 

 

 

 

 

 接下來就可以操作了。。。

一、將MySQL數據導入到hdfs

首先我測試將zhaopin表中的前100條數據導出來,只要id、jobname、salarylevel三個字段。

再Hdfs上創建目錄

hadoop fs -mkdir -p /data/base  #用於存放數據

我們cd到sqoop目錄下執行命令

# \ 用於換行
bin/sqoop import \ --connect jdbc:mysql://172.18.96.151:3306/zhilian \  #連接數據庫 --username root \  #用戶名 --password 123456 \  #密碼 --query 'select id, jobname, salarylevel from zhaopin where $CONDITIONS LIMIT 100' \  #選取表的字段信息 --target-dir /data/base \  #上傳到Hdfs的目錄 --delete-target-dir \  #如果指定文件目錄存在則先刪除掉 --num-mappers 1 \  #使用1個map並行任務 --compress \  #啟動壓縮 --compression-codec org.apache.hadoop.io.compress.SnappyCodec \  #指定hadoop的codec方式 默認為gzip --direct \  #使用直接導入方式,優化導入速度 --fields-terminated-by '\t'  #字段之間通過空格分隔

 

 當你看到下面信息,就成了。。。

hadoop fs -ls -R /data/hbase  #查看目錄發現多了兩個文件,我們就成功將數據導入到了hdfs

二、將hfds數據導入到Hive

首先我們先在hive中創建一個表,我們直接在默認的庫中創建一個表。

drop table if exists default.hive_zhaopin_snappy ;  #如果存在就先刪除

create table default.hive_zhaopin_snappy(
id int,
jobname string,
salarylevel string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;  #這個地方是標記分割字段的,\t為空格分隔,否則會在導入的hive表中都是NULL.

類似於這樣

 

 接下來就是導入環節了,在hive下執行命令:

load data inpath '/data/base/' into table default.hive_zhaopin_snappy ;

 

 查看一下結果:

 

 返回hdfs查看發現,base目錄下原有的兩個文件少了一個,它被移動到hive的hdfs存儲中去了

 

 三、用sqoop直接將mysql數據導入hive中

首先我們再創建一張表

create table default.hive_zhaopin_jingji(
id int,
jobname string,
salarylevel string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;

然后cd到sqoop目錄下,執行命令

bin/sqoop import \
--connect jdbc:mysql://172.18.96.151:3306/zhilian \  #連接mysql必備
--username root \
--password 123456 \
--table zhaopin \  #要連接的表
--fields-terminated-by '\t' \  #字段通過空格分隔
--delete-target-dir \  #如果目錄存在就刪除
--num-mappers 1 \  #啟動一個Map並行任務
--hive-import \  #執行導入Hive
--hive-database default \  #導入到默認的default庫
--hive-table hive_zhaopin_jingji  #導入到hive_zhaopin_jingji表中

 

 

 執行玩這些,表示沒有報錯。

 查看了一下,數據都是對的。

倘若你的程序每次執行都會卡在job執行的時刻,那么應該是你的yarn-site.xml配置錯誤,仔細檢查一下確保字母沒有寫錯。

OVER。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM