hdfs数据到hive中,以及hdfs数据隐身理解

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 = 1; 结果数据平均分区(分区数等于task数);
set mapred.reduce.tasks = 1;

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 '123' --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

 

posted @ 2018-08-08 18:50  君子笑而不语  阅读(5133)  评论(0编辑  收藏  举报