大數據模塊開發----結果導出

1. Apache Sqoopphp

Sqoop是Hadoop和關係數據庫服務器之間傳送數據的一種工具。它是用來從關係數據庫如:MySQL,Oracle到Hadoop的HDFS,並從Hadoop的文件系統導出數據到關係數據庫。由Apache軟件基金會提供。java

Sqoop:「SQL 到 Hadoop 和 Hadoop 到SQL」。
大數據模塊開發----結果導出
Sqoop工做機制是將導入或導出命令翻譯成mapreduce程序來實現。node

在翻譯出的mapreduce中主要是對inputformat和outputformat進行定製。mysql

sqoop安裝web

安裝sqoop的前提是已經具有java和hadoop的環境。sql

最新穩定版: 1.4.6數據庫

配置文件修改:服務器

cd $SQOOP_HOME/confapp

mv sqoop-env-template.sh sqoop-env.shide

vi sqoop-env.sh

export HADOOP_COMMON_HOME=/root/apps/hadoop/

export HADOOP_MAPRED_HOME=/root/apps/hadoop/

export HIVE_HOME=/root/apps/hive

加入mysql的jdbc驅動包

cp  /hive/lib/mysql-connector-java-5.1.28.jar   $SQOOP_HOME/lib/

驗證啓動

bin/sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password hadoop

本命令會列出全部mysql的數據庫。

到這裏,整個Sqoop安裝工做完成。

2. Sqoop導入

「導入工具」導入單個表從RDBMS到HDFS。表中的每一行被視爲HDFS的記錄。全部記錄都存儲爲文本文件的文本數據(或者Avro、sequence文件等二進制數據)。

下面的語法用於將數據導入HDFS。

$ sqoop import (generic-args) (import-args)

Sqoop測試表數據

在mysql中建立數據庫userdb,而後執行參考資料中的sql腳本:

建立三張表: emp  emp_add emp_conn。  

2.1. 導入mysql表數據到HDFS

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

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--target-dir /sqoopresult \

--table emp --m 1

其中--target-dir能夠用來指定導出數據存放至HDFS的目錄;

mysql jdbc url 請使用 ip 地址。

爲了驗證在HDFS導入的數據,請使用如下命令查看導入的數據:

hdfs dfs -cat /sqoopresult/part-m-00000

能夠看出它會用逗號,分隔emp表的數據和字段。

1201,gopal,manager,50000,TP

1202,manisha,Proof reader,50000,TP

1203,khalil,php dev,30000,AC

1204,prasanth,php dev,30000,AC

1205,kranthi,admin,20000,TP

2.2. 導入mysql表數據到HIVE

將關係型數據的表結構複製到hive中

bin/sqoop create-hive-table \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--table emp_add \

--username root \

--password hadoop \

--hive-table test.emp_add_sp

其中:

--table emp_add爲mysql中的數據庫sqoopdb中的表。   

--hive-table emp_add_sp 爲hive中新建的表名稱。

從關係數據庫導入文件到hive中

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--table emp_add \

--hive-table test.emp_add_sp \

--hive-import \

--m 1

2.3. 導入表數據子集

--where        能夠指定從關係數據庫導入數據時的查詢條件。它執行在各自的數據庫服務器相應的SQL查詢,並將結果存儲在HDFS的目標目錄。

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--where "city ='sec-bad'" \

--target-dir /wherequery \

--table emp_add --m 1

複雜查詢條件:

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--target-dir /wherequery12 \

--query 'select id,name,deg from emp WHERE  id>1203 and $CONDITIONS' \

--split-by id \

--fields-terminated-by '\t' \

--m 1

2.4. 增量導入

增量導入是僅導入新添加的表中的行的技術。

--check-column (col)        用來做爲判斷的列名,如id

--incremental (mode)        append:追加,好比對大於last-value指定的值以後的記錄進行追加導入。lastmodified:最後的修改時間,追加last-value指定的日期以後的記錄

--last-value (value)        指定自從上次導入後列的最大值(大於該指定的值),也能夠本身設定某一值

假設新添加的數據轉換成emp表以下:

1206, satish p, grp des, 20000, GR

下面的命令用於在EMP表執行增量導入:

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--table emp --m 1 \

--incremental append \

--check-column id \

--last-value 1205

3. Sqoop導出

將數據從HDFS導出到RDBMS數據庫導出前,目標表必須存在於目標數據庫中。

默認操做是從將文件中的數據使用INSERT語句插入到表中,更新模式下,是生成UPDATE語句更新表數據。

如下是export命令語法:

$ sqoop export (generic-args) (export-args)

3.1. 導出HDFS數據到mysql

數據是在HDFS 中「emp/」目錄的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,satishp,grpdes,20000,GR

首先須要手動建立mysql中的目標表:

mysql> USE sqoopdb;

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://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--table employee \

--export-dir /emp/emp_data

還能夠用下面命令指定輸入文件的分隔符

--input-fields-terminated-by '\t'
大數據模塊開發----結果導出
若是運行報錯以下:

則須要把localhost更改成ip或者域名。

示例以下,將點擊流模型表導出到mysql

qoop export \

--connect jdbc:mysql://hdp-node-01:3306/webdb --username root --password root  \

--table click_stream_visit  \

--export-dir /user/hive/warehouse/dw_click.db/click_stream_visit/datestr=2013-09-18 \

--input-fields-terminated-by '\001'

<更多表的導出,可參照修改>

相關文章
相關標籤/搜索