热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Sqoop将30W+MySQL数据导入Hive

本实验完成的是,使用Sqoop从MySQL导出数据到Hive.整体步骤分为:初始化MySQL的30W+数据安装配置Sqoop在Hive中初始化目标表Sqoop脚本实现导入1初始化M

本实验完成的是,使用 Sqoop 从 MySQL 导出数据到 Hive.

整体步骤分为:

  1. 初始化 MySQL 的 30W+ 数据
  2. 安装配置 Sqoop
  3. 在 Hive 中初始化目标表
  4. Sqoop 脚本实现导入

1 初始化 MySQL 的 30W+ 数据

MySQL 安装在本机 centOS 上面。
使用 MySQL 官网的表结构创建语句和 30W+ 数据导入语句,初始化数据。

MySQL 官网的数据结构与数据导入语句,都可以从他们的 github 项目上找到: https://github.com/datacharmer/test_db

2 安装配置 Sqoop

可以从这里下载到最新版本的 sqoop.
官方文档指出, sqoop 1.99 还有些 bug. 除非不得已要使用它的新特性,否则还是安装 sqoop 1.4.7.
我们遵从官网的建议,安装 sqoop 1.4.7.

下载地址: http://mirrors.shu.edu.cn/apache/sqoop/1.4.7/

安装和配置简单流程如下:

2.1 解压文件安装文件 -> 设置 .bash_profile 的环境变量 SQOOP_HOME -> 设置 .bash_profile 的环境变量 path 使其包含 SQOOP_HOME/bin

2.2 将 MySQLConnector.jar 放到 $SQOOP_HOME/lib 下面。
sqoop 要导出 MySQL 的数据,必须使用 MySQL JDBC Jar 包, MySQLConnector.jar。

2.3 配置 sqoop-env.sh
这份文件是用来指定 Hadoop HDFS, Hive , Hive Conf 等路径信息,尤为重要。
底下两个 bug 都是因为这个文件的配置错误而引起的,后面细说

配置详单如下:

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/hadoop/hadoop-2.8.2

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/hadoop/hadoop-2.8.2

#set the path to where bin/hbase is available
#export HBASE_HOME=

#Set the path to where bin/hive is available
export HIVE_HOME=/opt/hive/apache-hive-2.2.0-bin

#Set the path for where zookeper config dir is
#export ZOOCFGDIR=

针对 HBASE_HOME, ZOOCFGDIR 这里特意留空,暂不使用,用 # 注释掉了。

2.4 测试 sqoop 是否安装并能够使用: sqoop version
执行上述命令的时候,报错:

找不到主类 org.apache.sqoop.sqoop

解决方法如下:
参考:

http://blog.csdn.net/shantaodaoshik852/article/details/77266831

复制一份 sqoop.jar 到 $HADOOP_HOME/yarn下面即可:

cp /opt/sqoop/sqoop-1.4.6-cdh5.5.2/sqoop-1.4.6-cdh5.5.2.jar $HADOOP_HOME/share/hadoop/yarn/sqoop-1.4.6-cdh5.5.2.jar

其实 sqoop 1.4.7已经在安装目录下有 sqooop.1.4.7.jar文件了,因此不需要重新复制到yarn下。 所以建议大家安装 sqoop 1.4.7

3 在 Hive 中初始化目标表

具体怎么初始化目标表,这里不展开,参考前文即可: http://blog.csdn.net/wujiandao/article/details/79057089

因为创建语句比较复杂,将语句写入一个文件,以便随时更改,而不用反复在 hive cli 里面敲命令,可以节省不少时间。在 hive cli 里面,执行命令 source 你的创建表结构语句文件 即可。

例如

hive> source employee_table_schema.hql

这里 employee_table_schema.hql 就可以存放了创建表结构的语句

4 Sqoop 脚本实现导入

sqoop 的 import 语句比较长, 适合放一个脚本文件,方便修改。
最后使用 source 命令来执行这个脚本,如:

$>source employee_import_from_Mysql.sqp

employee_import_from_Mysql.sqp 编辑的就是导入 hive 的脚本:

sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username HiveAdmin \
--table employees \
--fields-terminated-by ';' \
--delete-target-dir \
--num-mappers 1 \
--hive-import \
--hive-database default \
--hive-table employees

这里我将‘\’ 列出来,如果不是用脚本文件执行导入操作,而是采用命令行格式,那么 ‘\’ 就必不可少了。 因此大家可以直观看到,作为脚本文件的便利性。

这里也参考了一篇文章,写的比较具体,也有原理性的解释:

https://www.cnblogs.com/xuyou551/p/7998846.html

在导入的时候,遇到 3 个问题:

4.1 Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/avro/LogicalType
4.2 ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.
4.3 INFO conf.HiveConf: Found configuration file null.
INFO hive.HiveImport: Exception in thread “main”
org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

4.1 针对 NoClassDefFoundError: org/apache/avro/LogicalType 的问题,解决方法:

问题不在sqoop 1.4.6 与1.4.7 上。而在安装的时候,必须安装 sqoop1.4.7_hadoop2.6.0版本。而不是纯净的sqoop1.4.7版本。可能这个版本里面少了对hadoop的支持。

也就是说, 必须选择编译包含了对 hadoop 支持库的 sqoop 版本。

4.2 Could not load org.apache.hadoop.hive.conf.HiveConf. 问题的解决方法:

ln -s $HIVE_HOME/lib/hive-exec-2.2.0.jar hive-exec-2.2.0.jar

解决方案在这里:就是找不到hive-exec.jar。还是google有用

Essentially the issue boiled down to Sqoop at runtime not finding Hive

libraries as well as executables.

— one way to fix this issue – create a link from sqoop lib to hive lib where hive-exec.jar is located in every node If we open sqoop

source code, the first thing class HiveConfig mentioned above does, is

it derives the Hive home from “/usr/bin/hive”. So, in HDP 2.5.3, sqoop

just needs to find the “hive-exec.jar” which in turn contains class

HiveConfig, which in turn will connect everything else. su root cd

/usr/hdp/2.5.3.0-37/sqoop/lib ln -s

/usr/hdp/2.5.3.0-37/hive/lib/hive-exec.jar hive-exec.jar

—another way to fix this issue, Usually the ‘HOME’ variables in sqoop script dictates how sqoop finds hive. we can add HIVE_HOME to

/usr/hdp/2.5.3.0/sqoop/bin/sqoop and make sure classpath for hive libs

exists at run time when sqoop executes the relevant import

4.3 INFO conf.HiveConf: Found configuration file null.

这个错误主要的原因是没有配好 Hive-site.xml 的路径。
这个路径是通过HIVE_CONF_DIR来指定的,如果没有指定则需要 HIVE_HOME 定义好。
正确的配置是 HIVE_CONF_DIR=/opt/hive/conf 一定要定义到 conf 文件夹。
而定义这个HIVE_CONF_DIR的变量文件是 SQOOP_HOME/conf/sqoop-env.sh。


推荐阅读
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • Jmeter对RabbitMQ压力测试
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Jmeter对RabbitMQ压力测试相关的知识,希望对你有一定的参考价值。Jm ... [详细]
  • struts2重点——ValueStack和OGNL
    一、值栈(ValueStack)1.实现类:OGNLValueStack2.对象栈:CompoundRoot( ... [详细]
  • 在Windows10系统上使用VMware创建CentOS虚拟机的详细步骤教程
    本文详细介绍了在Windows10系统上使用VMware创建CentOS虚拟机的步骤,包括准备条件、安装VMware、下载CentOS ISO文件、创建虚拟机并进行自定义配置、设置虚拟机的ISO与网络、进行安装和配置等。通过本文的指导,读者可以轻松地创建自己的CentOS虚拟机并进行相应的配置和操作。 ... [详细]
author-avatar
T岛T_387
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有