概述
一:简介
Sqoop是一款用于Hadoop(Hive)与关系型数据库(mysql等)间进行数据的传递的ETL工具。
二:安装sqoop
1. 安装sqoop
brew install sqoop
2. 配置环境变量
Hadoop, Hive, HBase and ZooKeeper must be installed and configured for Sqoop to work.
vi ~/.bash_profile
export ZOOKEEPER_HOME="/usr/local/Cellar/zookeeper/3.4.14"
export HADOOP_HOME=/usr/local/Cellar/hadoop/3.2.1/libexec
export HADOOP_ROOT_LOGGER=DEBUG,console
export PATH=$PATH:${HADOOP_HOME}/bin
export HBASE_HOME=/usr/local/Cellar/hbase/1.3.5/libexec
export PATH=$PATH:${HBASE_HOME}/bin
export HIVE_HOME=/usr/local/Cellar/hive/3.1.2
export PATH=$HIVE_HOME/bin:$PATH
export SQOOP_HOME=/usr/local/Cellar/sqoop/1.4.6_1/libexec
# /tmp/sqoop-<自己机器登录的用户名>/compile
export SQOOP_CLASSPATH=/tmp/sqoop-mengday/compile
export PATH=$PATH:$SQOOP_HOME/bin
export ACCUMULO_HOME=/var/lib/accumulo
source ~/.bash_profile
3.配置sqoop-env.sh
cd /usr/local/Cellar/sqoop/1.4.6_1/libexec/conf
cp sqoop-env-template.sh sqoop-env.sh
vim sqoop-env.sh
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=${HADOOP_HOME}
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
#set the path to where bin/hbase is available
export HBASE_HOME=${HBASE_HOME}
#Set the path to where bin/hive is available
export HIVE_HOME=${HIVE_HOME}
#Set the path for where zookeper config dir is
export ZOOCFGDIR=${ZOOKEEPER_HOME}/conf
4.查看安装版本 sqoop version
通过命令 sqoop version
查看版本可能会报以下警告Warning:
-
Warning: /usr/local/Cellar/sqoop/1.4.6_1/libexec/bin/…/…/accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
解决办法:配置环境变量 ACCUMULO_HOMEexport ACCUMULO_HOME=/var/lib/accumulo # 需要手动创建目录 sudo mkdir /var/lib/accumulo
-
Warning: /usr/local/Cellar/sqoop/1.4.6_1/libexec/…/hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.解决办法:注释/usr/local/Cellar/sqoop/1.4.6_1/libexec/bin/configure-sqoop中关于HCAT_HOME的代码检查,或略掉检查即可。
5. 下载mysql驱动jar到lib目录
curl -L 'http://www.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.42.tar.gz/from/http://mysql.he.net/' | tar xz
cp mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar /usr/local/Cellar/sqoop/1.4.6_1/libexec/lib/
6. 创建mysql数据库
create database sqoop;
CREATE TABLE `emp` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`deg` varchar(255) NOT NULL,
`salary` int(11) NOT NULL,
`dept` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `emp` VALUES (1, 'zhangsan', 'manager', 30000, 'AA');
INSERT INTO `emp` VALUES (2, 'lisi', 'programmer', 20000, 'AA');
INSERT INTO `emp` VALUES (3, 'wangwu', 'programmer', 15000, 'BB');
INSERT INTO `emp` VALUES (4, 'hund', 'programmer', 5000, 'CC');
三:将mysql导入到hadoop(hdfs)
1. 启动hadoop
如果DataNode没有启动起来就删除tmp目录,然后重新格式化
./sbin/start-all.sh
# 查看DataNode有没有启动起来
jps
2. 列举数据库中表
sqoop list-tables --connect jdbc:mysql://localhost:3306/sqoop --username root --password root123
3. 将mysql中的数据导入到hadoop(hdfs)中
sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root --password root123 --table emp
可能会遇到的问题:
- Class emp not found
上面命令将会在/tmp/sqoop-<用户名>/compile//目录下生成emp.class和emp.jav文件两个文件,
emp.java文件可能会生成在该目录下也有可能生成在用户目录下(如/Users/mengday/), 如果这三个文件没有在同一个目录将会出现Class emp not found问题。解决办法就是让这三个文件生成在同一个目录下。
# 解决方案一:通过 --bindir指定位置(此种方案没有解决掉我的问题)
# 此方案三个文件emp.jar、emp.class、emp.java都生成指定的目录,但是仍然报class emp not found
sqoop import --bindir /tmp/sqoop-mengday/compile --connect jdbc:mysql://localhost:3306/sqoop --username root --password root123 --table emp
# 解决方案二:配置 -Dmapreduce.job.user.classpath.first=true (此种方案没有解决掉我的问题)
sqoop import -Dmapreduce.job.user.classpath.first=true --connect jdbc:mysql://localhost:3306/sqoop --username root --password root123 --table emp
# 解决方案三(此方案有效):此方案需要执行两个命令:先代码生成jar, 然后通过jar来执行导入
# 生成jar,该命令会打印jar包位置 Writing jar file: /tmp/sqoop-mengday/compile/7b52bf6e21f2a6326d5515f78faad976/emp.jar
sqoop codegen --connect "jdbc:mysql://localhost:3306/sqoop" --username root --password root123 --table emp
# 通过指定.jar来导入
# 此命令会在/usr/local/Cellar/sqoop/1.4.6_1/libexec/conf/目录下生成emp, 目录下是生成的hdfs文件
# 此命令并没有将生成的_SUCCESS 和 part-m-00000 文件上传到hdfs中
sqoop import -fs local -jt local -libjars /tmp/sqoop-mengday/compile/7b52bf6e21f2a6326d5515f78faad976/emp.jar --connect "jdbc:mysql://localhost:3306/sqoop" --username root --password root123 --table emp
# 手动上传_SUCCESS 和 part-m-00000
hadoop fs -mkdir -p /tmp/
hadoop fs -copyFromLocal /usr/local/Cellar/sqoop/1.4.6_1/libexec/conf/emp/ /tmp
通过在 http://localhost:9870/ Utilities -> Browse the file system
# 通过hadoop命令查看每个part的内容
hadoop fs -cat /tmp/emp/part-m-00000
四:hdfs导入到hive
hdfs导入到hive 这里并没有使用到sqoop。
1. 启动metastore服务
hive --service metastore
2.1 手动创建
~ hive
hive> drop table if exists emp;
hive> create table emp(id int, name string, deg string, salary int, dept string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
2.2 自动生成与关系数据库表结构对应的hive表结构
# 此命令会一直报错 Could not initialize class org.apache.derby.jdbc.EmbeddedDriver
sqoop create-hive-table --connect jdbc:mysql://localhost:3306/sqoop --username root --password root123 --table emp --hive-table emp
- –table: 关系数据库名称
- –hive-table:hive对应的表名
- –hive-overwrite:覆盖掉在Hive表中已经存在的数据
3. 从hdfs中加载数据到hive中
hdfs://localhost:8020是在core-site.xml中fs.defaultFS配置的。
hive> load data inpath 'hdfs://localhost:8020/tmp/emp/part-m-00000' into table emp;
hive> select * from emp;
OK
1 zhangsan manager 30000 AA
2 lisi programmer 20000 AA
3 wangwu programmer 15000 BB
4 hund programmer 5000 CC
最后
以上就是大力毛巾为你收集整理的Mac安装Sqoop一:简介二:安装sqoop三:将mysql导入到hadoop(hdfs)四:hdfs导入到hive的全部内容,希望文章能够帮你解决Mac安装Sqoop一:简介二:安装sqoop三:将mysql导入到hadoop(hdfs)四:hdfs导入到hive所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复