hdfs数据到hive中:
假设hdfs中已存在好了数据,路径是hdfs:/localhost:9000/user/user_w/hive_g2park/user_center_enterprise_info/*
1.提前(在hive中)准备好表, user_center_enterprise_info2 ,用于接收hdfs数据。
CREATE TABLE user_center_enterprise_info2 (
`id`string ,
`name` string
);
2.使用load data方式,加载数据,(已执行数据库选择命令 hive>use testdb;)
以下 相对/绝对 两种路径加载都行
hive>load data inpath 'hive_g2park/user_center_enterprise_info/*' into table user_center_enterprise_info2; hive>load data inpath '/user/user_w/hive_g2park/user_center_enterprise_info/*' into table user_center_enterprise_info2;
此时:
hdfs dfs -ls /user/user_w/hive_g2park/user_center_enterprise_info 发现里面内容没了
3.把数据从hive写回hdfs,让数据出现在hdfs
数据是从hdfs的 hive_g2park/user_center_enterprise_info 写到hive的,
现在写道 hive_g2park/user_center_enterprise_info3 路径下
-- 设置task数 set mapred.reduce.tasks = ; 结果数据平均分区(分区数等于task数);
set mapred.reduce.tasks = ; insert overwrite directory 'hive_g2park/user_center_enterprise_info3'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'field.delim'='\t',
'serialization.format'= '',
'serialization.null.format'=''
) STORED AS TEXTFILE
select * from user;
此时在hdfs下生成了新路径,
hive_g2park/user_center_enterprise_info3
并且有数据在其文件夹下
我的理解数据消失:
hive本质是map-reduce,即操作hdfs数据的方式有:spark,mr,pig,hive。
而hive只是在mr上包了一层,hive操作的时候,本质上,是直接操作的hdfs数据,也就是说hdfs数据load后,和hive数据是同一份数据
而且load data inpath '/user/hive/os.txt' into table os;这种方式loca数据到hive辣么快,应该是修改了指针而已,而不是复制了一份数据到hive。
hdfs数据到hive就隐藏不见,这么设计,就是为了避免数据在被hive改动的同时,又被mr直接操作hdfs数据,删除移动什么的,造成数据的不一致,所以数据丢hive里hdfs里就看不见了
sqoop export --connect jdbc:mysql://127.0.0.1:3306/parkdb --username xiaoming --password '' --table t_vip_user --export-dir 'hive_g2park/vip/*' --fields-terminated-by "\t"
附录:
sqoop的导出参数中,hive-import作用:本次导入到hive中
导入看得到hdfs文件夹范例
sqoop import --connect jdbc:mysql://localhost:3306/user --username h --password '123' \
--fields-terminated-by "\t" --table enterprise_info --delete-target-dir --target-dir 'hive_g2park/user_center_enterprise_info' \
--create-hive-table --hive-table g2park.user_center_enterprise_info
导入看不到hdfs文件夹范例
sqoop import --connect jdbc:mysql://localhost:3306/user --username h --password '123'
--fields-terminated-by "\t" --table enterprise_info --delete-target-dir
--hive-import --target-dir 'hive_g2park/user_center_enterprise_info'
--create-hive-table --hive-table g2park.user_center_enterprise_info