用sqoop匯入資料到HIVE和HDFS中
阿新 • • 發佈:2019-02-19
一:sqoop資料的匯入
1.使用sqoop將:mysql中的資料匯入到HDFS(直接匯入)
Step1、確定Mysql服務的正常開啟 service mysql status
Step2、在Mysql中建立一張表
mysql> create database company
mysql> create table staff(
id int(4) primary key not null auto_increment,
name varchar(255) not null,
sex varchar(255) not null);
mysql> insert into staff(name, sex) values('Thomas', 'Male');
Step3、使用Sqoop匯入資料到HDFS
1. 將mysql資料全部匯入hdfs
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \ = --m 1
--fields-terminated-by "\t"
//如果到這裡結束,則預設存放在hdfs上路徑為:/user/robot/staff/
,預設資料用,逗號隔開
2.查詢mysql總部分資料匯入hdfs中
$ bin/sqoop import
--connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company
--username root
--password 123456
--target-dir /user/company
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
--query 'select name,sex from staff where id >= 2 and $CONDITIONS;'
3.也算查詢匯入,匯入指定列
$ bin/sqoop import
--connect jdbc:mysql://hadoop-senior01.robot.com:3306/company
--username root
--password 123456
--target-dir /user/company
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
--columns id, sex
--table staff
4.細化篩選查詢匯入
$ bin/sqoop import
--connect jdbc:mysql://hadoop-senior01.robot.com:3306/company
--username root
--password 123456
--target-dir /user/company
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
--table staff
--where "id=3"
2使用sqoop將:mysql中的資料匯入到HIVE中
實際上先匯入到hdfs中,然後在hive中建立一個表,不需要提前建立表,然後把資料來源Load進表中。也可以提前建立表,匯入到指定的表中
bin/sqoop import\
--connect jdbc:mysql://hadoop102:3306/company \
--username root\
--password 123456\
--table staff\
--target-dir /user/company \
--hive-import\
--m 1\
--fields-terminated-by "\t"
--hive-table company.staff_hive(針對提前建立表,把資料匯入的指定表staff_hive中的,staff_hive是否建立無所謂。)
--hive-overwrite
過程詳解:
1.底層的mapreduce先將檔案上傳到hdfs對應的目錄,/user/company/下(在執行期間可以在這個目錄下看到上傳的檔案)
2.然後hive在根據資料來源建立對應的表
3.將hdfs的資料來源匯入load進hive的表中。(這時hdfs上的檔案因為匯入到hive表中,而沒有了。新的檔案在hive/warehouse目錄下)
4.用bin/hive select * from company.staff可以檢視資料,或者在user/hive/warehouse目錄下檢視。
二: Sqoop的資料匯出
1. 將資料從HDFS匯出到RDBMS資料庫
- 匯出前,目標表必須存在於目標資料庫中。
- 預設操作是從將檔案中的資料使用INSERT語句插入到表中
- 更新模式下,是生成UPDATE語句更新表資料
1.首先資料庫中根據hdfs表中的屬性建立空表
2.然後執行匯出命令
3.驗證表mysql命令列。
舉例:
0.資料是在HDFS 中“EMP/”目錄的emp_data檔案中。
1.根據hdfs中屬性建表
mysql> USE test;
mysql> CREATE TABLE employee (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20),
deg VARCHAR(20),
salary INT,
dept VARCHAR(10));
2.執行匯出命令
bin/sqoop export \
--connect jdbc:mysql://hadoop102/test\
--username root \
--password root \
--table employee \
--export-dir /user/hadoop/emp/
3,在mysql裡檢查:mysql>select * from employee;
四:sqoop對應的指令碼的檔案是***.opt檔案
使用opt檔案打包sqoop命令,然後執行 (sqoop指令碼命令引數必須分行)
Step1、建立一個.opt檔案
Step2、編寫sqoop指令碼
export
--connect
jdbc:mysql://hadoop-senior01.robot.com:3306/company
--username
root
--password
123456
--table
staff_mysql
--num-mappers
1
--export-dir
/user/hive/warehouse/company.db/staff_hive
--input-fields-terminated-by
"\t"
Step3、執行該指令碼
$ bin/sqoop --options-file opt/job_hffs2rdbms.opt