首先准備工具環境: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。。。