sqoop从mysql导入数据到hive

sqoop从mysql导入数据到hive

环境:

hadoop 2.7.2
hive 2.3.6
sqoop 1.4.7

安装Sqoop

sqoop-1.4.7下载地址

  1. 下载下来解压后配置
cd $SQOOP_HOME/conf
mv sqoop-env-template.sh sqoop-env.sh 
vi sqoop-env.sh
#根据你的实际情况配置
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/moudle/hadoop-2.7.2

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/moudle/hadoop-2.7.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/moudle/hive-1.2.1

#Set the path for where zookeper config dir is
#export ZOOCFGDIR=
export HIVE_CONF_DIR=/opt/moudle/hive-1.2.1/conf
  1. 然后弄一个mysql的驱动包(下载地址 5.1.47)放入sqoop的lib目录下

测试使用

为了方便你可以将sqoop_home/bin写入/etc/profile。后面sqoop命令都指的是sqoop安装目录下bin目录下的sqoop脚本

读取mysql数据库目录

# \表示换行  这样写主要是为了看得清晰点
# \后面不能有空格
# 任何语句和\之间都需要至少有一个空格
# 最后一行可以没有\ 
bin/sqoop list-databases \
--connect jdbc:mysql://hadoop001:3306 \
--username root   \
--password 123456

从Mysql导入数据到Hive

建表(hive端)

  • 方式一:create-hive-table语句

    sqoop create-hive-table \
    --connect jdbc:mysql://hadoop001:3306/learn \
    --username root \
    --password 123456 \
    --table user \  #mysql 的user表
    --hive-table zzy.user  # 自动在 hive 下 zzy库下创建一个对应的user表
    
  • 方式二:手动建一张和mysql字段完全匹配的hive表

    create table if not exists zzy.test2(
        user_id bigint,
        user_name string,
        trade_time string
    )
    row format delimited
    FIELDS TERMINATED by ',';
    

导入数据

bin/sqoop import \
--connect jdbc:mysql://hadoop001:3306/learn \
--username root --password 123456 \
--table user \
--hive-import \
--fields-terminated-by ',' \  #如果是自动建的表分隔符不用填。默认的分隔符是'\001'
--hive-table zzy.test2
如果不覆盖,多次添加的话会自动排序。
0	zzy	2019-09-18 00:00:00.0
0	zzy	2019-09-18 00:00:00.0
0	zzy	2019-09-18 00:00:00.0
1	zzy2	2019-09-20 15:25:17.0
1	zzy2	2019-09-20 15:25:17.0
1	zzy2	2019-09-20 15:25:17.0
2	zzy3	2019-09-10 15:25:32.0
2	zzy3	2019-09-10 15:25:32.0
2	zzy3	2019-09-10 15:25:32.0

别的导入方式可以参考官方文档,接下来说一下过程中遇到的问题。

Exception1:

Sqoop:Import failed:java.lang.ClassNotFoundException:org.apache.hadoop.hive.conf.HiveConf

解决办法:

在/etc/profile中添加下面一行
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*

Exception2:

INFO conf.HiveConf: Found configuration file null
WARN common.LogUtils: hive-site.xml not found on CLASSPATH

解决办法:

在sqoop-env.sh中添加export HIVE_CONF_DIR=$HIVE_HOME(这里填你自己的hive安装目录)/conf

Exception3:

main ERROR Could not register mbeans java.security.
AccessControlException: access denied
 ("javax.management.MBeanTrustPermission" "register")

解决办法:

进入你的jdk-->jre-->lib-->security下
vi java.policy

grant {
	# 在grant这个标签里添加下面这句
	permission javax.management.MBeanTrustPermission "register";
};

Exception4:

ERROR exec.DDLTask:java.lang.NoSuchMethodError:
com.fasterxml.jackson.databind.ObjectMapper.readerFor
(Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/ObjectReader;

解决办法:

删除你sqoop/lib下所有以jackson开头的jar包。
然后复制你hive/lib下所有以jackson开头的jar包到sqoop/lib下。

你可能感兴趣的:(大数据,sqoop,hive)