Hive学习之路-多分隔符的使用

本文探讨Hive中多分隔符的使用方法及注意事项,包括两种主要接口MultiDelimitSerDe和RegexSerDe的详细配置,以及如何正确设置分隔符避免数据解析错误。

通常情况下,我们创建的都是单分隔符的Hive表,但是在实际业务环境中,多数情况下使用的是多分隔符,本篇文章我们探究下Hive多分隔的用法以及注意事项。

单分隔符示例:

create table hello(name string,code timestamp) 
row format delimited fields terminated by ','   
lines terminated by '\n'                        
stored as textfile;   

说明:上述示例中采用“,”作为列分隔,“\n”作为行分隔。


多分隔符使用:

第一种:使用org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe接口

CREATE EXTERNAL TABLE IF NOT EXISTS inform(
BINGLIJLXH	STRING	,
JILUNR	STRING	
)COMMENT '内容注释'
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ('field.delim'='\001$^#G','line.delim'='\002H-Q^V', 'serialization.format'='\001$^#G')
STORED AS TEXTFILE
location '/user/hive/temp'; 

说明:'\001$^#G','\002H-Q^V','\001$^#G'表示多分隔符,其中\001,\002表示Hive默认隐藏分隔符,是不可见字符,\001在vim里面表示^A,\002表示^B。

\001          ^A ,需要按照CTRL+V+A打出,不是shift+^+B

\002          ^B,需要按照CTRL+V+B打出,不是shift+^+B

 

sed -e 's/|/\^A$^#G/g' data.txt
sed -i 's/|/\^A$^#G/g' data.txt      替换但分隔符“|”为多分隔符“\001$^#G”,^需要转义

备注:-e表示只编辑不修改文件内容;-i表示修改文件内容。

第二种:使用org.apache.hadoop.hive.contrib.serde2.RegexSerDe接口(正则)

create external table inform(a string, b string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES ("input.regex" = "^(.*)\\$\\%\\#(.*)$")
location '/user/hive/temp';

分隔符使用不正确,会出现count数目不正确或者insert会插入到第一个字段中,其余字段中没有数据。

<think>好的,我需要解决用户的问题:如何在特定版本的Spark中加载org.apache.hive.jdbc.HiveDriver驱动程序。首先,我得回顾用户提供的引用内容,看看有没有相关的线索。 用户提到的引用[1]中出现了ClassNotFoundException,涉及MultiDelimitSerDe,这可能跟类路径有关。引用[2]提到Hive和Spark版本兼容性问题,这可能是一个关键点。引用[3]则是另一个类找不到的错误,可能和依赖库缺失有关。 首先,用户的问题是关于加载HiveDriver的,所以需要确认驱动是否存在。通常,Hive JDBC驱动包含在Hive的jar包中,比如hive-jdbc-*.jar。用户可能没有正确地将这个jar包包含到Spark的classpath中。接下来,版本兼容性很重要,用户需要确保Spark和Hive的版本匹配,如引用[2]中的表格所示。例如,如果用户使用的是Spark 3.0.x,那么Hive的版本应该是2.3.0。 然后,配置方法方面,用户可能需要通过--jars参数在启动Spark时添加相关的jar包,或者在spark-defaults.conf中设置spark.driver.extraClassPath和spark.executor.extraClassPath。此外,可能需要检查Hive的依赖是否与Spark版本冲突,特别是像hive-service、hive-metastore等组件。 另外,用户可能需要正确配置Hive的配置文件,如hive-site.xml,确保连接到正确的Hive元存储。还有,使用Maven或SBT构建项目时,需要添加对应的依赖项,例如: ``` <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>${hive.version}</version> </dependency> ``` 但需要注意版本冲突,可能需要排除某些传递依赖。 总结步骤应该是:检查版本兼容性,添加驱动jar包到classpath,配置必要的Spark属性,处理依赖冲突。同时,测试连接时使用Class.forName来确认驱动是否加载成功。 可能遗漏的点包括:是否所有的依赖项都正确添加,比如Hadoop的相关库,或者是否有个版本的jar包导致冲突。需要提醒用户注意这些方面,并提供检查方法,比如查看日志或使用spark-submit的详细输出。</think>为了在特定版本的Spark中加载$org.apache.hive.jdbc.HiveDriver$驱动程序,需按照以下步骤操作: --- ### 一、确认版本兼容性 1. **参考版本对照表** Hive与Spark的版本必须兼容。例如: - Spark 3.0.x ➔ Hive 2.3.x - Spark 2.4.x ➔ Hive 2.3.x - Spark 2.3.x ➔ Hive 2.0.x 若版本不匹配会导致类加载失败[^2]。 --- ### 二、添加Hive JDBC依赖 1. **通过Spark-Submit直接加载** 在启动Spark任务时通过`--jars`参数指定Hive JDBC驱动包: ```bash spark-submit --jars /path/to/hive-jdbc-<version>.jar,/path/to/hive-service-<version>.jar ``` 2. **配置Spark默认依赖** 在`spark-defaults.conf`中添加以下配置: ```properties spark.driver.extraClassPath /path/to/hive-jdbc-<version>.jar:/path/to/hive-service-<version>.jar spark.executor.extraClassPath /path/to/hive-jdbc-<version>.jar:/path/to/hive-service-<version>.jar ``` --- ### 三、验证驱动加载 1. **代码中显式注册驱动** 在Spark代码中调用: ```scala Class.forName("org.apache.hive.jdbc.HiveDriver") ``` 2. **检查日志输出** 若出现`NoClassDefFoundError`或`ClassNotFoundException`,需检查依赖路径是否包含以下JAR文件: - `hive-jdbc-<version>.jar` - `hive-service-<version>.jar` - `hive-common-<version>.jar` - `hive-metastore-<version>.jar` --- ### 四、处理依赖冲突 1. **使用Maven排除冲突包** 若通过Maven构建项目,需排除Hadoop或Hive的冲突依赖: ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>${hive.version}</version> <exclusions> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> </exclusion> </exclusions> </dependency> ``` --- ### 五、配置Hive连接参数 在`hive-site.xml`中指定元存储地址: ```xml <configuration> <property> <name>hive.metastore.uris</name> <value>thrift://<metastore_host>:9083</value> </property> </configuration> ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值