我是靠谱客的博主 大力毛巾,最近开发中收集的这篇文章主要介绍Mac安装Sqoop一:简介二:安装sqoop三:将mysql导入到hadoop(hdfs)四:hdfs导入到hive,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一:简介

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

在这里插入图片描述

在这里插入图片描述

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部