① 如何在hive的shell中使用hadoop shell 和linux的命令
调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式。 所有的的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path。对HDFS文件系统,scheme是hdfs,对本地文件系统,scheme是file。其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme。一个HDFS文件或目录比如/parent/child可以表示成hdfs://namenode:namenodeport/parent/child,或者更简单的/parent/child(假设你配置文件中的默认值是namenode:namenodeport)。大多数FS Shell命令的行为和对应的Unix Shell命令类似,不同之处会在下面介绍各命令使用详情时指出。出错信息会输出到stderr,其他信息输出到stdout。 cat 使用方法:hadoop fs -cat URI [URI …] 将路径指定文件的内容输出到stdout。 示例: hadoop fs -cat hdfs://host1:port1/file1 hdfs://host2:port2/file2 hadoop fs -cat file:///file3 /user/hadoop/file4 返回值
② shell脚本里如何保存hive的结果
比如mysql xxx -e "select * from table"肢纯>file 写入文件
hive只要有终端命中早令都历培咐可以保存
③ 解决配置hive时出现不能加载自己修改的hive-site.xml等配置文件的问题。
配置hive时出现不能加载自己修改的hive-site.xml等配置文件的问题。发现它总是加载默认的配置文件。
解决:
hadoop的配置文件hadoop-env.sh中加上export HADOOP_CLASSPATH=$HIVE_HOVE/conf:$HADOOP_CLASSPATH
还有一个问题:运行其他hadoop子项目时总会出现迟好找不到类文件,必须把相关jar包拷贝到hadoop的lib目录下,导致其lib目录会越来越大。
至今不知道怎样将其他jar包加入到classpath中,网上说用export HADOOP_CLASSPATH=“”,但是好像不行
hive --config /root/etc/hive(注:/root/etc/hive是指hive-site.xml的存放目录)
HiveQL以分号结束。可以跨行。
在hive的shell上可以返旦亏使用dfs命令执行HDFS文件操作。
dfs -ls /user/hive/漏神warehouse;
hive语句必须以分号“;”结束。
不支持更新,索引和事务。
表名,列名不区分大小写。
在hive的shell上可以使用dfs命令执行HDFS文件的操作。>>dfs -ls /user/hive/warehouse/;
查看和设置临时变量:>>set fs.default.name[=hdfs://zhaoxiang:9000] ;
导入jar包: >>add jar hivejar.jar;
创建函数: >>create temporary function udfTest as 'com.cstore.udfExample';
【在pig中使用UDF,先用register语句注册jar文件,之后可以通过完全的java类名调用,或者用define语句为UDFding 指定一个名称:
register pigjar.jar;
define UPPER org.pigjar.string.UPPER();
B = foreach a generate UPPER($0); 】
可以在本地命令行运行hive的shell:
$ hive -e 'select * from userinfo' (执行hiveQL语句)
$ hive --config /hive-0.9.0/conf (重新载入新的配置文件)
$ hive --service hiveserver 50000(启动服务)
create table cite(citing int, cited int) row format delimited fields terminated by ',' stored as textfile; //sequencefle
load data (local) inpath 'cite75_99.txt' overwrite into table cite;//若不加local则默认为HDFS路径
select * from cite limit 10;
show tables;
describe cite;
select count(1)/count( ) from cite; //count(1)相当于SQL中的count( )
create table cite_count (cited int, count int);
insert overwrite table cite_count select cited , count(citing) from cite group by cited;
select * from cite_count where count > 10 limit 10;
drop table cite_count;
create table page_view(viewTime int, userid bigint,
page_url string, referrer_url string,
ip string comment 'ip address of user')
comment 'this id the page view table'
partitioned by (dt string, country string)//注意table中的列不能和partition中的列重合
clustered by (userid) into 32 buckets //桶
row format delimited
fields terminated by ','
collection items terminated by '\002'
map keys terminated by '\003'
lines terminated by '\n'
stored as textfile;
//取样
select avg(viewTime) from page_view tablesample(bucket 1 out of 3 [on id]);
//创建外部表,指定目录位置,删除外部表时会删除元数据,表中的数据需手动删除
create external table page_view(viewTime int, userid bigint,
page_url string, referrer_url string,
ip string comment 'ip address of user')
location 'path/to/existing/table/in/HDFS';
//修改表
alter table page_view rename to pv;
alter table pv add columns (newcol string);
alter table pv drop partition (dt='2009-09-01');
show tables 'page_.*';
load data local inpath 'page_view.txt'
overwrite into table page_view
partition (dt='2009-09-01',country='US');
在hive的shell上执行unix命令:命令前加感叹号(!),命令尾加分号(;).
hive> ! ls ;
hive> ! head hive_result;
//执行查询:
insert overwrite table query-result; //eg: insert overwrite table query_result select * from page_view where country='US';
insert overwrite (local) directory '/hdfs-dir(local-dir)/query_result' query;
select country , count(distinct userid) from page_view group by countey;
//子查询,只能在from子句中出现子查询
select teacher, max(class-num) from
(select teacher, count(classname) as class-num from classinfo group by teacher)subquery
group by teacher;
//连接
select pv. , choice. , f.friends from page_view pv
join user u on (pv.userid=u.id)
join friends-list f on (u.id=f.uid);
//多表插入
create table mutil1 as select id, name from userinfo;
create table mutil2 like mutil1;
from userinfo insert overwrite table mutil1 select id, name
insert overwrite table mutil2 select count(distint id),name group by name;
//创建视图
create view teacher_classnum as select teacher, count(classname) from classinfo group by teacher;
④ spark、hive、impala、hdfs的常用命令
对spark、hive、impala、hdfs的常用命令作了如下总结,欢迎大家补充!
1. Spark的使用:
以通过SecureCRT访问IP地址:10.10.234.198 为例进行说明:
先输入:ll //查询集群是否装有spark
>su - mr
>/home/mr/spark/bin/beeline -u "jdbc:hive2:/bigdata198:18000/" -n mr -p ""
>show databases; //显示其中数据库,例如
>use bigmax; //使用数据库bigmax
>show tables; //查询目录中所有的表
>desc formatted TableName; //显示表的详细信息,包括分区、字段、地址等信息
>desc TableName; //显示表中的字段和分区信息
>select count(*) from TableName; //显示表中数据数量,可以用来判断表是否为空
>drop table TableName; //删除表的信息
>drop bigmax //删除数据库bigmax
>describe database zxvmax //查询数据库zxvmax信息
创建一个表
第一步:
>create external table if not exists lte_Amaze //创建一个叫lte_Amaze的表
( //括号中每一行为表中的各个字段的名称和其所属的数据类型,并用空格隔开
DateTime String,
MilliSec int,
Network int,
eNodeBID int,
CID int,
IMSI String,
DataType int,
AoA int,
ServerRsrp int,
ServerRsrq int,
TA int,
Cqi0 Tinyint,
Cqi1 Tinyint //注意,最后一个字段结束后,没有逗号
)
partitioned by (p_date string, p_hour INT) //以p_date和p_hour作为分区
row format delimited fields terminated by ',' /*/*表中行结构是以逗号作为分隔符,与上边的表中字段以逗号结尾相一致*/
stored as textfile; //以文本格式进行保存
第二步:添加分区,指定分区的位置
>alter table lte_Amaze add partition (p_date='2015-01-27',p_hour=0) location'/lte/nds/mr/lte_nds_cdt_uedetail/p_date=2015-01-27/p_hour=0';
//添加lte_Amaze表中分区信息,进行赋值。
//并制定分区对应目录/lte/nds/mr下表lte_nds_cdt_uedetail中对应分区信息
第三步:察看添加的结果
>show partitions lte_Amaze; //显示表的分区信息
2. hdfs使用:
#su - hdfs //切换到hdfs用户下 、
#hadoop fs –ls ///查看进程
# cd /hdfs/bin //进入hdfs安装bin目录
>hadoop fs -ls /umtsd/cdt/ //查询/umtsd/cdt/文件目录
>hadoop fs -mkdir /umtsd/test //在/umtsd目录下创建test目录
>hadoop fs -put /home/data/u1002.csv /impala/data/u5002 //将home/data/u1002.csv这个文件put到hdfs文件目录上。put到hdfs上的数据文件以逗号“,”分隔符文件(csv),数据不论类型,直接是数据,没有双引号和单引号
>hadoop fs -rm /umtsd/test/test.txt //删除umtsd/test目录下的test.txt文件
>hadoop fs -cat /umtsd/test/test.txt //查看umtsd/test目录下的test.txt文件内容
3hive操作使用:
#su - mr //切换到mr用户下
#hive //进入hive查询操作界面
hive>show tables; //查询当前创建的所有表
hive>show databases; //查询当前创建的数据库
hive>describe table_name; {或者desc table_name}//查看表的字段的定义和分区信息,有明确区分(impala下该命令把分区信息以字段的形式显示出来,不怎么好区分)
hive> show partitions table_name; //查看表对应数据现有的分区信息,impala下没有该命令
hive> quit;//退出hive操作界面
hive>desc formatted table_name; 查看表结构,分隔符等信息
hive> alter table ceshi change id id int; 修改表的列数据类型 //将id数据类型修改为int 注意是两个id
hive> SHOW TABLES '.*s'; 按正条件(正则表达式)显示表,
[mr@aico ~]$ exit; 退出mr用户操作界面,到[root@aico]界面
impala操作使用:
#su - mr //切换到mr用户下
#cd impala/bin //进入impala安装bin目录
#/impala/bin> impala-shell.sh -i 10.10.234.166/localhost //进入impala查询操作界面
[10.10.234.166:21000] >show databases; //查询当前创建的数据库
[10.10.234.166:21000] >use database_name; //选择使用数据库,默认情况下是使用default数据库
[10.10.234.166:21000] > show tables; //查询当前数据库下创建的所有表
[10.10.234.166:21000] >describe table_name; //查看表的字段的定义,包括分区信息,没有明确区分
[10.10.234.166:21000] > describe formatted table_name; //查看表对应格式化信息,包括分区,所属数据库,创建用户,创建时间等详细信息。
[10.10.234.166:21000] >refresh table_name; //刷新一下,保证元数据是最新的
[10.10.234.166:21000] > alter TABLE U107 ADD PARTITION(reportDate="2013-09-27",rncid=487)LOCATION '/umts/cdt/
MREMITABLE/20130927/rncid=487' //添加分区信息,具体的表和数据的对应关系
[10.10.234.166:21000] > alter TABLE U100 drop PARTITION(reportDate="2013-09-25",rncid=487); //删除现有的分区,数据与表的关联
[10.10.234.166:21000] >quit; //退出impala操作界面
[mr@aicod bin]$ impala-shell; 得到welcome impala的信息,进入impala 查询操作界面
[aicod:21000] > 按两次tab键,查看可以用的命令
alter describe help profile shell values
connect drop history quit show version
create exit insert select unset with
desc explain load set use
⑤ hue/oozie 调度shell执行hive脚本
前面已经有篇文章介绍如何编译包含hive的spark-assembly.jar了,不清楚的可以翻看一下前面的文章。clouderamanager装好的spark,直接执行spark-shell进入命令行后,写入如下语句:valhiveContext=neworg.apache.spark.sql.hive.HiveContext(sc)你会发现没法执行通过,因为cm装的原生的spark是不支持sparkhql的,我们需要手动进行一些调整:第一步,将编译好的包含hive的JAR包上传到hdfs上配置的默认的spark的sharelib目录:/user/spark/share/lib第二步:在你要运行spark-shell脚本的节点上的/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/lib/spark/lib/目录下面,下载这个jar到这个目录:hadoopfs-gethdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar(具体路径替换成你自己的)桐燃。然后这个目录下面原来会有个软链接spark-assembly.jar指向的是spark-assembly-1.2.0-cdh5.3.0-hadoop2.5.0-cdh5.3.0.jar,我们把这个软链接删除掉重新创建一个同名的软链接:ln-sspark-assembly-with-hive-maven.jarspark-assembly.jar,指向我们刚下载下来的那个JAR包,这个JAR包会在启动spark-shell脚本时装载到driverprogram的classpath中去的,sparkContext也是在driver中创建出来的,所以需要将我们编译的JAR包替换掉原来的spark-assembly.jar包,这样在启动spark-shell的时候,包含hive的spark-assembly就被装载到classpath中去了。第三步:在/opt/cloudera/parcels/CDH/lib/spark/conf/目录下面创建一个hive-site.xml。/opt/cloudera/parcels/CDH/lib/spark/conf目录是默认的spark的配置目录,当然你可以修改默认配置目录的位置。hive-site.xml内容如下:hive.metastore.localfalsehive.metastore.uristhrift://n1:9083hive.metastore.client.socket.timeout300hive.metastore.warehouse.dir/user/hive/warehouse这个应该大家都懂的,总要让spark找到hive的元数据在哪吧,于是就有了上面一些配置。第四步:修改/opt/cloudera/parcels/CDH/lib/spark/conf/spark-defaults.conf,添加一个属性:spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar。这个是让每个executor下载到本地然后装载到自己的classpath下面去的,主要是用在yarn-cluster模式。local模式由于driver和executor是同一个进程所以没关系。以上完事之后,运行spark-shell,再输入:valhiveContext=neworg.apache.spark.sql.hive.HiveContext(sc)应该就没问题了。我们再执行一个语句验证一下是不是连接的我们御告指定的hive元数据库:hiveContext.sql("showtables").take(10)//取前十个表看看最后要重点说明一下这里的第二步第三步和第四步,如果是yarn-cluster模式的话,应该替换掉集群所有节点的spark-assembly.jar集群所有节点的sparkconf目录都需局拆虚要添加hive-site.xml,每个节点spark-defaults.conf都需要添加spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar。可以写个shell脚本来替换,不然手动一个一个节点去替换也是蛮累的。
⑥ hive shell的历史记录怎么清除
1、建立一个文件来存储常用命令,例如/root/history.txt,把常用命令当成文本写进去,每个命令占一行 2、在终端运行history -c,清除杂乱的历史记录 3、运行history -r /root/history.txt,把命令读进来作为当前bash的历史记录
⑦ hive shell 查看有哪些第三方jar包命令
显尺宽示表陵冲亮判姿
[java] view plain
hive> show tables;
OK
test
Time taken: 0.17 seconds, Fetched: 1 row(s)
2、创建表
[java] view plain
hive> create table test(key string);
OK
Time taken: 0.265 seconds
⑧ hive如何获取shell当天日期,并创建分区表
方毕碰法一:利用编辑器直接插入控制字符,培数颤以Vi为例。进入Vi:Shell代码收藏代码$visupply-20110101.txt在Vi命令模式下,键入:setlist,设置控制字符可见,成功后Vi会立配败即显示一个行结束标志$。填入Hive表中需要的每列数据,比如我这里需要创建一个...
⑨ hive beeline详解
Hive客户端工具后续将使用Beeline 替代HiveCLI ,并且后续版本也会废弃掉HiveCLI 客户端工卜世具,Beeline是 Hive 0.11版本引入的新命令行客户端工具,它是基于SQLLine CLI的正州JDBC客户端。
Beeline支持嵌入模式(embedded mode)和远程模式(remote mode)。在嵌入式模式下,运行嵌入式的Hive(类似Hive CLI),而远程模式可以通过Thrift连接到独立的HiveServer2进程上。从Hive 0.14版本开始,Beeline使用HiveServer2工作时,它也会从HiveServer2输出日志信息到STDERR。
-f 对应查询的脚本 script.q
--outputformat=csv2 以逗号分隔
--silent=true 静默方式执行,注意:输出文件的时候必须以静默方式运行,否则输出的型清肢文本中带有很多程序执行信息。
上述命令执行完成后发现输出的文件中仍然有许多空白行,好像没有参数控制,无奈之下又使用shell命令来过滤空白行。
通过下面任意一行命令来过滤空白行,最后输出结果正常。
⑩ hive分区的作用
Hive分区。
是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹,比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表的内容巨大,在查询时进行全表扫描耗费的资源非常多。那其实这个情况下,我们可以按照日期对数据表进行分区,不同日期的数据存放在不同的分区,在查询时只要指定分区字段的值就可以直接从该分区查找。
下面从用shell命令操作分区表和从hdfs文件系统查看分区表相结合的方式加深对分区表的认识。
第一,创建分区表并将本地文件中的数据加载到分区表中。
要注意的是:首先,创建分区表的时候,要通过关键字 partitioned by (name string)声明该表是分区表,并且是按照字段name进行分区,name值一致的所有记录存放在一个分区中,分区属性name的类型是string类型。当然,可以依据多个列进行分区,即对某个分区的数据按照某些列继续分区。
其次,向分区表导入数据的时候,要通过关键字partition(name=“jack”)显示声明数据要导入到表的哪个分区,这里表示要将数据导入到分区为name=jack的分区。
再次,这里要重点强调,所谓分区,这是将满足某些条件的记录打包,做个记号,在查询时提高效率,相当于按文件夹对文件进行分类,文件夹名可类比分区字段。这个分区字段形式上存在于数据表中,在查询时会显示到客户端上,但并不真正在存储在数据表文件中,是所谓伪列。所以,千万不要以为是对属性表中真正存在的列按照属性值的异同进行分区。比如上面的分区依据的列name并不真正的存在于数据表中,是我们为了方便管理添加的一个伪列,这个列的值也是我们人为规定的,不是从数据表中读取之后根据值的不同将其分区。我们并不能按照某个数据表中真实存在的列,如userid来分区