您的位置:首页 > 数据库 > SQL

通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据

2016-06-29 19:13 876 查看
下文将重点说明通过Sqoop实现Mysql与HDFS互导数据,Mysql与Hbase,Oracle与Hbase的互导最后给出命令。
一、Mysql与HDFS互导数据
环境:

宿主机器操作系统为Win7,Mysql安装在宿主机上,宿主机地址为192.168.10.50

3台虚拟机操作系统为CentOS 位
三台虚拟机已成功安装Hadoop,并实现免密钥互访,配hosts为:
192.168.10.50 master
192.168.10.51 slave1
192.168.10.52 slave2
/etc/profile已配置好必备环境变量HADOOP_HOME,JAVA_HOME
实验在masternode上进行,已成功连接mysql
 
步骤一,下载安装包:

我安装的Hadoop版本是原生hadoop-2.5.2, hbase-0.98.19-hadoop2,sqoop-1.4.6.bin__hadoop-2.0.4-alpha,zookeeper-3.3.6,mysql-connector-java-5.1.6。

下载相关文件: http://apache.fayea.com/ sqoop-1.4.6.bin__hadoop-2.0.4-alpha依赖各种jar包如图所示:


,所以你需要下载hadoop- ***.tar.gz,解压缩后将hadoop-2.5.2/hadoop-core-.jar复制到sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib中。

另外,sqoop导入mysql数据运行过程中依赖mysql-connector-java-*.jar,所以你需要下载mysql-connector-java-*.jar并复制到sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib中。
 
步骤二,相关配置:
修改/etc/profile环境变量文件(su root之后,sudo gedit /etc/profile):
添加 export SQOOP_HOME=/home/grid/sqoop
在原有PATH后添加 :$SQOOP_HOME/bin
 
步骤三,在mysql中建立测试用户,测试表和数据,并测试sqoop连接mysql:
MySQL可以在Windows下也可在Linux下。
在masternode测试sqoop能否成功连接宿主机器上的mysql:
sqoop list-tables --connect jdbc:mysql://192.168.10.169/qyyx_test --username root --password ******

如下图:




如果能正确显示出sqoop表空间中的表,就说明sqoop已经可以成功连接mysql!
 
步骤四,将mysql中sqoop表空间的spread_log表的三行数据导入HDFS:
启动hadoop
start-all.sh
用jps验证启动是否成功
显示正在运行以下进程即为启动成功:
4266 HMaster

3505 ResourceManager

3337 SecondaryNameNode

10538 Main

14978 Jps

3888 QuorumPeerMain

3139 NameNode
 
从mysql导入数据,运行如下命令
sqoop import --connect jdbc:mysql://192.168.10.169:3306/qyyx_test --username root --password ***** --table spread_log  -m 1
 
验证导入数据是否成功:
若导入成功,运行 hadoop dfs -ls 将能看到根目录/user/g/下有以表名命名的文件夹spread_log
运行 hadoop dfs -ls /user/g/[b]spread_log[/b] 能看到该文件夹中包含文件:/user/gr/spread_log/part-m-00000
运行 hadoop dfs -cat /user/g/students/part-m-00000 就能看到该文件已经包含mysql中students表的三行数据:

 
步骤五,将HDFS中的数据导入Mysql的students表中:
首先将mysql的students表数据清空:
delete from students;
 
然后在masternode上执行导出数据命令:
sqoop export --connect jdbc:mysql://192.168.10.169:3306/qyyx_test --username root --password *****  --table spread_log --export-dir hdfs://master:9000/user/g/spread_log/part-m-00000
 
若成功,在mysql中会看到spread_log表中的数据恢复了!
 
注意:过程中可能会因为slave1的50010端口没打开而报错,需用root用户通过sudo ufw allow 50010命令打开端口!
 
二、Mysql与Hbase互导数据

将mysql的数据导入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的数据库和表名,hbase_tablename是要导成hbase的表名,key_col_name可以指定datatable中哪一列作为hbase新表的rowkey,col_fam_name是除rowkey之外的所有列的列族名

 注意:导入到Hbase数据时,Hbase表不需要提前创建。只需自定义表名以及列族名其对应的字段会自动创建。
例如:可通过如下命令将Mysql中的spread_log表导入到Hbase中:
/home/grid/sqoop/bin/sqoop import --connect jdbc:mysql://192.168.10.169/qyyx_test--username root --password ******  --table spread_log--hbase-create-table --hbase-table  phone2 --column-family info --hbase-row-key ID
成功执行后,可在hbase中用以下命令查看结果:

hbase(main):011:0> scan 'phone2'

 999                            column=info:BEF_URL, timestamp=1467222635082, value=http://192.168.0.74:8086/tuoxw/ticket

                                /index.htm?citeCode=000                                                                  

 999                            column=info:CORP_CODE, timestamp=1467222635082, value=dhzhlyzlwxfx                       

 999                            column=info:CREATE_BY, timestamp=1467222635082, value=zstzstb2                           

 999                            column=info:CREATE_TIME, timestamp=1467222635082, value=2016-05-20 11:42:18.0            

 999                            column=info:DELETED, timestamp=1467222635082, value=F                                    

 999                            column=info:IP, timestamp=1467222635082, value=192.168.10.192                            

 999                            column=info:MODIFY_BY, timestamp=1467222635082, value=zstzstb2                           

 999                            column=info:MODIFY_TIME, timestamp=1467222635082, value=2016-05-20 11:42:18.0            

 999                            column=info:NOW_URL, timestamp=1467222635082, value=http://192.168.0.74:8086/tuoxw/ticket

                                /index.htm?citeCode=000                                                                  

 999                            column=info:PROMOTER_ID, timestamp=1467222635082, value=3198                             

 999                            column=info:PROMOTER_NAME, timestamp=1467222635082, value=zstzstb                        

 999                            column=info:PROMOTER_TYPE, timestamp=1467222635082, value=3                              

 999                            column=info:RESELLER_ID, timestamp=1467222635082, value=3195                             

 999                            column=info:RESELLER_NAME, timestamp=1467222635082, value=zstzstb                        

 999                            column=info:SPREAK_CODE, timestamp=1467222635082, value=2016051533-dhzhlyzlwxfx-3-3198 

15 row(s) in 0.0900 seconds

 

三、Oracle与Hbase互导数据
将Oracle中的dept表(列为id,name,addr)导出至hbase中的dept表(行键为id,列族为deptinfo)
sqoop import --append --connect jdbc:oracle:thin:@192.168.0.133:1521:ORCL --username tuoxw_qyyx --password ****** --m 1 --table order_info --columns BUYER_ID,BUYER_NAME --hbase-create-table --hbase-table buyer_name --hbase-row-key BUYER_ID --column-family
buyer_info

注释:

1. 1521:orcl
表示端口和数据库sid--->SID是一个数据库的唯一标识符!是你在建立一个数据库时系统自动赋予的一个初始ID
2. --username 数据库名--password 数据库密码[b] --table 数据库表名 --columns 数据库表字段1,字段2,....,字段n
 --hbase-create-table --hbase-table HBase仓库表名 --hbase-row-key 列键(必须属于数据库字段之一)一般不可自定义 --column-family 列族

3.需要说明一点访问mysql或者oracle时候,只要有数据库的登录名和密码即可。不需要数据库所在的机器IP登录名和密码
[/b]


-------------------------------------------------------------------------------------
注:以上所有命令均实测通过,只需修改参数即可执行!

遇到困难:

1.MR执行Job作业被卡住无法执行

2.Jar缺失问题

  hadoop-2.5.2/share/hadoop/mapreduce目录下的jar包以及mysql-connector-java-5.1.6下的mysql-connector- 

  java-5.1.6-bin.jar拷贝到hbase-0.98.19-hadoop2/lib目录下

3.版本不兼容问题:mysql-connector-java-5.1.10-bin.jar版本小改用mysql-connector-java-5.1.39-bin.jar

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: