sqoop mysql 導入,導出java
1.安裝(前提hadoop啓動)mysql
[hadoop@h91 ~]$ tar -zxvf sqoop-1.3.0-cdh3u5.tar.gz sql
[hadoop@h91 hadoop-0.20.2-cdh3u5]$ cp hadoop-core-0.20.2-cdh3u5.jar /home/hadoop/sqoop-1.3.0-cdh3u5/lib/數據庫
[hadoop@h91 ~]$ cp ojdbc6.jar sqoop-1.3.0-cdh3u5/lib/bash
[hadoop@h91 ~]$ vi .bash_profile oracle
添加 app
export SQOOP_HOME=/home/hadoop/sqoop-1.3.0-cdh3u5ide
[hadoop@h91 ~]$ source .bash_profile 工具
2.oop
[hadoop@h91 ~]$ cd sqoop-1.3.0-cdh3u5/bin/
[hadoop@h91 bin]$ vi configure-sqoop
註釋掉hbase和zookeeper檢查
## Moved to be a runtime check in sqoop.
#if [ ! -d "${HBASE_HOME}" ]; then
# echo "Warning: $HBASE_HOME does not exist! HBase imports will fail."
# echo 'Please set $HBASE_HOME to the root of your HBase installation.'
#fi
3.mysql 受權
mysql> insert into mysql.user(Host,User,Password) values("localhost","sqoop",password("sqoop"));
mysql> flush privileges;
mysql> grant all privileges on *.* to 'sqoop'@'%' identified by 'sqoop' with grant option;
mysql> flush privileges;
mysql> use test;
mysql> create table sss (id int,name varchar(10));
mysql> insert into sss values(1,'zs');
mysql> insert into sss values(2,'ls');
4.測試sqoop可否鏈接上mysql
[hadoop@h91 mysql-connector-java-5.0.7]$ cp mysql-connector-java-5.0.7-bin.jar /home/hadoop/sqoop-1.3.0-cdh3u5/lib/
列出mysql數據庫中的全部數據庫
sqoop list-databases --connect jdbc:mysql://192.168.4.117:35577/ -username search -password search1223
[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop list-tables --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop
(顯示有sss表)
5.將mysql中的sqoop用戶下sss 導入到HDFS中
[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop import --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --table sss -m 1
(-m 爲並行 默認並行度爲4)
[hadoop@h91 hadoop-0.20.2-cdh3u5]$ bin/hadoop fs -ls
多出個sss目錄
[hadoop@h91 hadoop-0.20.2-cdh3u5]$ bin/hadoop fs -ls /user/hadoop/sss
[hadoop@h91 hadoop-0.20.2-cdh3u5]$ bin/hadoop fs -cat /user/hadoop/sss/part-m-00000
看到 sss表內容
1,zs
2,ls
6.從HDFS導入到mysql中
mysql> delete from sss;
[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop export --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --table sss --export-dir hdfs://h91:9000/user/hadoop/sss/part-m-00000
[root@o222 ~]# mysql -usqoop -p
mysql> use test
mysql> select * from sss;
表中的數據 又 回來了
7. 將mysql中的數據導入到hive中
sqoop import --connect jdbc:mysql://192.168.4.150:3306/test --direct --username sqoop --password sqoop --table ss --hive-table tb2 --hive-import -m 1
sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table users --username dyh --password 000000 --hive-table users --fields-terminated-by "\0001" --lines-terminated-by "\n";
參數說明:
--fields-terminated-by "\0001" 是設置每列之間的分隔符,"\0001"是ASCII碼中的1,它也是hive的默認行內分隔符, 而sqoop的默認行內分隔符爲","
--lines-terminated-by "\n" 設置的是每行之間的分隔符,此處爲換行符,也是默認的分隔符;
其中--table tb1是mysql sqoop數據庫中的一張表,--hive-table tb1是導入到hive中該表的名字,不須要事先建表。
關係型數據的表結構複製到hive中
8. 將hive中的數據導入到mysql中
sqoop export --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --direct --table ss --export-dir /newzqpic1/nutch/hive/warehouse/tb1/part-m-00000 --input-fields-terminated-by '\001'
將數據從關係數據庫導入文件到hive表中,--query 語句使用
sqoop import --append --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --query "select id from ss where \$CONDITIONS" -m 1 --target-dir /user/hive/warehouse/userinfos2 --fields-terminated-by ",";
將數據從關係數據庫導入文件到hive表中,--columns --where 語句使用
sqoop import --append --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --table ss --columns "id,age,name" --where "id > 3 and (age = 88 or age = 80)" -m 1 --target-dir /user/hive/warehouse/userinfos2 --fields-terminated-by ",";
注意:--target-dir /user/hive/warehouse/userinfos2 能夠用 --hive-import --hive-table userinfos2 進行替換
---------------------------------------------------------
配置 sqoop導入的
[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop export --connect jdbc:mysql://192.168.8.51:3306/test --username sqoop --password sqoop --table qqq --export-dir hdfs://h851:9000/user/hadoop/qqq.txt --input-fields-terminated-by '\t'
****--input-fields-terminated-by '\t'
聲明分隔符*******
----------------------------------------------------------
sqoop eval工具:
sqoop下 使用sql語句對 關係型數據庫進行操做
[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop eval --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --query "select * from sss"
[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop eval --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --query "insert into sss values(3,'ww')"
============================================================
sqoop oracle
1.測試sqoop 鏈接oracle
[hadoop@h91 ~]$ cp ojdbc6.jar sqoop-1.3.0-cdh3u5/lib/
[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop list-tables --connect jdbc:oracle:thin:@192.168.8.222:1521:TEST --username scott --password abc
2.導出到HDFS中
[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop import --connect jdbc:oracle:thin:@192.168.8.222:1521:TEST --username SCOTT --password abc --verbose -m 1 --table S1
(表名字 和 用戶名要大寫 )
HDFS 中查看
[hadoop@h91 hadoop-0.20.2-cdh3u5]$ bin/hadoop fs -cat /user/hadoop/S1/part-m-00000
101,zhangsan
102,lisi
版本問題:
hadoop-core-1.2.0.jar,hadoop/lib目錄下的commons-configuration-1.6.jar和mysql的jdbc鏈接的jar包一同複製到sqoop/lib目錄下,刪除,該目錄下面原有的hadoop-core-*.jar,避免版本衝突。