天天看點

hadoop插件sqoop使用案例

sqoop是hadoop項目中一個插件,可以把分布式檔案系統hdfs中内容導入到mysql指定表裡面,也可以把mysql中内容導入到hdfs檔案系統中進行後續操作。

測試環境說明:

hadoop版本:hadoop-0.20.2

sqoop版本:sqoop-1.2.0-CDH3B4

java版本:jdk1.7.0_67

mysql版本:5.1.65

特别說明:

因為我安裝的是hadoop-0.20.2版本,sqoop不支援這個版本,但是可以使用CDH3版本的hadoop,也可以通過copy相關檔案,達到目的。

下載下傳連結:

http://archive.cloudera.com/cdh/3/hadoop-0.20.2-CDH3B4.tar.gz

http://archive.cloudera.com/cdh/3/sqoop-1.2.0-CDH3B4.tar.gz

sqoop-1.2.0-CDH3B4依賴hadoop-core-0.20.2-CDH3B4.jar,是以你需要下載下傳hadoop- 0.20.2-CDH3B4.tar.gz,解壓縮後将hadoop-0.20.2-CDH3B4/hadoop-core-0.20.2- CDH3B4.jar複制到sqoop-1.2.0-CDH3B4/lib中。

另外,sqoop導入mysql資料運作過程中依賴mysql-connector-java-*.jar,是以你需要下載下傳mysql-connector-java-*.jar并複制到sqoop-1.2.0-CDH3B4/lib中

一 sqoop基本配置:

1)profile環境變量說明:

1

2

3

4

5

6

7

8

9

10

11

<code>export</code> <code>JAVA_HOME=</code><code>/usr/local/jdk1</code><code>.7.0_67/</code>

<code>export</code> <code>JRE_HOME=</code><code>/usr/local/jdk1</code><code>.7.0_67</code><code>/jre</code>

<code>export</code> <code>CLASSPATH=.:$JAVA_HOME</code><code>/lib</code><code>:$JAVA_HOME</code><code>/lib/dt</code><code>.jar:$JAVA_HOME</code><code>/lib/tools</code><code>.jar:$CLASSPATH</code>

<code>export</code> <code>PIG_HOME=</code><code>/usr/local/pig-0</code><code>.9.2</code>

<code>#告訴pig用戶端,本機hadoop配置檔案在什麼地方</code>

<code>export</code> <code>PIG_CLASSPATH=</code><code>/usr/local/hadoop-0</code><code>.20.2</code><code>/conf</code>

<code>export</code> <code>HBASE_HOME=</code><code>/usr/local/hbase-0</code><code>.90.5</code>

<code>export</code> <code>HADOOP_HOME=</code><code>/usr/local/hadoop-0</code><code>.20.2</code>

<code>export</code> <code>SQOOP_HOME=</code><code>/usr/local/sqoop-1</code><code>.2.0-CDH3B4</code>

<code>export</code> <code>HIVE_HOME=</code><code>/usr/local/hive-0</code><code>.8.1</code>

<code>export</code> <code>PATH=$JAVA_HOME</code><code>/bin</code><code>:$PATH:</code><code>/usr/local/bin</code><code>:$HADOOP_HOME</code><code>/bin</code><code>:$HBASE_HOME</code><code>/bin</code><code>:$PIG_HOME</code><code>/bin</code><code>:$PIG_CLASSPATHi:$HIVE_HOME</code><code>/bin</code><code>:$SQOOP_HOME</code><code>/bin</code><code>:$PATH</code>

2)由于本測試案例不需要sqoop檢查到hbase和zookeeper環境變量,是以要做一***釋:

編輯檔案/usr/local/sqoop-1.2.0-CDH3B4/bin/configure-sqoop,修改一下行,增加在注釋:

<code>#if [ ! -d "${HBASE_HOME}" ];then</code>

<code>#  echo "Error: $HBASE_HOME does not exist!"</code>

<code>#  echo 'Please set $HBASE_HOME to the root of your HBase installation.'</code>

<code>#  exit 1</code>

<code>#fi</code>

<code>#if [ ! -d "${ZOOKEEPER_HOME}" ]; then</code>

<code>#  echo "Error: $ZOOKEEPER_HOME does not exist!"</code>

<code>#  echo 'Please set $ZOOKEEPER_HOME to the root of your ZooKeeperinstallation.'</code>

3)建立sqoop庫,平且授權:

mysql&gt; GRANT ALL PRIVILEGES ON sqoop.* TO 'sqoop'@'172.16.41.%' identified by 'routon' with grant option;

mysql&gt; flush privileges;

4)建立students表,并且插入資料:

mysql&gt; create table students (id int not null primary key, name varchar(20), age int);

插入測試資料:

<code>insert into studentsvalues(</code><code>'001'</code><code>,</code><code>'abc'</code><code>,29);</code>

<code>insert into students values(</code><code>'002'</code><code>,</code><code>'def'</code><code>,28);</code>

<code>insert into students values(</code><code>'003'</code><code>,</code><code>'aaaa'</code><code>,26);</code>

<code>insert into students values(</code><code>'004'</code><code>,</code><code>'efsaz'</code><code>,60);</code>

<code>insert into students values(</code><code>'005'</code><code>,</code><code>'kiass'</code><code>,63);</code>

表中資料為:

mysql&gt; select * from students; 

+----+-------+------+

| id | name  | age  |

|  2 | def   |   28 |

|  3 | aaaa  |   26 |

|  4 | efsaz |   60 |

|  5 | kiass |   63 |

4 rows in set (0.00 sec)

5)在master裝置node1節點上測試sqoop能否成功連接配接遠端主機node29上的mysql,如何出現mysql庫中建立的表,就說明已經連接配接成功了。

<a href="http://s3.51cto.com/wyfs02/M01/4C/EC/wKioL1RHa16gTePuAAFl12i8EMM960.jpg" target="_blank"></a>

如圖所示,通過sqoop,可以檢視遠端測試mysql資料庫中students表;

6)将mysql資料庫中資料導入到hdfs檔案系統中:

<a href="http://s3.51cto.com/wyfs02/M01/4C/EA/wKiom1RHa-iw-z6ZAAGonEYmHME428.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/4C/EC/wKioL1RHbIPD5PagAAH0w3gK8ig189.jpg" target="_blank"></a>

說明mysql中國内容,已經導入到分布式檔案系統中!

7)hdfs檔案系統中檔案導入到mysql

說明:資料導入前,先清空students表中資料,使用指令:delete from students;

在master伺服器上執行sqoop指令,将hdfs檔案内容,導入到mysql資料中students表内!

<a href="http://s3.51cto.com/wyfs02/M00/4C/EC/wKioL1RHbbmR4BjTAAil9nd-y-w858.jpg" target="_blank"></a>

檢視mysql表:

測試完成!

本文轉自 shine_forever 51CTO部落格,原文連結:http://blog.51cto.com/shineforever/1566788