0
点赞
收藏
分享

微信扫一扫

Mac安装Sqoop


一:简介

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_HOME

export 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的代码检查,或略掉检查即可。

Mac安装Sqoop_sqoop

Mac安装Sqoop_sqoop_02

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

Mac安装Sqoop_sqoop_03

通过在 http://localhost:9870/ Utilities -> Browse the file system

Mac安装Sqoop_sqoop_04

# 通过hadoop命令查看每个part的内容
hadoop fs -cat /tmp/emp/part-m-00000

Mac安装Sqoop_sqoop_05

四: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_mysql_06


举报

相关推荐

sqoop 安装

Sqoop安装

linux安装sqoop

[Sqoop 安装配置]

sqoop安装和使用

sqoop的安装与使用

0 条评论