通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据
通過Sqoop實(shí)現(xiàn)Mysql / Oracle 與HDFS / Hbase互導(dǎo)數(shù)據(jù)\
?
下文將重點(diǎn)說明通過Sqoop實(shí)現(xiàn)Mysql與HDFS互導(dǎo)數(shù)據(jù),Mysql與Hbase,Oracle與Hbase的互導(dǎo)最后給出命令。
一、Mysql與HDFS互導(dǎo)數(shù)據(jù)
環(huán)境:
宿主機(jī)器操作系統(tǒng)為Win7,Mysql安裝在宿主機(jī)上,宿主機(jī)地址為192.168.66.96
3臺虛擬機(jī)操作系統(tǒng)為Ubuntu-12.04.1-32位
三臺虛擬機(jī)已成功安裝hadoop,并實(shí)現(xiàn)免密鑰互訪,配hosts為:
192.168.66.91 masternode
192.168.66.92 slavenode1
192.168.66.93 slavenode2
/etc/profile已配置好必備環(huán)境變量HADOOP_HOME,JAVA_HOME
實(shí)驗在masternode上進(jìn)行,已成功連接mysql
步驟一,下載安裝包:
我安裝的Hadoop版本是原生hadoop-0.20.203.0,SQOOP不支持此版本,可使用CDH3版本hadoop,也可以通過拷貝相應(yīng)的包到sqoop-1.2.0-CDH3B4/lib下,依然可以使用。
下載相關(guān)文件:
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復(fù)制到sqoop-1.2.0-CDH3B4/lib中。
另外,sqoop導(dǎo)入mysql數(shù)據(jù)運(yùn)行過程中依賴mysql-connector-java-*.jar,所以你需要下載mysql-connector-java-*.jar并復(fù)制到sqoop-1.2.0-CDH3B4/lib中。
步驟二,相關(guān)配置:
修改SQOOP的文件configure-sqoop,注釋掉hbase和zookeeper檢查(除非你準(zhǔn)備使用HABASE等HADOOP上的組件) #if [ ! -d "${HBASE_HOME}" ]; then?
# echo “Error: $HBASE_HOME does not exist!”?
# echo ‘Please set $HBASE_HOME to the root of your HBase installation.’?
# exit 1?
#fi?
#if [ ! -d "${ZOOKEEPER_HOME}" ]; then?
# echo “Error: $ZOOKEEPER_HOME does not exist!”?
# echo ‘Please set $ZOOKEEPER_HOME to the root of your ZooKeeper installation.’?
# exit 1?
#fi
修改/etc/profile環(huán)境變量文件(su root之后,sudo gedit /etc/profile):
添加??export SQOOP_HOME=/home/grid/sqoop
在原有PATH后添加 :$SQOOP_HOME/bin
步驟三,在mysql中建立測試用戶,測試表和數(shù)據(jù),并測試sqoop連接mysql:
創(chuàng)建用戶sqoop并授權(quán):
grant all privileges on *.* to??'sqoop'@'%' identified by 'sqoop' with grant option;
創(chuàng)建表空間(schema)sqoop,并創(chuàng)建測試表:
create table students (
id int not null primary key,
name varchar(20),
age int)?
插入測試數(shù)據(jù):
insert into students values('10001','liyang',29);
insert into students values('10002','lion',28);
insert into students values('10003','leon',26);
在masternode測試sqoop能否成功連接宿主機(jī)器上的mysql:
sqoop list-tables --connect??jdbc:mysql://192.168.66.96:3306/sqoop --username sqoop --password sqoop
如果能正確顯示出sqoop表空間中的students表,就說明sqoop已經(jīng)可以成功連接mysql!
步驟四,將mysql中sqoop表空間的students表的三行數(shù)據(jù)導(dǎo)入HDFS:
啟動hadoop:
start-all.sh
用jps驗證啟動是否成功
顯示正在運(yùn)行以下進(jìn)程即為啟動成功:
2820 SecondaryNameNode
4539 Jps
2887 JobTracker
2595 NameNode
從mysql導(dǎo)入數(shù)據(jù),運(yùn)行如下命令:
sqoop import --connect??jdbc:mysql://192.168.66.96:3306/sqoop --username sqoop --password??sqoop??--table students -m 1
驗證導(dǎo)入數(shù)據(jù)是否成功:
若導(dǎo)入成功,運(yùn)行 hadoop dfs -ls 將能看到根目錄/user/grid/下有以表名命名的文件夾students
運(yùn)行 hadoop dfs -ls /user/grid/students 能看到該文件夾中包含文件:/user/grid/students/part-m-00000
運(yùn)行 hadoop dfs -cat /user/grid/students/part-m-00000 就能看到該文件已經(jīng)包含mysql中students表的三行數(shù)據(jù):
10001,liyang,29
10002,lion,28
10003,leon,26
步驟五,將HDFS中的數(shù)據(jù)導(dǎo)入Mysql的students表中:
首先將mysql的students表數(shù)據(jù)清空:
delete from students;
然后在masternode上執(zhí)行導(dǎo)出數(shù)據(jù)命令:
sqoop export --connect??jdbc:mysql://192.168.66.96:3306/sqoop --username sqoop --password sqoop --table students --export-dir hdfs://masternode:9000/user/grid/students/part-m-00000
若成功,在mysql中會看到students表中的數(shù)據(jù)恢復(fù)了!
注意:過程中可能會因為slavenode的50010端口沒打開而報錯,需用root用戶通過sudo ufw allow 50010命令打開端口!
二、Mysql與Hbase互導(dǎo)數(shù)據(jù)
將mysql的數(shù)據(jù)導(dǎo)入hbase的命令格式為:
sqoop import --connect jdbc:mysql://mysqlserver_IP/databaseName --username --password password --table datatable --hbase-create-table --hbase-table hbase_tablename --column-family col_fam_name --hbase-row-key key_col_name
其中 ,databaseName 和datatable 是mysql的數(shù)據(jù)庫和表名,hbase_tablename是要導(dǎo)成hbase的表名,key_col_name可以指定datatable中哪一列作 為hbase新表的rowkey,col_fam_name是除rowkey之外的所有列的列族名
例如:可通過如下命令將Mysql中的students表導(dǎo)入到Hbase中:
/home/grid/sqoop/bin/sqoop import --connect jdbc:mysql://192.168.66.96/sqoop --username sqoop --password liyang16 --table students --hbase-create-table --hbase-table students --column-family stuinfo --hbase-row-key id
成功執(zhí)行后,可在hbase中用以下命令查看結(jié)果:
hbase(main):011:0> scan 'students'? ??
ROW? ?? ?? ?? ?? ?? ? COLUMN+CELL? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
10001? ?? ?? ?? ?? ? column=stuinfo:age, timestamp=1356759994058, value=29? ?? ?
10001? ?? ?? ?? ?? ? column=stuinfo:name, timestamp=1356759994058, value=liyang?
10002? ?? ?? ?? ?? ? column=stuinfo:age, timestamp=1356760044478, value=28? ?? ?
10002? ?? ?? ?? ?? ? column=stuinfo:name, timestamp=1356760044478, value=lion? ?
10003? ?? ?? ?? ?? ? column=stuinfo:age, timestamp=1356760044478, value=26? ?? ?
10003? ?? ?? ?? ?? ? column=stuinfo:name, timestamp=1356760044478, value=leon? ?
3 row(s) in 0.0900 seconds
三、Oracle與Hbase互導(dǎo)數(shù)據(jù)
將Oracle中的dept表(列為id,name,addr)導(dǎo)出至hbase中的dept表(行鍵為id,列族為deptinfo)
sqoop import --append --connect jdbcracle:thin:@192.168.66.90:1521rcl --username test --password test --m 1 --table dept --columns id,name,addr --hbase-create-table --hbase-table dept --hbase-row-key id --column-family deptinfo
轉(zhuǎn)載于:https://www.cnblogs.com/seasonzone/p/4194476.html
總結(jié)
以上是生活随笔為你收集整理的通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读书笔记_java设计模式深入研究 第八
- 下一篇: JTree用法及JTree使用经验总结转