Hadoop是一个框架,里面比较重要的是:
HDFS(分布式存储),核心功能,把数据分布的存储在各个服务器上,通过配置文件去配置各个服务器的地址
Hive(写HQL的地方),通过写sql去HDFS里面操作数据,增删改查等等,他是基于MapReduce的,MapReduce实现将任务拆分成大量独立任务,并可以同时运行(效率很高),但要写很长的代码,通过Hive 就能直接写sql去实现 MapReduce的功能。
HBase/Sqoop 这两个是为了很方便从传统数据库导数据进HDFS
20170526
Hadoop最主要的作用是进行数据分析,通俗的说,就是你其他地方有一个超级大的文件要进行分析(或者是数据库文件),然后上传到hadoop中,在通过写mapreduce去进行分析(在我的理解当中,这和直接写代码分析是一样的,只不过在hadoop中是分布式,效率会666),而hive也是一样,不过他只处理sql,所以进行分析的时候 先将数据导入到hive中,然后在写sql进行分析。
20170614
打包编译hadoop的mapreduce程序:
1.编译 javac WordCount.java
2.将程序打包成jar包 jar -cvf WordCount.jar ./WordCount*.class
3.执行 hadoop jar WordCount.jar org.apache.hadoop.examples.WordCount input output input是写入的地方,output是结果输出的地方
使用hdfs:hadoop fs -ls / 前面都要输入hadoop fs(忘记在哪配置的了)
hive的建表语句:
create table ticket(age INT,price FLOAT)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' ESCAPED BY '\' STORED AS TEXTFILE;
-- ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' 以tab为隔断符
-- STORED AS TEXTFILE 指定文件存储格式为“TEXTFILE”。
-- ESCAPED BY '\' "\"进行转义
采用外部表:
create external table person_ext(name STRING,age INT)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' ESCAPED BY '\' STORED AS TEXTFILE LOCATION '/tmp/ticket'
Hive中表与外部表的区别:
1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而表则不一样;
2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
那么,应该如何选择使用哪种表呢?在大多数情况没有太多的区别,因此选择只是个人喜好的问题。但是作为一个经验,如果所有处理都需要由Hive完成,那么你应该创建表,否则使用外部表!