Hadoop学习

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完成,那么你应该创建表,否则使用外部表!

原文地址:https://www.cnblogs.com/tangbinghaochi/p/6709113.html