通过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包如图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201606/c00f005e58a8a352af78fc4113405ab5)
,所以你需要下载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 ******
如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201606/046b41965e312ee64399934b8c24d12b)
如果能正确显示出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.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
一、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
相关文章推荐
- mysql 重要的监控项:
- 《高性能MySQL》读书笔记-第1章 MySQL架构与历史
- MYSQL双主架构搭建方法
- django 模型生成sql(多对多)
- django1.9 使用 MySQLdb
- 安装PL/SQL Developer 遇到的问题及解决方法
- Oracle使用SQL Develop时报错
- MySQL读写分离及MMM高可用架构测试
- pip安装 MySQLDb 和 Django
- MySQL delete/truncate/drop的差别分析
- godaddy空间的sql server数据库没办法insert中文
- Django同步Mysql
- MySQL5.6监控表之INNODB_METRICS
- Oracle GoldenGate For SQL Server 未提交事务导致MSSQL日志不截断
- Linux Golang 操作MySql的资源泄漏
- MySQL数据库的优化--转自徐亮偉架构师之路
- PostgreSQL 磁盘使用大小监控
- MSSQL OPTION语句详解
- Mysql ./ibdata1 can't be opened in read-write mode
- Django、MySQL开发WEB项目防止中文乱码的有效方法