首页 > 代码库 > hive\hadoop 常用命令

hive\hadoop 常用命令

—1——————

后台跑程序语句:

在shell下输入: nohup hive -f  aaa.sql >bbb.log 2>&1 &

然后把sql 的脚本导入服务器上:Transfer—Zmodem upload List

相关命令:jobs:可以看到运行的任务,;cat bbb.log 可以看到这个任务运行情况

====2================

文件传输:

打印列名语句:set hive.cli.print.header=true;

set hive.groupby.skewindata=http://www.mamicode.com/true; --如果是group by过程出现倾斜 应该设置为true,解决数据倾斜的万能钥匙

 

shell rz  文件从当前电脑传到 本地服务器;sz  文件从本地服务器下载到当前电脑

hadoop  put 文件从本地服务器传到集群 ;get 文件从集群传到本地服务器

ctrl +c 杀死当前程序

 

 

 显示表的hfs 路径:在hive环境下 输入:show create table user_app_current; 就会输出该表的hdfs路径

查看表的信息:describe extended tablenames

 

test  user_lastlogin_wide_parquet.txt

[zhangb@bi-01 ~]$ cd /home/zhangb

[zhangb@bi-01 ~]$ ls

test  user_lastlogin_wide_parquet.txt

[zhangb@bi-01 ~]$ load data local inpath ‘/home/zhangb/user_lastlogin_wide_parquet.txt‘ into table dw_user_lastlogin_wide_parquet partition(day=20151106);

=====3====================

hive命令:

退出hive 是用quit 命令

然后回到服务器里面的目录

然后上传文件 rz

最后就可以导入文件了 load 命令了

转换回去 本地电脑后 用先找回自己用的数据库

use zhangb  才能找回里面的表

cat 某个文件可以展示文件的内容 cat 后面要带具体的文件

tar cf  file.tar files 创建一个压缩包

tar xf file.tar 解压这个包

hive sql 中 having语句是对增加了一个变量后的新变量条件限制,如果没有这个语句,要对新变量进行条件限制的话,查询语句需要多写一层。

将文件从服务器里面导出到本地电脑 用sz 语句

在linux下 用 sz wd1/000000_0  即可在本地电脑的 文稿 里面找到文件

 

在hive状态下可以通过 在命令前面 加 感叹号 ! 来执行linux cls命令,而不用退出hive。

show databases like ‘u.*‘; 显示以u开头的数据库

set hive.cli.print.current.db=true; 可以展示当前数据库的名称 set hive.cli.print.current.db=false 可以消除

复制表的结构: create extenal table zhangb.emp2

                       like zhangb.emp

l                      location ‘/user/zhangb/data’;

 

hive 用于2张或者多张表关联是,用join语句,默认最后那张表是最大的那个表,所以要把最大的表放在后面。例如:a join b,on…..  则 b 表的范围要大于a表。但是他会用特殊标记指明哪个表是大表,这样不用再将大表写在join的后面了。

left outer join 是把左边的表全保留,右边的有就匹配,没有就显示为

full outer join 是全连接,只要一个表符合where条件就可以保留这行数据,另一个表若没有就用null代替

 

show partition 表名  #显示表的分区

show creat table  表名  #展示表的字段

describe table  表名  #

 

创建表: 

  create table  zhangb_check_age 

(imei_md5 string,gender string ,age string,education)

row format delimited  fields terminated by ‘|‘

stored as textfile;

 导入hdfs数据:

load data  inpath ‘/user/hive/warehouse/zhujx.db/zhangb/  /‘into table zhangb_check_age  ;

 

 

=============4==分组处理==================

 

分组后求每一组的前10个数据  :

  1

2

3

4

select  名称,时间, 数量

from

(select row_number() over(partition by 名称 order by 时间 asc) rn,名称,时间, 数量 from tb) a

where rn<3

 

 

 

分组求每组最大值:ow_number()over()

  select * from 

(

select t.*,row_number()over(partition by phone_model order by t.cnt desc) as rank

from (

select phone_model,substr(mac_colon,1,8) as mmac,count(substr(mac_colon,1,8)) as cnt from report_dw_mdp.dw_user_wide_table_gid where day=20161009 

 and phone_model in (‘MI 4LTE‘,‘A31’) and length(substr(mac_colon,1,8))>0

group by phone_model,substr(mac_colon,1,8) 

) t

)awhere a.rank=1;

 

 

 

 

普通连接如下

select table1.c1,table1.c2,table3.c3

from table1,table2,table3

where table1.id=table2.id and table2.id=table3.id

这样找到的是表1为主,通过表2找表3,若表3中能找到对应id行,则取出,否则忽视掉表1id对应的行

笛卡尔乘积 是返回两个表的行数之积的个数的记录。join 后面不加行就是笛卡尔乘积

hive中对数据的类型进行转化,用的是cast语句。例如:cast(id as float) <10000

union all 是对两个结构完全一样的数据进行合并 

 

 

--======5=======hadoop fs 学习 =============

1,hadoop fs -mkdir /user/ww1   #创建了一个路径 ww1

2,hadoop fs -ls /user

3.hadoop fs -ls /user/ww1

4\hadoop fs -put /home/zhangb/wd1/000000_0   /user/ww1   #把文件从本地服务器转移到hdfs系统中

5\在hive的界面,可以通过 直接dfs -** 方式来执行Hadoop fs 的命令,以分号结尾即可。

6\ hadoop fs -mkdir /user/hive/warehouse/zhujx.db/zhangb/data2 在集群里面创建一个文件夹

 7\put 数据  hadoop fs -put /home/zhujx/zhangb/1.txt /user/hive/warehouse/zhujx.db/zhangb/zy1 把数据从服务器里面传到集群的文件夹里面

8、hadoop fs -get sddr destaddr 将hadoop中的文件转移到服务器上

hive\hadoop 常用命令