使用Sqoop将HDFS中CSV导入Avro表的命令咨询
从HDFS CSV导入到Hive Avro表的Sqoop命令
嘿,我来帮你搞定这个Sqoop导入的问题!针对你已经用Hue创建好Avro表avro_test,要把HDFS上的test.csv数据导入进去的场景,下面是对应的Sqoop命令,还有参数说明帮你理解每个部分的作用:
sqoop import \ --connect jdbc:hive2://<HIVE_SERVER_HOST>:<PORT>/<DATABASE_NAME> \ --username <YOUR_USERNAME> \ --password <YOUR_PASSWORD> \ --table avro_test \ --export-dir /path/to/your/test.csv \ --input-fields-terminated-by ',' \ --input-lines-terminated-by '\n' \ --input-null-string '\\N' \ --input-null-non-string '\\N' \ --direct
参数拆解说明:
--connect: 替换成你的Hive Server的JDBC连接地址,比如jdbc:hive2://hive-server:10000/default,其中default是你的数据库名--username/--password: 你的Hive认证账号密码,如果集群是无密码模式,可以直接去掉这两个参数--table: 就是你已经创建好的目标Avro表avro_test--export-dir: 填写HDFS上test.csv文件的完整路径,比如/user/yourname/test.csv--input-fields-terminated-by ',': 因为是CSV文件,字段分隔符用逗号,如果你的CSV用的是其他分隔符(比如制表符\t),记得改成对应的符号--input-lines-terminated-by '\n': 行分隔符,一般默认是换行符,不用改除非你的CSV有特殊换行格式--input-null-string/--input-null-non-string: 指定CSV中代表空值的字符串,Hive默认用\\N,如果你的CSV里空值是用空字符串或者其他标识,要对应调整--direct: 开启直接导入模式,能提升导入性能,适合大数据量的情况
额外注意事项:
- 一定要保证
test.csv的列顺序和avro_test表的列顺序完全一致,不然数据会错位导入 - 如果你的CSV文件第一行是表头,记得先把表头行从HDFS的文件里删掉,或者如果你的Sqoop版本支持
--skip-header参数,可以加上它来跳过表头 - 确认你有访问HDFS上
test.csv文件和Hive中avro_test表的权限,不然会报权限错误
内容的提问来源于stack exchange,提问作者user8143344
相关产品推荐
相关产品推荐

