问题
sqoop拉取语句查询结果 解决
Hcatalogsqoop使用Hcatalog参数参数解释
问题在使用sqoop拉取数据到hive数据库时,如果hive中的表是parquet格式的分区表,那么虽然显示拉取数据成功,但查询数据时会出问题
sqoop拉取语句/opt/cloudera/parcels/CDH/bin/sqoop import --username xxxx --password 'xxx' --connect "jdbc:oracle:thin:@255.255.255.255:1521/db" --bindir /var/log/sqoop_bin/ --table oracle.tablename --hive-database hive_dbname --hive-table hive_tablename --as-parquetfile --fields-terminated-by ' 001' --lines-terminated-by 'n' --hive-drop-import-delims --null-string '\N' --null-non-string '\N' -m 1查询结果
ERROR: File 'hdfs://nameservice1/user/hive/warehouse/xxxxxx/part-m-00000' has an invalid version number: N1 This could be due to stale metadata. Try running "refresh xxxxx".解决
使用Hcatalog参数拉取数据
HcatalogHCatalog是一个用于Hadoop的表和存储管理服务,它使用户使用不同的数据处理工具Pig、MapReduce和Hive时更容易读写数据。HCatalog的“表抽象”向用户展示了Hadoop分布式文件系统(HDFS)中的数据相关的视图,并确保用户无需担心他们的数据被存储在哪里或以什么格式存储,例如:RCFile格式,文本文件,或SequenceFiles。
HCatalog支持以任何可以编写SerDe(序列化器-反序列化器)的格式读写文件。默认情况下,HCatalog支持RCFile、CSV、JSON和SequenceFile格式。要使用一个自定义的格式,你必须提供InputFormat和OutputFormat以及SerDe。
sqoop使用Hcatalog参数/opt/cloudera/parcels/CDH/bin/sqoop import --username xxxx --password 'xxx' --connect "jdbc:oracle:thin:@255.255.255.255:1521/db" --bindir /var/log/sqoop_bin/ --table oracle.tablename --hcatalog-database hive_dbname --hcatalog-table hive_tablename --hcatalog-partition-keys dt --hcatalog-partition-values '20220114' --fields-terminated-by ' 001' --lines-terminated-by 'n' --hive-drop-import-delims --null-string '\N' --null-non-string '\N' -m 1参数解释
--table 源库中的表名 --hcatalog-database Hive中的库名 --hcatalog-table Hive库中的表名,需要抽取的表 --hcatalog-partition-keys 分区字段 --hcatalog-partition-values 分区值 --fields-terminated-by 字段间的分隔符 --lines-terminated-by 表示行尾的字符 --hive-drop-import-delims 当导入到hive中时,去掉字符串字段中的'n'、'r'、' 1' --null-string 指定当字符串字段为空时的字符 --null-non-string 指定当非字符串字段为空时的字符



