数据从mysql中导入hive表中异常解决:

将数据从mysql中导入hive表中,出现异常ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf.

ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf

解决办法:
(1)在配置文件/etc/profile中添加环境变量如下:


export HIVE_HOME=/home/bxp/Documents/install/hadoop-cdh5.10.0/hive-1.1.0-cdh5.10.0
export HADOOP_HOME=/home/bxp/Documents/install/hadoop-cdh5.10.0/hadoop-2.6.0-cdh5.10.0
export HIVE_CONF_DIR=/home/bxp/Documents/install/hadoop-cdh5.10.0/hive-1.1.0-cdh5.10.0/conf
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*

(2)执行source /etc/profile使得新配置的环境变量生效。(此语句执行只在当前终端和重新启动的终端中生效,对于已经启动的终端不生效,需要关闭终端重启或者执行此语句才能生效)

### 数据迁移方法 #### 方法一:使用 Sqoop 实现 MySQLHive数据导入 通过 Sqoop 工具可以方便地将 MySQL 中的数据迁移到 Hive。其核心原理是先将数据MySQL 导入到 HDFS,然后再由 Hive 加载这些数据[^1]。 以下是基本命令结构: ```bash sqoop import \ --connect jdbc:mysql://<host>:<port>/<database> \ --username <username> \ --password <password> \ --table <table_name> \ --target-dir /path/to/hdfs/directory \ --hive-import \ --hive-database <hive_database_name> \ --hive-table <hive_table_name> ``` 此过程需要注意的是,在执行过程中可能会遇到依赖冲突等问题。例如,如果 Sqoop 缺少某些必要的库文件,则可能导致任务失败。一种常见的解决办法是将 Hive 所需的 jar 文件复制到 Sqoop 的 lib 目录下[^3]。 --- #### 方法二:批量导入多个并处理异常情况 当需要一次性导入多个时,可以通过编写 Shell 脚本来完成自动化操作。下面是一个典型的脚本示例: ```bash #!/bin/bash while read line do sqoop import \ --driver com.mysql.cj.jdbc.Driver \ --connect jdbc:mysql://<host>:<port>/<database>?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull \ --username <username> \ --password <password> \ --table "$line" \ --num-mappers 1 \ --hive-import \ --fields-terminated-by ',' \ --hive-overwrite \ --hive-database <hive_db_name> \ --hive-table ods_"$line" \ --null-non-string '\\N' \ --null-string '\\N' done < table_list_file.txt ``` 上述脚本能够逐行读取 `table_list_file.txt` 文件中的名,并依次调用 Sqoop 命令将其导入到指定的 Hive 中[^2]。 --- #### 注意事项 1. **字段分隔符设置** 如果 MySQLHive 的字段分隔方式不同,可以在 Sqoop 命令中通过参数 `--fields-terminated-by` 进行调整。 2. **空值处理** 对于非字符串类型的 NULL 值,默认情况下可能无法正确解析。因此建议显式定义 `--null-non-string` 和 `--null-string` 参数来统一示 NULL 值。 3. **权限管理** 确保运行 Sqoop 的用户具有足够的权限访问目标目录以及源数据库资源。 --- ### 总结 无论是单次还是批量导入场景,都可以借助 Sqoop 完成高效的数据迁移工作。同时针对可能出现的各种兼容性问题,提前做好环境配置和错误排查准备是非常重要的。 相关问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值