Sqoop安装配置及hive导入
2015-10-18 15:12
381 查看
Sqoop是一个用来将Hadoop(Hive、HBase)和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中。
官网地址:http://sqoop.apache.org/
一、安装配置
1.下载
最新版本1.4.6,下载http://mirrors.cnnic.cn/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
解压:tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop-1.4.6.bin
2.环境变量配置
vi ~/.bash_profile
export SQOOP_HOME=/home/hadoop/sqoop-1.4.6
export PATH=$SQOOP_HOME/bin:$PATH
使其生效source .bash_profile
3.配置Sqoop参数
复制conf/sqoop-env-template.sh 为:conf/sqoop-env.sh
将mysql的驱动jar(mysql-connector-java-5.1.34.jar)复制到lib目录下
二、hive导入测试
sqoop ##sqoop命令
import ##表示导入
--connect jdbc:mysql://ip:3306/sqoop ##告诉jdbc,连接mysql的url
--username root ##连接mysql的用户名
--password 123456 ##连接mysql的密码
--table test ##从mysql导出的表名称
--query ##查询语句
--columns ##指定列
--where ##条件
--hive-import ##指定为hive导入
--hive-table ##指定hive表,可以使用--target-dir //user/hive/warehouse/table_name 替换
--fields-terminated-by '\t' ##指定输出文件中的行的字段分隔符
-m 1 ##复制过程使用1个map作业
以上的命令中后面的##部分是注释,执行的时候需要删掉;另外,命令的所有内容不能换行,只能一行才能执行。以下操作类似。
准备数据
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user
命令会启动一个job mapreduce 程序导入数据
验证导入到hdfs上的数据:
hdfs dfs -ls /user/hadoop/t_user
hdfs dfs -cat /user/hadoop/t_user/part-m-0000*
注:
1)默认设置下导入到hdfs上的路径是: /user/{user.name}/tablename/(files),比如我的当前用户是hadoop,那么实际路径即: /user/hadoop/t_user/(files)。
如果要自定义路径需要增加参数:--warehouse-dir 比如:
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user --warehouse-dir /user/test/sqoop
2)若表是无主键表的导入需要增加参数 --split-by xxx 或者 -m 1
Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域分配到不同map中.每个map中再处理数据库中获取的一行一行的值,写入到HDFS中.同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域。
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user --split-by 字段名
2.导入数据到Hive
增加参数 –hive-import
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user --warehouse-dir /user/sqoop --hive-import --create-hive-table
验证导入到hive上的数据:
hive>show tables;
hive>select * from t_user;
3.把数据从hdfs导出到mysql中
复制表结构:create table t_user1 select * from t_user where 1=2;
sqoop export --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user1 --export-dir '/user/hadoop/t_user/part-m-00000' --fields-terminated-by ','
4.列出mysql数据库中的所有数据库
sqoop list-databases --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456
5.连接mysql并列出数据库中的表
sqoop list-tables --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456
6.将关系型数据的表结构复制到hive中,只是复制表的结构,表中的内容没有复制
sqoop create-hive-table --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --hive-table t_user1 --fields-terminated-by "\t" --lines-terminated-by "\n";
参数说明:
--fields-terminated-by "\0001" 是设置每列之间的分隔符,"\0001"是ASCII码中的1,它也是hive的默认行内分隔符, 而sqoop的默认行内分隔符为","
--lines-terminated-by "\n" 设置的是每行之间的分隔符,此处为换行符,也是默认的分隔符;
7.将数据从关系数据库导入文件到hive表中,--query 语句使用
--query 查询语句 如 "select * from t_user"
8.将数据从关系数据库导入文件到hive表中,--columns --where 语句使用
--columns 列名 如:"id,age,name"
--where 条件 如:"age > 40"
参考文章:
1.sqoop的安装与使用
2.Sqoop安装配置及演示
官网地址:http://sqoop.apache.org/
一、安装配置
1.下载
最新版本1.4.6,下载http://mirrors.cnnic.cn/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
解压:tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop-1.4.6.bin
2.环境变量配置
vi ~/.bash_profile
export SQOOP_HOME=/home/hadoop/sqoop-1.4.6
export PATH=$SQOOP_HOME/bin:$PATH
使其生效source .bash_profile
3.配置Sqoop参数
复制conf/sqoop-env-template.sh 为:conf/sqoop-env.sh
# Hadoop export HADOOP_PREFIX=/home/hadoop/hadoop-2.6.0 export HADOOP_HOME=${HADOOP_PREFIX} export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin export HADOOP_COMMON_HOME=${HADOOP_PREFIX} export HADOOP_HDFS_HOME=${HADOOP_PREFIX} export HADOOP_MAPRED_HOME=${HADOOP_PREFIX} export HADOOP_YARN_HOME=${HADOOP_PREFIX} # Native Path export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib/native" # Hadoop end #Hive export HIVE_HOME=/home/hadoop/hive-1.2.1 export PATH=$HIVE_HOME/bin:$PATH #HBase export HBASE_HOME=/home/hadoop/hbase-1.1.2 export PATH=$HBASE/bin:$PATH4.复制mysql驱动
将mysql的驱动jar(mysql-connector-java-5.1.34.jar)复制到lib目录下
二、hive导入测试
sqoop ##sqoop命令
import ##表示导入
--connect jdbc:mysql://ip:3306/sqoop ##告诉jdbc,连接mysql的url
--username root ##连接mysql的用户名
--password 123456 ##连接mysql的密码
--table test ##从mysql导出的表名称
--query ##查询语句
--columns ##指定列
--where ##条件
--hive-import ##指定为hive导入
--hive-table ##指定hive表,可以使用--target-dir //user/hive/warehouse/table_name 替换
--fields-terminated-by '\t' ##指定输出文件中的行的字段分隔符
-m 1 ##复制过程使用1个map作业
以上的命令中后面的##部分是注释,执行的时候需要删掉;另外,命令的所有内容不能换行,只能一行才能执行。以下操作类似。
准备数据
CREATE TABLE `t_user` ( `id` varchar(40) COLLATE utf8_bin NOT NULL, `name` varchar(40) COLLATE utf8_bin NOT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100)); INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));1.导入数据到HDFS
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user
命令会启动一个job mapreduce 程序导入数据
验证导入到hdfs上的数据:
hdfs dfs -ls /user/hadoop/t_user
hdfs dfs -cat /user/hadoop/t_user/part-m-0000*
注:
1)默认设置下导入到hdfs上的路径是: /user/{user.name}/tablename/(files),比如我的当前用户是hadoop,那么实际路径即: /user/hadoop/t_user/(files)。
如果要自定义路径需要增加参数:--warehouse-dir 比如:
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user --warehouse-dir /user/test/sqoop
2)若表是无主键表的导入需要增加参数 --split-by xxx 或者 -m 1
Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域分配到不同map中.每个map中再处理数据库中获取的一行一行的值,写入到HDFS中.同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域。
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user --split-by 字段名
2.导入数据到Hive
增加参数 –hive-import
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user --warehouse-dir /user/sqoop --hive-import --create-hive-table
验证导入到hive上的数据:
hive>show tables;
hive>select * from t_user;
3.把数据从hdfs导出到mysql中
复制表结构:create table t_user1 select * from t_user where 1=2;
sqoop export --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user1 --export-dir '/user/hadoop/t_user/part-m-00000' --fields-terminated-by ','
4.列出mysql数据库中的所有数据库
sqoop list-databases --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456
5.连接mysql并列出数据库中的表
sqoop list-tables --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456
6.将关系型数据的表结构复制到hive中,只是复制表的结构,表中的内容没有复制
sqoop create-hive-table --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --hive-table t_user1 --fields-terminated-by "\t" --lines-terminated-by "\n";
参数说明:
--fields-terminated-by "\0001" 是设置每列之间的分隔符,"\0001"是ASCII码中的1,它也是hive的默认行内分隔符, 而sqoop的默认行内分隔符为","
--lines-terminated-by "\n" 设置的是每行之间的分隔符,此处为换行符,也是默认的分隔符;
7.将数据从关系数据库导入文件到hive表中,--query 语句使用
--query 查询语句 如 "select * from t_user"
8.将数据从关系数据库导入文件到hive表中,--columns --where 语句使用
--columns 列名 如:"id,age,name"
--where 条件 如:"age > 40"
参考文章:
1.sqoop的安装与使用
2.Sqoop安装配置及演示
相关文章推荐
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- 分享Hive的一份胶片资料
- RedHat 5.8 安装Oracle 11gR2_Grid集群
- 单机版搭建Hadoop环境图文教程详解
- Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
- MySQL slave_net_timeout参数解决的一个集群问题案例
- hadoop常见错误以及处理方法详解
- Redis 集群搭建和简单使用教程
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- Windows Server 2003 下配置 MySQL 集群(Cluster)教程
- tomcat6_apache2.2_ajp 负载均衡加集群实战分享
- 用apache和tomcat搭建集群(负载均衡)
- Apache Hadoop版本详解
- Red Hat Linux,Apache2.0+Weblogic9.2负载均衡集群安装配置
- linux下搭建hadoop环境步骤分享
- hadoop client与datanode的通信协议分析