hive常通用命令
Hive常用的SQL命令操作

Hive提供了很多的函数,可以在命令行下show functions罗列所有的函数,你会发现这些函数名与mysql的很相近,绝大多数相同的,可通过describe function functionName 查看函数使用方法。
hive支持的数据类型很简单就INT(4 byte integer),BIGINT(8 byte integer),FLOAT(single precision),DOUBLE(double precision),BOOLEAN,STRING等原子类型,连日期时间类型也不支持,但通过to_date、unix_timestamp、date_diff、date_add、date_sub等函数就能完成mysql 同样的时间日期复杂操作。
如下示例:select * from tablename where to_date(cz_time) > to_date('2050-12-31');select * from tablename where unix_timestamp(cz_time) > unix_timestamp('2050-12-3115:32:28');分区hive与mysql分区有些区别,mysql分区是用表结构中的字段来分区(range,list,hash等),而hive不同,他需要手工指定分区列,这个列是独立于表结构,但属于表中一列,在加载数据时手动指定分区。
创建表hive> CREATE TABLE pokes (foo INT, bar STRING COMMENT 'This is bar');创建表并创建索引字段dshive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);显示所有表hive> SHOW TABLES;按正条件(正则表达式)显示表,hive> SHOW TABLES '.*s';表添加一列hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);添加一列并增加列字段注释hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');更改表名hive> ALTER TABLE events RENAME TO 3koobecaf;删除列hive> DROP TABLE pokes;元数据存储将本地文件中的数据加载到表中hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;加载本地数据,同时给定分区信息hive> LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');加载DFS数据,同时给定分区信息hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');The above command will load data from an HDFS file/directory to the table. Note that loading data from HDFS will result in moving the file/directory. As a result, the operation is almost instantaneous.SQL 操作按先件查询hive> SELECT a.foo FROM invites a WHERE a.ds='';将查询数据输出至目录hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='';将查询结果输出至本地目录hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;选择所有列到本地目录hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM profiles a;hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT COUNT(1) FROM invites a WHERE a.ds='';hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT a.foo, a.bar FROM invites a;hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/sum' SELECT SUM(a.pc) FROM pc1 a;将一个表的统计结果插入另一个表中hive> FROM invites a INSERT OVERWRITE TABLE events SELECT a.bar, count(1) WHERE a.foo > 0 GROUP BY a.bar;hive> INSERT OVERWRITE TABLE events SELECT a.bar, count(1) FROM invites a WHERE a.foo > 0 GROUP BY a.bar;JOINhive> FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;将多表数据插入到同一表中FROM srcINSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;将文件流直接插入文件hive> FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09';This streams the data in the map phase through the script /bin/cat (like hadoop streaming). Similarly - streaming can be used on the reduce side (please see the Hive Tutorial or examples)实际示例创建一个表CREATE TABLE u_data (userid INT,movieid INT,rating INT,unixtime STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'STORED AS TEXTFILE;下载示例数据文件,并解压缩wget /system/files/ml-data.tar__0.gztar xvzf ml-data.tar__0.gz加载数据到表中LOAD DATA LOCAL INPATH 'ml-data/u.data'OVERWRITE INTO TABLE u_data;统计数据总量SELECT COUNT(1) FROM u_data;现在做一些复杂的数据分析创建一个weekday_mapper.py: 文件,作为数据按周进行分割import sysimport datetimefor line in sys.stdin:line = line.strip()userid, movieid, rating, unixtime = line.split('\t')生成数据的周信息weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday() print '\t'.join([userid, movieid, rating, str(weekday)])使用映射脚本//创建表,按分割符分割行中的字段值CREATE TABLE u_data_new (userid INT,movieid INT,rating INT,weekday INT)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t';//将python文件加载到系统add FILE weekday_mapper.py;将数据按周进行分割INSERT OVERWRITE TABLE u_data_newSELECTTRANSFORM (userid, movieid, rating, unixtime)USING 'python weekday_mapper.py'AS (userid, movieid, rating, weekday)FROM u_data;SELECT weekday, COUNT(1)FROM u_data_newGROUP BY weekday;------------------------------------------------------------------------------------------------------------创建表:hive> CREATE TABLE pokes (foo INT, bar STRING);Creates a table called pokes with two columns, the first being an integer and the other a string创建一个新表,结构与其他一样hive> create table new_table like records;创建分区表:hive> create table logs(ts bigint,line string) partitioned by (dt String,country String);加载分区表数据:hive> load data local inpath '/home/hadoop/input/hive/partitions/file1' into table logs partition (dt='2001-01-01',country='GB');展示表中有多少分区:hive> show partitions logs;展示所有表:hive> SHOW TABLES;lists all the tableshive> SHOW TABLES '.*s';lists all the table that end with 's'. The pattern matching follows Java regular expressions. Check out this link for documentation显示表的结构信息hive> DESCRIBE invites;shows the list of columns更新表的名称:hive> ALTER TABLE source RENAME TO target;添加新一列hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');删除表:hive> DROP TABLE records;删除表中数据,但要保持表的结构定义hive> dfs -rmr /user/hive/warehouse/records;从本地文件加载数据:hive> LOAD DATA LOCAL INPATH '/home/hadoop/input/ncdc/micro-tab/sample.txt' OVERWRITE INTO TABLE records;显示所有函数:hive> show functions;查看函数用法:hive> describe function substr;查看数组、map、结构hive> select col1[0],col2['b'],col3.c from complex;内连接:hive> SELECT sales.*, things.* FROM sales JOIN things ON (sales.id = things.id);查看hive为某个查询使用多少个MapReduce作业hive> Explain SELECT sales.*, things.* FROM sales JOIN things ON (sales.id = things.id);外连接:hive> SELECT sales.*, things.* FROM sales LEFT OUTER JOIN things ON (sales.id = things.id);hive> SELECT sales.*, things.* FROM sales RIGHT OUTER JOIN things ON (sales.id = things.id);hive> SELECT sales.*, things.* FROM sales FULL OUTER JOIN things ON (sales.id = things.id);in查询:Hive不支持,但可以使用LEFT SEMI JOINhive> SELECT * FROM things LEFT SEMI JOIN sales ON (sales.id = things.id);Map连接:Hive可以把较小的表放入每个Mapper的内存来执行连接操作hive> SELECT /*+ MAPJOIN(things) */ sales.*, things.* FROM sales JOIN things ON (sales.id = things.id);INSERT OVERWRITE TABLE ..SELECT:新表预先存在hive> FROM records2> INSERT OVERWRITE TABLE stations_by_year SELECT year, COUNT(DISTINCT station) GROUP BY year> INSERT OVERWRITE TABLE records_by_year SELECT year, COUNT(1) GROUP BY year> INSERT OVERWRITE TABLE good_records_by_year SELECT year, COUNT(1) WHERE temperature != 9999 AND (quality = 0 OR quality = 1 OR quality = 4 OR quality = 5 OR quality = 9) GROUP BY year;CREATE TABLE ... AS SELECT:新表表预先不存在hive>CREATE TABLE target AS SELECT col1,col2 FROM source;创建视图:hive> CREATE VIEW valid_records AS SELECT * FROM records2 WHERE temperature !=9999;查看视图详细信息:hive> DESCRIBE EXTENDED valid_records;。
Hive基本使用——命令行

Hive基本使⽤——命令⾏Hive ⽤户接⼝主要有三个:命令⾏(CLI),客户端(Client) 和 Web界⾯(WUI)。
其中最常⽤的是 CLI,启动的时候,会同时启动⼀个 Hive 服务。
Client 是 Hive 的客户端,⽤户连接⾄ Hive Server。
在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动Hive Server。
WUI 是通过浏览器访问 Hive的Web⼯具这⾥介绍Hive命令⾏的⼀个基本使⽤注意hive命令⾏语句后⾯⼀定要加分号创建数据库hive> create database zwctest;查看数据库hive> show databases;OKdefaultzwctestTime taken: 0.019 seconds, Fetched: 2 row(s)切换数据库切换数据库的时候可以输⼊:use database_name;hive> use zwctest;OKTime taken: 0.012 seconds删除数据库hive> drop database if exists zwctest;创建表创建⼀个外部表,表有字段name,sex,age。
comment后⾯内容为字段描述信息。
hive> create external table if not exists studenttable(> name string comment 'name value',> sex string comment 'sex value',> age string comment 'age value')> row format delimited> fields terminated by '\t'> lines terminated by '\n'> stored as textfile;OKTime taken: 0.163 seconds查看所有表hive> show tables;OKtesttableTime taken: 0.023 seconds, Fetched: 1 row(s)hive> desc studenttable;OKname string name valuesex string sex valueage string age value#这⾥⾯有⼀个字段data,是string类型的,描述信息comment是“d comment”。
Hive常用的SQL命令操作

Hive常⽤的SQL命令操作创建表hive> CREATE TABLE pokes (foo INT, bar STRING);创建表并创建索引字段dshive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);显⽰所有表hive> SHOW TABLES;按正条件(正则表达式)显⽰表,hive> SHOW TABLES '.*s';表添加⼀列hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);添加⼀列并增加列字段注释hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');更改表名hive> ALTER TABLE events RENAME TO 3koobecaf;删除列hive> DROP TABLE pokes;元数据存储将⽂件中的数据加载到表中hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;加载本地数据,同时给定分区信息hive> LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');加载DFS数据,同时给定分区信息hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');The above command will load data from an HDFS file/directory to the table. Note that loading data from HDFS will result in moving the file/directory. As a result, the operation is almost instantaneous.SQL 操作按先件查询hive> SELECT a.foo FROM invites a WHERE a.ds='<DATE>';将查询数据输出⾄⽬录hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='<DATE>';将查询结果输出⾄本地⽬录hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;选择所有列到本地⽬录hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM profiles a;hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT COUNT(1) FROM invites a WHERE a.ds='<DATE>';hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT a.foo, a.bar FROM invites a;hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/sum' SELECT SUM(a.pc) FROM pc1 a;将⼀个表的统计结果插⼊另⼀个表中hive> FROM invites a INSERT OVERWRITE TABLE events SELECT a.bar, count(1) WHERE a.foo > 0 GROUP BY a.bar;hive> INSERT OVERWRITE TABLE events SELECT a.bar, count(1) FROM invites a WHERE a.foo > 0 GROUP BY a.bar;JOINhive> FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;将多表数据插⼊到同⼀表中FROM srcINSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;将⽂件流直接插⼊⽂件hive> FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09';This streams the data in the map phase through the script /bin/cat (like hadoop streaming). Similarly - streaming can be used on the reduce side (please see the Hive Tutorial or examples)实际⽰例创建⼀个表CREATE TABLE u_data (userid INT,movieid INT,rating INT,unixtime STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'STORED AS TEXTFILE;下载⽰例数据⽂件,并解压缩wget /system/files/ml-data.tar__0.gztar xvzf ml-data.tar__0.gz加载数据到表中LOAD DATA LOCAL INPATH 'ml-data/u.data'OVERWRITE INTO TABLE u_data;统计数据总量SELECT COUNT(1) FROM u_data;现在做⼀些复杂的数据分析创建⼀个 weekday_mapper.py: ⽂件,作为数据按周进⾏分割import sysimport datetimefor line in sys.stdin:line = line.strip()userid, movieid, rating, unixtime = line.split('\t')⽣成数据的周信息weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday() print '\t'.join([userid, movieid, rating, str(weekday)])使⽤映射脚本//创建表,按分割符分割⾏中的字段值CREATE TABLE u_data_new (userid INT,movieid INT,rating INT,weekday INT)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t';//将python⽂件加载到系统add FILE weekday_mapper.py;将数据按周进⾏分割INSERT OVERWRITE TABLE u_data_newSELECTTRANSFORM (userid, movieid, rating, unixtime)USING 'python weekday_mapper.py'AS (userid, movieid, rating, weekday)FROM u_data;SELECT weekday, COUNT(1)FROM u_data_newGROUP BY weekday;。
hive chmod用法

hive chmod用法Hive是一个基于Hadoop的数据仓库工具,它允许用户通过SQL 查询语言来查询和处理数据。
在Hive中,权限管理是一个重要的方面,因为它涉及到用户对数据的访问和控制。
chmod是一种常用的权限管理命令,用于改变文件或目录的权限。
在Hive中,也有类似的权限管理机制,可以使用chmod命令来修改Hive文件的权限。
一、权限概念在Hive中,权限是由文件或目录的拥有者和用户组成员确定的。
拥有者拥有对该文件或目录的所有权,并可以授予其他用户对该文件或目录的访问权限。
用户组成员只能访问他们被授予的权限。
权限分为读、写和执行三个级别,分别表示是否可以读取、修改和运行文件或目录。
二、chmod用法在Hive中,可以使用chmod命令来修改文件的权限。
chmod命令的基本语法如下:chmod [权限模式] 文件名其中,权限模式是一个由数字和符号组成的模式,用于指定文件的访问权限。
Hive中常用的权限模式包括:* 读权限:4(r)* 写权限:2(w)* 执行权限:1(x)* 符号权限:r=读,w=写,x=执行例如,要给所有用户赋予读和写的权限,可以使用以下命令:chmod 666 文件名如果要同时给拥有者和用户组成员赋予读、写和执行权限,可以使用以下命令:chmod 777 文件名需要注意的是,chmod命令只能修改文件的权限,而不能修改目录的权限。
此外,Hive中的权限管理还涉及到用户和组的概念。
可以将用户分组并为每个组分配不同的权限,从而实现更细粒度的权限控制。
三、Hive中的权限管理在Hive中,可以使用GRANT和REVOKE命令来授予和撤销用户的权限。
GRANT命令用于将权限授予用户或组,而REVOKE命令用于撤销已授予的权限。
Hive中的权限管理通常涉及以下几个步骤:1. 创建用户和组:首先需要创建用户和组,并为用户分配唯一的用户名和密码。
2. 分配权限:使用GRANT命令将权限授予用户或组。
Hive记录-Hive常用命令操作

Hive记录-Hive常⽤命令操作1.hive⽀持四种数据模型• external table ---外部表:Hive中的外部表和表很类似,但是其数据不是放在⾃⼰表所属的⽬录中,⽽是存放到别处,这样的好处是如果你要删除这个外部表,该外部表所指向的数据是不会被删除的,它只会删除外部表对应的元数据;⽽如果你要删除表,该表对应的所有数据包括元数据都会被删除。
• table ---表,存储在HDFS的⼀个⽬录中。
• partition ---分区:在Hive中,表的每⼀个分区对应表下的相应⽬录,所有分区的数据都是存储在对应的⽬录中。
• bucket ---桶,对指定的列计算其hash,根据hash值切分数据,⽬的是为了并⾏,每⼀个桶对应⼀个⽂件(注意和分区的区别)。
2.hive⽀持的数据类型• 基本类型:tinyint, smallint, int,bigint, boolean, float, double, string,date• 复杂类型:struct,map,array3.创建Create语句3.1.创建表create table test (id int, name string);3.2.创建外部表create external table page(id int,page string, ip string comment 'IP Address of the User')ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054' STORED AS TEXTFILE LOCATION '/usr/hive/external';3.3.创建分区表create table pageurl(id int,page string, ip string comment 'IP Address of the User')PARTITIONED BY(date STRING, pos STRING) ROW FORMAT DELIMITED ‘\t’ FIELDS TERMINATED BY '\n' STORED AS SEQUENCEFILE;3.4.创建bucket表create table pageu(id int,page string, ip string comment 'IP Address of the User')PARTITIONED BY(date STRING, pos STRING)CLUSTERED BY(userid) SORTED BY(id) INTO 32 BUCKETSROW FORMAT DELIMITED ‘\t’FIELDS TERMINATED BY '\n'STORED AS SEQUENCEFILE;3.5 创建数据库:create database test4.show语句show databases ---查询数据库show tables ---查询数据表show role grant user root ---查询⽤户拥有的⾓⾊show grant user root ---查询⽤户拥有的权限show functions ---查询hive所有⽀持的函数DESCRIBE FUNCTION max---查询max⽅法的介绍DESCRIBE FUNCTION EXTENDED max ---查询max⽅法的详细介绍DESCRIBE test ---查询test表的结构describe database test;--- 查询test数据库的结构use test ---⽤test数据库5.drop语句5.1 删除表 drop table test;5.2 删除数据库 drop database test;5.3 删除⾓⾊ drop role role1;6.load语句load data (local) inpath '/usr/test.txt' (overwrite覆盖) into table test;7.insert语句insert overwrite local directory '/opt/test/data' select * from test;insert overwrite table test2 select * from test;insert into table test3 select * from test。
HiveShell命令详解

HiveShell命令详解Hive服务介绍Hive默认提供的cli(shell)服务,如果需要启动其他服务,那么需要service参数来启动其他服务,⽐如thrift服务、metastore服务等。
可以通过命令hive --service help查看hive⽀持的命令。
Hive Shell命令介绍Hive的shell命令是通过${HIVE_HOME}/bin/hive⽂件进⾏控制的,通过该⽂件我们可以进⾏hive当前会话的环境管理、也进⾏进⾏hive的表管理等操作。
hive命令需要使⽤';'进⾏结束标⽰。
通过hive -H查看帮助信息:另外从hive0.11版本开始⽀持--database<databasename>.Hive Shell常⽤基本命令Hive的Shell基本常⽤命令主要包含退出客户端、添加⽂件、修改/查看环境变量、执⾏linux命令、执⾏dfs命令等。
命令包括:quit、exit、set、add JAR[S] <filepath> <filepath>*、list JAR[S]、delete JAR[S] <filepath>*、! <linux-command>、dfs <dfs command>等。
除了Hive的基本命令外,其他的命令主要是DDL和DML等操作数据表的命令。
HiveQL介绍HiveQL简称HQL,是⼀种类似sql的查询语⾔,绝⼤多数语法和sql类似。
HQL⽀持基本类型和复杂类型两⼤类数据类型。
基本类型包括TINYINT(1byte), SMALLINT(2byte), INT(4byte), BIGINT(8byte), FLOAT(4byte), DOUBLE(8byte), BOOLEAN(-), STRING(2G)。
复杂类型包括ARRAY(⼀组有序数组,类型必须⼀致), MAP(⽆序键值对,键值内部字段类型必须相同,⽽且要求key的类型为基本数据类型), STRUCT(⼀组字段,类型任意)。
hivesql常用set

hivesql常⽤setset hive.execution.engine = tez; --"mr", "tez", "spark"set =root.hello;set tez.grouping.min-size=556000000;set tez.grouping.max-size=3221225472;set hive.tez.auto.reducer.parallelism=true;set mapreduce.map.cpu.vcores=6;set mapreduce.map.memory.mb=3072;set mapreduce.map.java.opts=-Xmx2400m -Dfile.encoding=UTF-8;set mapreduce.reduce.cpu.vcores=6;set mapreduce.reduce.memory.mb=6144;set mapreduce.reduce.java.opts=-Xmx4900m -Dfile.encoding=UTF-8;set hive.exec.max.created.files=900000;set =root.ESS-GODDOG-OFFLINE;set =t_dm_relation_graph;set hive.exec.dynamic.partition=true;set hive.exec.dynamic.partition.mode=nonstrict;set hive.exec.max.dynamic.partitions=3000;set hive.exec.max.dynamic.partitions.pernode=1000;set hive.fetch.task.conversion=more;set hive.exec.parallel=true;set hive.exec.parallel.thread.number=2048;set mapreduce.job.jvm.numtasks=-1;set hive.exec.reducers.bytes.per.reducer=500000000;--set mapred.reduce.tasks=1024;set hive.auto.convert.join=true;set hive.map.aggr=true;set hive.groupby.skewindata=true;set mapred.max.split.size=256000000;set mapred.min.split.size.per.node=134217728;set mapred.min.split.size.per.rack=134217728;set hive.input.format=bineHiveInputFormat;set hive.merge.mapfiles=true;set hive.merge.mapredfiles=true;set hive.merge.size.per.task=256000000;set hive.merge.smallfiles.avgsize=16000000;set io.file.buffer.size=2097152;set mapreduce.task.io.sort.mb=300;set mapreduce.map.sort.spill.percent=0.8;set mapreduce.task.io.sort.factor=10;set mapreduce.reduce.shuffle.parallelcopies=8;set press.intermediate=true;set press=true;set press.codec=press.SnappyCodec;set mapreduce.reduce.merge.inmem.threshold=0;set mapreduce.reduce.input.buffer.percent=0.8;set press.output=true;set press.codec=press.SnappyCodec; set press.type=BLOCK;# 关闭local hadoopset hive.exec.mode.local.auto=false;set mapred.job.priority=HIGH;set pletedmaps=0.15Map端调优map数控制对于map运⾏时间过长或者map数据倾斜⽐较严重时可以通过设置切⽚⼤⼩实现对map数的控制,hive设置如下set mapred.max.split.size=100000000;set mapred.min.split.size.per.node=100000000;set mapred.min.split.size.per.rack=100000000;map⼩⽂件优化使⽤Combinefileinputformat,将多个⼩⽂件打包作为⼀个整体的inputsplit,减少map任务数set hive.input.format=bineHiveInputFormat;Map 内存控制ApplicationMaster执⾏在独⽴的jvm中以child process的⽅式执⾏ Mapper/Reducer task⼦任务继承ApplicationMaster的环境,⽤户可以通过mapreduce.{map|reduce}.java.opts 指定child-jvm参数set mapreduce.map.memory.mb=2048;set mapreduce.map.java.opts=-Xmx1536mMapJoin优化set hive.auto.convert.join= true;set hive.mapjoin.smalltable.filesize=25000000;select/*+ MAPJOIN(table_a)*/,a.*,b.*from table_a a join table_b b on a.id = b.idreduce端优化reduce数控制hive1.2.1⾃⼰如何确定reduce数: reduce个数的设定极⼤影响任务执⾏效率,不指定reduce个数的情况下,Hive会猜测确定⼀个reduce个数,基于以下两个设定:hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为256*1000*1000)。
Hbase数据库常用命令

Hbase数据库常⽤命令创建表create '表名称', '列名称1','列名称2','列名称N'删除表第⼀步 disable '表名称' 第⼆步 drop '表名称'添加记录put '表名称', '⾏名称', '列名称:', '值' //⾏名称相当于你设置的⼀个主键查看单⾏记录get '表名称', '⾏名称'查看表中的记录总数count '表名称'删除单⾏记录某列的值delete '表名' ,'⾏名称' , '列名称'删除单⾏记录delete '表名' ,'⾏名称'删除所有记录truncate '表名'查看表所有记录scan "表名称"查看表某个列所有记录scan "表名称" , ['列名称:']查看有哪些表list查看表结构describe '表名'删除表中某⼀个列(先要disable member)alter'member',{NAME=>'member_id',METHOD=>'delete'}查询表是否存在exists 'member'判断表是否enableis_enabled 'member'判断表是否disableis_disabled 'member'修改⼀⾏记录的值(和插⼊⼀条记录的值语法⼀样,key相同会去替换掉原来的value)put 'member','scutshuxue','info:age' ,'99'。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大数据学习总结公司对大数据方面也做了不少的培训,自己也学习了一些,在实际应用中也有所体会。
针对大数据和关系型数据库有几点感触比较深刻:1.数据存储位置不同。
Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。
而数据库则可以将数据保存在块设备或者本地文件系统中。
2.数据更新。
由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。
因此,Hive 中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。
而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO ... VALUES 添加数据,使用 UPDATE ... SET 修改数据.这也是在汇总数据比较痛苦的地方。
~~(>_<)~~3.访问速度。
hive 在查询时有延迟,因为没有索引需要扫描整个表,还有就是mapreduce框架,MapReduce本身具有较高的延迟,所以在利用它来执行hive 查询时就会多的延迟了。
Hive 不适合在线数据查询,针对数据量比较小的表数据库更快一些。
目前来说除了详单其他数据量还不是特别大,访问速度很多时候没有关系型数据库查询的快。
还有很多不同的地方,这里就不多说了,就简单说一下常用的命令吧:一、Hive1.1建表:CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name[(col_name data_type [COMMENT col_comment], ...)][COMMENT table_comment][PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...)[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format][STORED AS file_format][LOCATION hdfs_path]举例说明:CREATE EXTERNAL TABLE IF NOT EXISTS IN_BILL_GG_D1512( SOURCE_TYPE STRING,BIZ_TYPE STRING...)PARTITIONED BY (dt string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' LOCATION '/etldata/cdr/gg/1512';1.2Hive下查看数据表信息的方法:方法1:查看表的字段信息desc table_name;方法2:查看表的字段信息及元数据存储路径desc extended table_name;方法3:查看表的字段信息及元数据存储路径desc formatted table_name;Ef:hive> desc formatted t_cdr_wn1609;OK# col_name data_type commentsystem_type string record_type string msisdn string real_number string start_datetime string end_datetime string call_duration int session_id string nas_ip string nas_port string nas_type string ip_address string status string service_attr string data_flowup int data_flowdn int home_area_code string vlanid string roam_type string billing_type string user_type string fee1 int fee2 int fee3 int old_fee1 int old_fee2 int old_fee3 int info_fee1 string info_fee2 string info_fee3 string file_name string deal_time string id_no intgroup_id string product_code string region_code string brand_code string dealfile string error_code string rb_file_name string call_times int# Partition Information# col_name data_type commentdeal_date string sys_type string# Detailed Table InformationDatabase: pprtdbOwner: pprtCreateTime: Fri Sep 02 08:01:24 CST 2016 LastAccessTime: UNKNOWNProtect Mode: NoneRetention: 0Location:hdfs://drmcluster/hive/warehouse/pprtdb.db/t_cdr_wn1609Table Type: MANAGED_TABLETable Parameters:transient_lastDdlTime 1472774484# Storage InformationSerDe Library:org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe InputFormat:org.apache.hadoop.hive.ql.io.RCFileInputFormatOutputFormat:org.apache.hadoop.hive.ql.io.RCFileOutputFormatCompressed: NoNum Buckets: -1Bucket Columns: []Sort Columns: []Storage Desc Params:field.delim |line.delim \nserialization.format |Time taken: 0.208 seconds, Fetched: 74 row(s)备注:查看表元数据存储路径时,推荐方法3,信息比较清晰4.hive模糊搜索表show tables like '*name*';show tables like '*gg*';1.3查看表分区信息show partitions table_name;如下图是双分区:根据分区查询数据select table_coulm from table_name where partition_name ='2014-02-25';Eg:select * from t_cdr_wn1609 where deal_date=20160921 limit 1;1.4对表中的某一列进行修改,包括列的名称/列的数据类型/列的位置/列的注释ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type[COMMENT col_comment] [FIRST|AFTER column_name]1.5添加/替换列Add/ReplaceColumnsALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENTcol_comment], ...)ADD COLUMNS 允许用户在当前列的末尾增加新的列,但是在分区列之前1.6删除分区alter table tablename drop partition(dt='2014-03-01');1.7增加分区 Add Partitions:ALTER TABLE table_name ADD partition_spec [ LOCATION'location1' ]partition_spec [ LOCATION 'location2' ]1.8查看表容量大小方法1:查看一个hive表文件总大小时(单位为Byte),命令如下:1.8.1#查看普通表的容量$ hadoop fs -ls /hive/warehouse/pprtdb.db/table_name|awk -F ' ' '{print $5}'|awk '{a+=$1}END{print a}'这样可以省去自己相加,下面命令是列出该表的详细文件列表$ hadoop fs -ls /hive/warehouse/pprtdb.db/table_name1.8.2#查看分区表的容量这样可以省去自己相加,下面命令是列出该表的详细文件列表$ hadoop fs -du -h/hive/warehouse/pprtdb.db/t_cdr_wn1609/deal_date=20160921查看所有表的容量:1.9从文件加载数据进表(OVERWRITE覆盖,追加不需要OVERWRITE关键字)LOAD DATA LOCAL INPATH 'filename' OVERWRITE into table tablename; --从查询语句给table插入数据INSERT OVERWRITE TABLE test_tablename_log PARTITION(date) select * from tablename where dt='2014-01-22' limit 100;1.10杀死某个任务不在hive shell中执行hadoop job -kill job_id1.11hive修改表名ALTER TABLE TABLEname1 RENAME TO tablename2;1.12hive复制表结构CREATE TABLE TABLEname1 LIKE tablename2;2定长加载脚本举例-BSS详单入HIVE内部表2.1前端数据集成平台配置作业将相应 BSS详单安接口传到大数据集群2.2编写脚本创建外部表及内部表(采用动态分区,为了支撑结构相同详单入同一个表)2.3内部表中数据:后面就是写脚本进行汇总获取需要的数据进行分析。