sqoop安装以及mysql->hive, hive->mysql过程,过程中遇到的问题

sqoop安装

1.下载sqoop安装包,解压( http://archive.cloudera.com/cdh5/cdh/5/)
挑选与hadoop,hive对应的版本。否则导数据会失败
2.拷贝MySQLDriver到sqoop目录的lib目录下
(之后还需导入包,在导数据部分说)
3.修改sqoop conf目录下sqoop-env.sh文件增加以下内容
具体HADOOP_HOME和HIVE_HOME因人而异,写自己环境的即可

‘’‘
export HADOOP_COMMON_HOME=/home/hadoop/software/app/hadoop-2.6.0-cdh5.7.0
export HADOOP_MAPRED_HOME=/home/hadoop/software/app/hadoop-2.6.0-cdh5.7.0
export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0

通过sqoop,MySQL->Hive

1.先将MySQL表建好,数据准备好
2.在Hive中建好表,表名与MySQL中一致,字段名与数据类型与MySQL中一一对应

‘’‘
**Hive表创建**
create table city_info(
city_id int,
city_name string,
area string
)row format delimited fields terminated by '\t';

‘’‘
**MySQL表创建**
CREATE TABLE `city_info` (
  `city_id` int(11) DEFAULT NULL,
  `city_name` varchar(255) DEFAULT NULL,
  `area` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.利用sqoop将MySQL中的数据导入到Hive表
(将sqoop写入环境变量后,可以调用sqoop -help可以查看导数据时的相关参数)
相关参数含义可通过sqoop -help进行了解

‘’‘
sqoop import \
--connect jdbc:mysql://localhost:3306/test06 \
--username root --password root \
--delete-target-dir \
--table city_info \
--hive-import \
--hive-table city_info \
--hive-overwrite \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--split-by city_id \
-m 2

注:导数据时,sqoop报错
第一个错:缺少java的json包,在网上下载org.json.jar后放到sqoop_home的lib目录下
第二个错:在有了org.json.jar以后,报错信息印象为缺少hive的某个jar包,于是根据报错信息去Hive安装目录的lib下去将相应jar包cp到sqoop的lib目录下
第三个错:在上述操作完成后,继续报错,缺少hive-shims的相关包,还是相同的操作,去hive的lib下将shims有关的包cp至sqoop的lib下。(在网上查资料时,有同学说时因为sqoop和hadoop版本不匹配的原因,但我摸索的这样搞以后也解决了问题。。。)
至此,导入数据成功。

通过sqoop,Hive->MySQL

与之前操作类似,将Hive表和MySQL表准备好,字段数据类型对应起来。MySQL->Hive import , Hive ->MySQL export

'''
sqoop export \
 --connect jdbc:mysql://localhost:3306/Hive_test \
 --username root \
 --password root \
 --table test \
 --export-dir /user/hive/warehouse/hive_test.db/test \
 --input-fields-terminated-by '\001' \
 -m 1

input-fields-terminated-by ‘\001’
这句话是因为Hive表默认分隔符‘\001’,缺少该句会报错。

猜你喜欢

转载自blog.csdn.net/qq_24363849/article/details/89048261
今日推荐