大數據數據導入導出工具Sqoop的安裝

郵箱:[email protected]

image
Sqoop是一款開源的工具,主要用於在Hadoop(Hive)與傳統的數據庫(mysql、postgresql…)間進行數據的傳遞,可以將一個關係型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中.
Sqoop項目開始於2009年,最早是作爲Hadoop的一個第三方模塊存在,後來爲了讓使用者能夠快速部署,也爲了讓開發人員能夠更快速的迭代開發,Sqoop獨立成爲一個Apache項目.
Sqoop2的最新版本是1.99.7。請注意,2與1不兼容,且特徵不完整,它並不打算用於生產部署.

sqoop原理

  • 將導入或導出命令翻譯成mapreduce程序來實現.
  • 在翻譯出的mapreduce中主要是對inputformat和outputformat進行定製.

sqoop安裝

安裝Sqoop的前提是已經具備Java和Hadoop的環境.

下載並解壓
  • 下載地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
  • 上傳安裝包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到虛擬機中
  • 解壓sqoop安裝包到指定目錄,如:
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
修改配置文件

Sqoop的配置文件與大多數大數據框架類似,在sqoop根目錄下的conf目錄中.

  • 複製配置文件
cp sqoop-env-template.sh sqoop-env.sh
  • 修改配置文件
sqoop依賴zookeeper,如果沒有安裝zookeeper可以先用默認的zookeeper  
vim sqoop-env.sh  
export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
export HIVE_HOME=/opt/module/hive
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
export ZOOCFGDIR=/opt/module/zookeeper-3.4.10
export HBASE_HOME=/opt/module/hbase

拷貝JDBC驅動

拷貝jdbc驅動包到sqoop的lib目錄下,如:

 cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/

驗證Sqoop

我們可以通過某一個command來驗證sqoop配置是否正確:

sqoop help

測試Sqoop是否能夠成功連接數據庫

sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
出現如下測試成功
19/07/27 18:53:34 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
19/07/27 18:53:34 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
19/07/27 18:53:34 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
information_schema
hive_metadata
mysql
test
test2

配置環境變量

列出mysql中有哪些數據庫

[hadoop@hadoop3 ~]$ sqoop list-databases \
> --connect jdbc:mysql://hadoop1:3306/ \
> --username root \
> --password root
Warning: /home/hadoop/apps/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /home/hadoop/apps/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
18/04/12 13:43:51 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
18/04/12 13:43:51 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
18/04/12 13:43:51 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
information_schema
hivedb
mysql
performance_schema
test
[hadoop@hadoop3 ~]$
列出MySQL中的某個數據庫有哪些數據表:
[hadoop@hadoop3 ~]$ sqoop list-tables \
> --connect jdbc:mysql://hadoop1:3306/mysql \
> --username root \
> --password root
Sqoop的數據導入
從RDBMS導入到HDFS中

下面的命令用於從MySQL數據庫服務器中的emp表導入HDFS:

bin/sqoop import   \
--connect jdbc:mysql://hdp-node-01:3306/test   \
--username root  \
--password root   \
--table emp   \
--m 1  
導入到HDFS指定目錄
bin/sqoop import \
--connect jdbc:mysql://hdp-node-01:3306/test \
--username root \
--password root \
--target-dir /queryresult \指定目錄
--fields-terminated-by ‘\001’ \指定分隔符
--table emp 
--split-by id
--m 1
RDBMS到HIVE
bin/sqoop import 
--connect jdbc:mysql://hdp-node-01:3306/test 
--username root 
--password root 
--table emp 
--hive-import  \增加導入hive聲明
--split-by id  
--m 1
導入表數據子集
bin/sqoop import \
--connect jdbc:mysql://hdp-node-01:3306/test \
--username root \
--password root \
--where "city ='sec-bad'" \子集條件聲明
--target-dir /wherequery \
--table emp_add \
 --m 1

Sqoop數據導出

數據是在HDFS 中“EMP/”目錄的emp_data文件中。所述emp_data如下:
1201, gopal,     manager, 50000, TP
1202, manisha,   preader, 50000, TP
1203, kalil,     php dev, 30000, AC
1204, prasanth,  php dev, 30000, AC
1205, kranthi,   admin,   20000, TP
1206, satish p,  grp des, 20000, GR


#### 首先需要手動創建mysql中的目標表
$ mysql
mysql> USE db;
mysql> CREATE TABLE employee (
   id INT NOT NULL PRIMARY KEY,
   name VARCHAR(20),
   deg VARCHAR(20),
   salary INT,
   dept VARCHAR(10));


然後執行導出命令  
bin/sqoop export \
--connect jdbc:mysql://hdp-node-01:3306/test \
--username root \
--password root \
--table employee \
--export-dir /user/hadoop/emp/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章