㈠ hive的几种文件格式
hive文件存储格式包括以下几类:
1、TEXTFILE
2、SEQUENCEFILE
3、RCFILE
4、ORCFILE(0.11以后出现)
其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理;
SEQUENCEFILE,RCFILE,ORCFILE格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入SequenceFile,RCFile,ORCFile表中。
前提创建环境:
hive 0.8
创建一张testfile_table表,格式为textfile。
create table if not exists testfile_table( site string, url string, pv bigint, label string) row format delimited fields terminated by ' ' stored as textfile;
load data local inpath '/app/weibo.txt' overwrite into table textfile_table;
一、TEXTFILE
默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,
从而无法对数据进行并行操作。
示例:
总结:
相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势。
㈡ HIVE OS系统对地址加密吗
加密。Hiveos系统会对飞行表的加密线路设置,飞行表是软件的整体配置,是使用这开源软件的前提,必须的设置好,特别是要配置稳定不掉的地址。
㈢ hadoop hue配置文件怎样设置加密密码
ue是一个开源的Apache Hadoop UI系统,最早是由Cloudera Desktop演化而来,由Cloudera贡献给开源社区,它是基于Python Web框架Django实现的。通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapRece Job等等。很早以前就听说过Hue的便利与强大,一直没能亲自尝试使用,下面先通过官网给出的特性,通过翻译原文简单了解一下Hue所支持的功能特性集合:
默认基于轻量级sqlite数据库管理会话数据,用户认证和授权,可以自定义为MySQL、Postgresql,以及Oracle
基于文件浏览器(File Browser)访问HDFS
基于Hive编辑器来开发和运行Hive查询
支持基于Solr进行搜索的应用,并提供可视化的数据视图,以及仪表板(Dashboard)
支持基于Impala的应用进行交互式查询
支持Spark编辑器和仪表板(Dashboard)
支持Pig编辑器,并能够提交脚本任务
支持Oozie编辑器,可以通过仪表板提交和监控Workflow、Coordinator和Bundle
支持HBase浏览器,能够可视化数据、查询数据、修改HBase表
支持Metastore浏览器,可以访问Hive的元数据,以及HCatalog
支持Job浏览器,能够访问MapRece Job(MR1/MR2-YARN)
支持Job设计器,能够创建MapRece/Streaming/Java Job
支持Sqoop 2编辑器和仪表板(Dashboard)
支持ZooKeeper浏览器和编辑器
支持MySql、PostGresql、Sqlite和Oracle数据库查询编辑器
1 Hue安装(参考官网:http://gethue.com/how-to-build-hue-on-ubuntu-14-04-trusty/)
1.1 在git上下载HUE源码或者在它的官网下载(如果已经安装git可省略第一步)
sudo apt-get install git
git clone https://github.com/cloudera/hue.git
1.2 需要安装一些依赖的软件包
官网给出了一些,如果环境不一样,灵活调整,GIT上面给出的依赖文件列表:
㈣ mysql数据库加密的,sqoop怎么解密输出在hive
mysql数据库加密的,sqoop怎么解密输出在hive
直接导入hive表
sqoop import --connect jdbc:postgresql://ip/db_name--username user_name --table table_name --hive-import -m 5
内部执行实际分三部,1.将数据导入hdfs(可在hdfs上找到相应目录),2.创建hive表名相同的表,3,将hdfs上数据传入hive表中
sqoop根据postgresql表创建hive表
sqoop create-hive-table --connect jdbc:postgresql://ip/db_name --username user_name --table table_name --hive-table hive_table_name( --hive-partition-key partition_name若需要分区则加入分区名称)
导入hive已经创建好的表中
sqoop import --connect jdbc:postgresql://ip/db_name --username user_name --table table_name --hive-import -m 5 --hive-table hive_table_name (--hive-partition-key partition_name --hive-partition-value partititon_value);
使用query导入hive表
sqoop import --connect jdbc:postgresql://ip/db_name --username user_name --query "select ,* from retail_tb_order where \$CONDITIONS" --hive-import -m 5 --hive-table hive_table_name (--hive-partition-key partition_name --hive-partition-value partititon_value);
注意:$CONDITIONS条件必须有,query子句若用双引号,则$CONDITIONS需要使用\转义,若使用单引号,则不需要转义。
㈤ hive的数据存储
首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
其次,Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:表(Table),外部表(External Table),分区(Partition),桶(Bucket)。
Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 pvs,它在 HDFS 中的路径为:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的 Table 数据(不包括 External Table)都保存在这个目录中。
Partition 对应于数据库中的 Partition 列的密集索引,但是 Hive 中 Partition 的组织方式和数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:pvs 表中包含 ds 和 city 两个 Partition,则对应于 ds = 20090801, ctry = US 的 HDFS 子目录为:/wh/pvs/ds=20090801/ctry=US;对应于 ds = 20090801, ctry = CA 的 HDFS 子目录为;/wh/pvs/ds=20090801/ctry=CA
Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。将 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00020
External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。
Table 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。 External Table 只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在 LOCATION 后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个 External Table 时,仅删除元数据,表中的数据不会真正被删除。
㈥ Hive的几种常见的数据导入方式
零.Hive的几种常见的数据导入方式
常用的的有三种:
1.从本地文件系统中导入数据到Hive表;
2.从HDFS上导入数据到Hive表;
3.在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。
Hive配置:
HDFS中Hive数据文件存放目录(启动hive后HDFS自动创建):
HDFS: /usr/hive/warehouse
hadoop fs -mkdir /usr/hive/warehouse 命令创立
本地数据存放目录:
本地:/home/santiago/data/hive
一.从本地文件系统中导入数据到Hive表
1.在hive中建表
hive> show databases;
OKdefaultTime taken: 1.706 seconds, Fetched: 1 row(s)
hive> create table guo_test(Name string,String string)
> row format delimited
> fields terminated by ','
> stored as textfile;
hive> show tables;
OK
guo_test
Time taken: 0.024 seconds, Fetched: 1 row(s)123456789101112
2.在本地文件建立同类型数据表
santi@hdp:~/data/hive$ ls
hive_test.txt
santi@hdp:~/data/hive$ cat hive_test.txt
santi,you are a zhazha.1234
3.导入数据并测试
hive>load data local inpath '/home/santi/data/hive/hive_test.txt' into table guo_test;
hive> select * from guo_test;
hive>dfs -ls /usr/hive/warehouse/guo_test;
#hadoop fs -ls /usr/hive/warehouse
Found 1 items
drwxrwxr-x - santiago supergroup 0 2017-01-14 21:13
/usr/hive/warehouse/guo_test12345678
发现hive-site,xml设置的HDFS文件存储位置中多了guo_test这个文件夹
#hadoop fs -ls /usr/hive/warehouse/guo_test
Found 1 items-rwxrwxr-x 1 santiago supergroup 24 2017-01-14 21:13
/usr/hive/warehouse/guo_test/hive_test.txt
hive> select * from guo_test;
OK
santi you are a zhazha.12345678
在该文件夹中找到了所写入hive数据仓库的文件。
[注]本地数据写入成功,但是从本地将数据导入到Hive表的过程中,其实是先将数据临时复制到HDFS的一个目录下(典型的情况是复制到上传用户的HDFS home目录下,比如/home/santi/),然后再将数据从临时目录下移动到对应的Hive表的数据目录里面(临时目录不保留数据)。
二.从HDFS文件系统中导入数据到Hive表
1.在HDFS文件系统上建立数据文件
hdfs上没有vim命令,则需要将本地数据文件手动传入到HDFS上
/data/hive# vim data_HDtoHive/data/hive# cat data_HDtoHivedata from, HDFS to Hive #hadoop fs -put /home/santi/data/hive/data_HDtoHive /usr/data/input//数据传入# hadoop fs -ls /usr/data/input12345
2导入数据
hive> load data inpath '/usr/data/input/data_HDtoHive' into table guo_test;
hive> select * from guo_test;
OK
data from HDFS to Hive
santi you are a zhazha.
Time taken: 0.172 seconds, Fetched: 2 row(s)123456
数据写入成功
数据存hive配置的数据存储位置中。
[注]
从本地导入数据语句为
hive>load data local inpath ‘/home/santi/data/hive/hive_test.txt’ into table guo_test;
从HDFS中导入数据的语句为
hive> load data inpath ‘/usr/data/input/data_HDtoHive’ into table guo_test;
差距在local这个命令这里。
而从HDFS系统上导入到Hive表的时候,数据转移。HDFS系统上查找不到相关文件。
三.从HIVE表选取数据插入新的HIVE表
命令为create table 表名 as selecr xxx from 表名。
hive> create table hivedata_test1
> as
> select name
> from guo_test;
hive> select * from hivedata_test1;
OK
data fromsanti
Time taken: 0.116 seconds, Fetched: 2 row(s)123456789
[注]hive是分区表有稍微区别
在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中。比表有a和b两个分区,则对应a=xxx,b=xx对应表的目录为/user/hive/warehouse/a=xxx
user/hive/warehouse/b=xx,所有属于这个分区的数据都存放在这个目录中。
hive> create table hivedata_test2(
> Name string)
> partitioned by
> (String string)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY ','> STORED AS TEXTFILE;
hive> insert into table hivedata_test2
> partition(String='best')
> select Name
> from guo_test;
hive> select * from hivedata_test2;
OK
data from best
santi best
Time taken: 1.549 seconds, Fetched: 2 row(s)# hadoop fs -ls /usr/hive/warehouse/hivedata_test2Found 1 items
drwxrwxr-x -santiago supergroup 0 2017-02-14 17:40
/usr/hive/warehouse/hivedata_test2/string=best
㈦ Hive(五)DML数据操作
语法 :
(1)load data:表示加载数据
(2)local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表
(3)inpath:表示加载数据的路径
(4)overwrite:表示覆盖表中已有数据,否则表示追加
(5)into table:表示加载到哪张表
(6)student:表示具体的表
(7)partition:表示上传到指定分区
案例 :
2)导入本地数据
3)查看person表数据
2)清空 person表数据; truncate table person;
3)查看person表清空情况(已经没有数据了)
4)导入 HDFS 数据到 person表中
5)重新查询 person表,查看数据情况
2) 导入HDFS,无需添加 local
3) row format delimited fields terminated by ' ' ;
语法:insert into <table> <表名> <查询语句>
案例:
创建一张新表:create table if not exists person2(id int,name string,phone string);
将 person 表中id 为 1和3的数据插入到 person2表中。
查询person2表数据
方式二:into overwrite
语法:insert overwrite table <表名> <查询语句>
测试之前重新准备一张表
向 person6 表中添加数据。
数据结果
注意:使用 insert overwrite 后面必须加上 table ,否则报错
注意
语法 :create table [if not exists] <表名> as <查询语句>
描述 :根据查询结果创建表(查询的结果会添加到新创建的表中)
案例 :
按照person表的结果创建person3表
查询 person3
注意:使用查询结果创建数据表时,需要加入 关键字
管理表
语法 :create table [if not exists] <表名>(字段信息) row format delimited fields terminated by <分割符>location <加载数据路径>
案例 :加载person 表的数据。
查询 person 数据加载的地址
创建 person4 表并设置 person表的数据路径。
查询 person4 表信息;person4中的表数据全部来自于person表。
外部表
创建一个管理表 t1
向管理表t1中添加一条数据
创建t2 并指定t1数据的加载地址
查询 t2 表
删除 t1 表
再次查询 t2 表
验证 t1 为外部表时,删除t1表时,是否会删除数据。
重新创建 t1表
向t1中添加数据3
创建 t2(原来的给删除了)并指定为外部表,并加载 t1的数据路径
查询 t1 表结构(验证是否为外部表
查询 t2 数据(有数据2)
删除t1 表
查询 t2 表(数据并没有删除)
更加深刻理解 管理表和外部表之间的区别。
语法 :import table <全新的表名> from '<Export 导出的地址>'
查询 person_import 表
查看家目录,生成了 一个 aaa目录,目录中有一个 000000_0 文件
查看 000000_0文件;正好是 person表中的数据。
注意:这里的 overwrite 并不是可选项(可加不可加),这里必须加上overwrite ,否则会报错。
查看 000000_0文件;使用了制表符,对数据进行格式化。
查看 /aaa/000000_0 文件
查看person_bak 文件
语法 :hive -e "<sql语句>" > <输出路径>
案例 :
查看家目录中的 person_bak
语法 :export table <表名> to '<HDFS地址>'
案例 :将 person 表的数据导出到 HDFS /person2中
查看 /person2 的层次结构
查看 /person2/data/person
㈧ Hive 数据库表的基本操作,必须掌握的基本功
说明:hive 的表存放位置模式是由 hive-site.xml 当中的一个属性指定的,默认是存放在该配置文件设置的路径下,也可在创建数据库时单独指定存储路径。
数据库有一些描述性的属性信息,可以在创建时添加:
查看数据库的键值对信息
修改数据库的键值对信息
与mysql查询语句是一样的语法
删除一个空数据库,如果数据库下面有数据表,那么就会报错
强制删除数据库,包含数据库下面的表一起删除(请谨慎操作)
[]里的属性为可选属性,不是必须的,但是如果有可选属性,会使 sql 语句的易读性更好,更标准与规范。
例如:[comment '字段注释信息'][comment '表的描述信息']等,[external]属性除外
1. CREATE TABLE
创建一个指定名字的表,如果相同名字的表已存在,则抛出异常提示:表已存在,使用时可以使用IF NOT EXISTS语句来忽略这个异常。
如果创建的表名已存在,则不会再创建,也不会抛出异常提示:表已存在。否则则自动创建该表。
2. EXTERNAL
顾名思义是外部的意思,此关键字在建表语句中让使用者可以创建一个外部表,如果不加该关键字,则默认创建内部表。
外部表在创建时必须同时指定一个指向实际数据的路径(LOCATION),Hive在创建内部表时,会将数据移动到数据仓库指向的路径;
若创建外部表,仅记录数据所在的路径,不对数据的位置作任何改变。
内部表在删除后,其元数据和数据都会被一起删除。
外部表在删除后,只删除其元数据,数据不会被删除。
3. COMMENT
用于给表的各个字段或整张表的内容作解释说明的,便于他人理解其含义。
4. PARTITIONED BY
区分表是否是分区表的关键字段,依据具体字段名和类型来决定表的分区字段。
5. CLUSTERED BY
依据column_name对表进行分桶,在 Hive 中对于每一张表或分区,Hive 可以通过分桶的方式将数据以更细粒度进行数据范围划分。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
6. SORTED BY
指定表数据的排序字段和排序规则,是正序还是倒序排列。
7. ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
指定表存储中列的分隔符,这里指定的是' ',也可以是其他分隔符。
8. STORED AS SEQUENCEFILE|TEXTFILE|RCFILE
指定表的存储格式,如果文件数据是纯文本格式,可以使用STORED AS TEXTFILE,如果数据需要压缩,则可以使用STORED AS SEQUENCEFILE。
9. LOCATION
指定 Hive 表在 hdfs 里的存储路径,一般内部表(Managed Table)不需要自定义,使用配置文件中设置的路径即可。
如果创建的是一张外部表,则需要单独指定一个路径。
1. 使用create table语句创建表
例子:
2. 使用create table ... as select...语句创建表
例子:
使用 create table ... as select ...语句来创建新表sub_student,此时sub_student 表的结构及表数据与 t_student 表一模一样, 相当于直接将 t_student 的表结构和表数据复制一份到 sub_student 表。
注意:
(1). select 中选取的列名(如果是 * 则表示选取所有列名)会作为新表 sub_student 的列名。
(2). 该种创建表的方式会改变表的属性以及结构,例如不能是外部表,只能是内部表,也不支持分区、分桶。
如果as select后的表是分区表,并且使用select *,则分区字段在新表里只是作为字段存在,而不是作为分区字段存在。
在使用该种方式创建时,create 与 table 之间不能加 external 关键字,即不能通过该种方式创建外部目标表,默认只支持创建内部目标表。
(3). 该种创建表的方式所创建的目标表存储格式会变成默认的格式textfile。
3.使用like语句创建表
例子:
注意:
(1). 只是将 t_student 的表结构复制给 sub1_student 表。
(2). 并不复制 t_student 表的数据给 sub1_student 表。
(3). 目标表可以创建为外部表,即:
㈨ hive内布表 shared 锁 怎么解决
在通过终端查询hive时,终端结果显示为乱码,想必大家都遇到过这种情况。这种情况出现的原因是:hive在将数据写入hdfs时候,会把数据格式转换为utf-8格式的。如果你导入hive表的源数据不是utf-8格式的,hive在进行写hdfs转换格式的时候会出现乱码,所有你查询出来的中文也是乱码。 解决办法如下: 1、把源文件,用editplus等编辑软件打开,将文件转换为urf-8格式,保存。再重新导入到hive表中,问题解决。 2、源文件只要是文本格式,如csv,txt,log等文本格式,均可用此种方法转化。前提是你终端也要设置为utf-8格式。
㈩ 有几点关于hadoop的hive数据仓库和hbase几点疑惑,希望有高手可以帮忙解决一下,谢谢了!!!
首先感觉你有点乱。。。
你先明白数据仓库的作用--存储历史数据-进而对数据进行分析,只提供查询-不提供修改
1。Hive 的目标是做成数据仓库,所以它提供了SQL,提供了文件-表的映射关系,又由于Hive基于HDFS,所以不提供Update,因为HDFS本身就不支持。
2.HBase 是NoSQL数据库-所以不要跟传统混淆并谈-NoSQL 提供的是另一种思路来满足高性能的需求,而这些是传统数据库的短板,与传统数据库的理念不一样
3.load data 这个可以自己去查。Hbase要使用自己的API
4.是的。
5.这句话不对。
6.映射就是结构对应-如文件每一行的第一个字段-映射到Hive表的第一个字段
类似Hibernate的语法解析。
Hive本身实现了一套语法结构也就是操作符。如扫描文件等,最终记本都会转换成MapRece来运行