1、什么是Hadoop?什么是hive?
 

Hadoop:一个分布式系统基础架构,由Apache基金会开发,用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力告诉运算和存储。
Hadoop是项目的总称,主要是由分布式存储(HDFS)、分布式运算(MapReduce)组成。
HIVE是一个SQL解析引擎,它将SQL语句转译成M/RJOB 然后再Hadoop执行,与传统数据库完全不同,只是采用了同样的sql界面。

2、hadoop基本操作
 
 
2.1 查看指定目录下内容
Hadoop dfs –ls[文件目录]
如:hadoop dfs –ls /user/war/wangkai.pt
2.2 打开某个已存在的文件
Hadoop dfs –cat [file_path]
如:hadoop dfs –cat /user/war/wangkai.pt/test.txt
2.3 删除某个文件hadoop fs -rm hdfs://ns4/user/mart_vdp/app.db/app_vdp_jdb_jw_store_task_rules/store_task.txt
2.4 将本地文件存储至hadoop
Hadoop fs –put [本地地址]

3、hive基本操作
3.1 进入hive
登陆hadoop服务器后,输入 hive(这处理的有点慢,多等会)
显示成hive>
            >
后,即表示进入到hive中
3.2  hive基本操作
3.2.1 建表
语句:
CREATE [EXTERNAL] TABLE table_name
          (col_name data_rype,.....)
          [PATTITIONED BY  (col_name data_type)]
[ROW FORMAT DELIMITED            
[FIELDS TERMINATED BY '/t' ]      
[STORED AS TEXTFILE]
举例:
create table input_data_test  #表名
 (                 item_sku_id                      string   , #字段名称 字段类型
provider_code                   string   ,
delivery_center                 string  ,
stock                           bigint             )            
COMMETN '注释:XXXXX'       #表注释
 PARTITIONED BY ("ACTIVE")  #分区表字段(如果文件非常大的话,采用分区表可以快速过滤出按分区字段划分的数字)    
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '/t'    #字段之间是按照什么分割开的,这个例子是中按照tab键分开,还可以使用其他字符,如|分开 
STORED AS TEXTFILE;   #用哪种方式存储数据
3.2.2 查看库
语句:show  databases;
使用某一个库:use database;
3.2.3 查看表
语句:show tables   
可以使用模糊查询:show tables '*TMP*'
查看表有哪些分区: show partitions  table;
使用某一个表:use  table;
查看表字段:desc  table;  
3.2.4删除表
Drop table table_name;
3.2.5增加字段:
 alter table fdm_cep_ql_service_center_chain add columns (jd_account string);
3.2.6 导入数据
使用load命令将数据导入表中  load操作只是将数据复制/移动至Hive表对应的位置,不会对数据进行任何转换。
语句:
 load  data [local] inpath 'filepath' [overwrite] into table tablename [partition ]
举例:
load data local inpath '/python/app/task/data/gdm_m03_item_sku_da_06.txt' into  table gdm.gdm_m03_item_sku_da;(不带分区)
load data local inpath '/python/app/task/data/no_commission_rules.txt' into table app.app_vdp_nojdb_jw_sku_commission_rules;(带分区)
注:就是普通的insert,只不过数据来源是通过inpath路径找到的,insert之前保证表已建完,并且格式于建表语句要求的格式一致(换行、分隔符等)
3.2.7 查询
1、where 语句
    Where语句是个布尔表达式,例如:下面的查询语句只返回销售记录大于10,且归属地属于美国的销售代表。
   Select * from sales where amount >10 and region =’US’
注:hive不支持where子句中的IN、EXIST或子查询。
2、基于partition的查询
  一般select查询会扫描整个表(除非是为了抽样查询)。但是如果一个表使用partitioned by子句建表,查询就可以利用分区剪枝(input pruning)的特性,只扫描一个表中他关心的那一部分。
 Hive当前的是实现是。只有分区断言出现在离from子句最近的那个where子句中,才会取用分区剪枝。
例如,如果表app_vdp_base_jdbang_income_ma_sum使用date列分区,一下语句只会读取分区为‘2016-06-01’的数据。
Select *
from app_vdp_base_jdbang_income_ma_sum
 where tx_dt>=’2016-06-01’ and tx_dt <=’2016-06-31’
3、limit查询
Limit可以限制查询的记录数,查询的结果是随机选择的。下边的查询语句从t1表中随机查询5条记录:
Select * from t1 limit 5;
如果需要查询top多少的数据,则需要使用下面的语句:
查询销售记录最大的5个销售代表:
Select * from sales order by amount desc limit 5;
3.2.8  修改数据
Hive不支持update数据。
同时,hive导入数据的时候不会自动去重。
3.2.9 删除数据
Hive不支持条件删除,只能删除整个表后再重新建。
3.2.10 结果导出
在hive中查询出表数据后,如果数据太多,不好看,可以将数据导出来,然后在本地使用UE等工具查看。此命令在在linux下执行
格式:hive –e  ‘查询语句’ > 文件名.txt   #将查询语句查询出来的结果导出到txt中
例如:
hive - e 'select * from app.app_vdp_jdbang_jwang_xiadan_detail;' > wangsha1.txt