hive-0 简介 安装 本地文件上传到hive

标签: hive 简介 文件 | 发表时间:2014-12-12 15:23 | 作者:chengjianxiaoxue
出处:http://www.iteye.com

 

1 简介:

 

a) 概念:

Hive 是建立在 Hadoop  上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop  中的大规模数据的机制。Hive 定义了简单的类 SQL  查询语言,称为 QL ,它允许熟悉 SQL  的用户查询数据。
同时,这个语言也允许熟悉 MapReduce  开发者的开发自定义的 mapper  和 reducer  来处理内建的 mapper 和 reducer  无法完成的复杂的分析工作。

 

b) 解释:

b.1) 数据库侧重于一些操作型的事情,事务型的东西,底层设计侧重于操作

b.2) 数据仓库侧重于查询,底层设计侧重于查询, 在相同数据量下,数据仓库查询速度会更快。

b.3) hive和mapreduce的区别:
相同处: 都是对海量数据的查询
不同处:
mapreduce是用Java开发的,对非Java的人有瓶颈,
hive:封装在Hadoop之上的可以使用SQL进行海量数据查询的框架,因为SQL学习简单使用简单因此降低了使用门槛。

b.4) ETL:
E: 抽取 比如业务提供9个字段,我们之获取4个字段
T: 转化 transform,比如有的业务男女用 true false,有的业务用1,0 在汇总到hive时,需要转成统一标示
L: 加载 load

 

b.5) hive其数据仓库的数据是外面导入进来的。

b.6) hive转化成mapreduce时,需要知道启多少个map  多少个reduce,运行的数量和运行速度是需要关心的。 
对hive的优化实际就是对生成的map-reduce的优化。

 

c) HQL中的信息和hdfs对应规则如下:

表 ----> hdfs文件/文件夹
表中数据 ----> hdfs文件/文件夹内数据
表中列  ----> hdfs文件数据的不同字段

以上对应关系存放在hive的metastore组件中,metastore表现为关系数据库,可以是derby,也可以是mysql

类比于 hibernate和mysql的对应关系:
User  <------> cn_user    对应关系在 *.hbm.xml内

metastore表现默认使用derby,但是这种存储太小众,一般需要将hive和hdfs对应关系存储在MySQL中

 

 

2 安装hive

2.1) 一定要配置在Hadoop集群的某个节点上

2.2) 类比于QQ,是一款比较简易的客户端安装软件,安装简单

2.3) 安装过程:

 

[root@master local]# tar -zxvf hive-0.9.0.tar.gz   解压
[root@master local]# mv hive-0.9.0 hive    改名
[root@master hive]# cd conf 
[root@master conf]# ls
hive-default.xml.template  hive-exec-log4j.properties.template
hive-env.sh.template       hive-log4j.properties.template
[root@master conf]# mv hive-exec-log4j.properties.template  hive-exec-log4j.prop 修改hive/conf/内文件,并创建新文件 hive-site.xml
erties
[root@master conf]# mv hive-log4j.properties.template hive-log4j.properties
[root@master conf]# ls
hive-default.xml.template  hive-exec-log4j.properties
hive-env.sh.template       hive-log4j.properties
[root@master conf]# mv hive-env.sh.template  hive-env.sh
[root@master conf]# mv hive-default.xml.template  hive-default.xml
[root@master conf]# cp hive-default.xml hive-site.xml
[root@master conf]# ls
hive-default.xml  hive-exec-log4j.properties  hive-site.xml
hive-env.sh       hive-log4j.properties

[root@master conf]# cat hive-site.xml    修改hive-site.xml 成如下样子:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

</configuration>

[root@master bin]# vi hive-config.sh   修改hive/bin/hive-config.sh  增加如下信息:

export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive

[root@master bin]# ls       
ext  hive  hive-config.sh
[root@master bin]# jps
20011 Jps
9800 JobTracker
9572 NameNode
9721 SecondaryNameNode
[root@master bin]# hive    保证Hadoop集群开启下,来启动hive
WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files.
Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j.properties ----> 标明配置写出日志文件的配置文件
Hive history file=/tmp/root/hive_job_log_root_201412111909_207218151.txt   -----> 表示日志文件
hive> show databases;   
OK
default
Time taken: 14.129 seconds
hive> use default;
OK
Time taken: 0.141 seconds
hive> show tables;
OK
Time taken: 0.995 seconds
hive> create table t1(id int);
OK
Time taken: 1.015 seconds
hive> show tables;
OK
t1
Time taken: 0.068 seconds
hive> quit;
[root@master bin]# ls -->上面表创建后,可见下面增加文件derby.log和metastore_db
derby.log  ext  hive  hive-config.sh  metastore_db

 

 2.3.1) 配置hive环境变量:

配置hive环境变量:
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive
export PATH=.:$HIVE_HOME/bin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
[root@master data]# source /etc/profile   立马生效

 

 

2.4) hive默认数据库对应hdfs路径:

 

hive中的数据库,表对应HDFS中文件夹对应关系:

http://master:50070/dfshealth.jsp
--->Browse the filesystem
--->user
--->hive
--->warehouse
--->t1 看到我们通过命令创建的表 对应目录为:/user/hive/warehouse/t1

其中:
当hive部署成功后,hive默认的数据库default在hdfs上对应的目录是/user/hive/warehouse

 

 

 

如下图:



 

 

 

2.5) hive 映射关系metastore 将默认derby修改成mysql做法:

 

前提
a) mysql数据库安装上
b) 如果mysql服务没有安装在当前hive所在机器,那么设置mysql服务远程连接和操作授权
c) 将mysql-jdbc驱动扔到hive/lib下
[root@master bin]# cp /usr/local/mysql-connector-java-5.1.10.jar ../lib
d) 修改配置文件hive/bin/hive-site.xml  增加mysal连接信息:
[root@master conf]# vi hive-site.xml    修改增加如下内容

[root@master conf]# cat hive-site.xml 
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://master:3306/hive_cr00?createDatabaseIfNotExist=true</value>  hive_cr00表示数据库名
</property>
<property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
</property>
<property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
</property>
<property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>admin</value>
</property>
</configuration>

e) 进入hive/bin,删除derby.log  metastore_db等信息:
[root@master bin]# ls
derby.log  ext  hive  hive-config.sh  metastore_db
[root@master bin]# rm -rf derby.log 
[root@master bin]# rm -rf metastore_db/
[root@master bin]# ls
ext  hive  hive-config.sh

f) 继续执行hive命令:
[root@master bin]# hive
WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files.
Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j.properties
Hive history file=/tmp/root/hive_job_log_root_201412112247_263167195.txt
hive> show databases;
OK
default
Time taken: 7.634 seconds
hive> use default;    // 使用hive默认数据库
OK
Time taken: 0.094 seconds
hive> show tables;
OK
Time taken: 1.034 seconds 
hive> create table t1(id int);   // 创建表
OK
Time taken: 0.43 seconds
hive> [root@master bin]# ls   // 此时没有在产生 derby.log  metastore_db等存储映射信息的文件和库
ext  hive  hive-config.sh

g) 进入MySQL服务,查看刚才hive创建操作生成的结果:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| hive_cr00          | 
| mysql              | 
| test               | 
+--------------------+
4 rows in set (0.00 sec)

mysql> use hive_cr00   //  使用配置文件 hive-site.xml内配置的库 hive_cr00
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------+
| Tables_in_hive_cr00 |
+---------------------+
| BUCKETING_COLS      | 
| CDS                 | 
| COLUMNS_V2          | 
| DATABASE_PARAMS     | 
| DBS                 | 
| PARTITION_KEYS      | 
| SDS                 | 
| SD_PARAMS           | 
| SEQUENCE_TABLE      | 
| SERDES              | 
| SERDE_PARAMS        | 
| SORT_COLS           | 
| TABLE_PARAMS        | 
| TBLS                | 
+---------------------+
14 rows in set (0.00 sec)

mysql> select * from DBS    // 可以看到hive默认数据库名default,默认路径为hdfs://master:9000/user/hive/warehouse
    -> ;
+-------+-----------------------+----------------------------------------+---------+
| DB_ID | DESC                  | DB_LOCATION_URI                        | NAME    |
+-------+-----------------------+----------------------------------------+---------+
|     1 | Default Hive database | hdfs://master:9000/user/hive/warehouse | default | 
+-------+-----

mysql> select * from TBLS \G;   // 可以看到之前通过hive操作创建的表t1,
*************************** 1. row ***************************
            TBL_ID: 1
       CREATE_TIME: 1418366898
             DB_ID: 1
  LAST_ACCESS_TIME: 0
             OWNER: root
         RETENTION: 0
             SD_ID: 1
          TBL_NAME: t1
          TBL_TYPE: MANAGED_TABLE
VIEW_EXPANDED_TEXT: NULL
VIEW_ORIGINAL_TEXT: NULL

mysql> select * from COLUMNS_V2   // 可以看到之前通过hive操作创建的表t1字段 id
    -> ;
+-------+---------+-------------+-----------+-------------+
| CD_ID | COMMENT | COLUMN_NAME | TYPE_NAME | INTEGER_IDX |
+-------+---------+-------------+-----------+-------------+
|     1 | NULL    | id          | int       |           0 | 
+-------+---------+-------------+-----------+-------------+
1 row in set (0.00 sec)

 

 

 

 2.6) 通过hive将本地磁盘文件上传到hdfs中做法:

 



 

实验代码:

a) 通过hive创建单字段表,并上传本地文件到hive:

[root@master data]# cat onecolumn   // 在本地磁盘文件中的创建数据
1
2
3
4
5
// 通过hive hql将本地文件数据上传到hive中(1 实际是将本地磁盘文件数据写到hdfs中 2 通过hive将hdfs和hive表对应关系保持到MySQL中)
hive> load data local inpath '/usr/local/data/onecolumn' into table t1; 
Copying data from file:/usr/local/data
Copying file: file:/usr/local/data/onecolumn
Loading data to table default.t1
OK
Time taken: 16.166 seconds
hive> select * from t1;
OK
1
2
3
4
5
Time taken: 0.812 seconds

上述命令解释如下:
load data local inpath '/usr/local/data/onecolumn' into table t1;
load data 文件在本地(local)  inpath位置在   '可以是绝对路径也可以是相对路径'  into table t1(加载到表t1中)

 

结果图:



 

 

b) 通过hive创建多字段表,并上传本地文件到hive:

 

 

通过hive创建多字段表:
create table t2(id int, name string) row format delimited fields terminated by '\t';	
解释: row format delimited fields terminated by 是固定不动的,不管是多少个字段, '\t'是可变的,表示字段之间的间隔

hive> create table t2(id int, name string) row format delimited fields terminated by '\t'; // hive中创建多字段表,接受的实际数据之间用'\t'间隔
OK
Time taken: 0.462 seconds

[root@master data]# cat user // 准备本次磁盘文件数据
1       zhangsan
2       lisi
3       wangwu
4       zhaoliu

hive> load data local inpath '/usr/local/data/user' into table t2;   

hive> select * from t2;
OK
1       zhangsan
2       lisi
3       wangwu
4       zhaoliu

hive> select name from t2;    // 在查询某个/某几个列的时候 没办法全表扫描,只能通过map-reduce去做,
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_201412080304_0005, Tracking URL = http://master:50030/jobdetails.jsp?jobid=job_201412080304_0005
Kill Command = /usr/local/hadoop/libexec/../bin/hadoop job  -Dmapred.job.tracker=master:9001 -kill job_201412080304_0005
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
2014-12-12 00:15:53,940 Stage-1 map = 0%,  reduce = 0%
2014-12-12 00:16:00,119 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.58 sec
2014-12-12 00:16:01,129 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 0.58 sec
2014-12-12 00:16:02,144 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 0.58 sec
MapReduce Total cumulative CPU time: 580 msec
Ended Job = job_201412080304_0005
MapReduce Jobs Launched: 
Job 0: Map: 1   Cumulative CPU: 0.58 sec   HDFS Read: 237 HDFS Write: 29 SUCCESS
Total MapReduce CPU Time Spent: 580 msec
OK
zhangsan
lisi
wangwu
zhaoliu
Time taken: 42.547 seconds

 

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [hive 简介 文件] 推荐:

hive-0 简介 安装 本地文件上传到hive

- - 互联网 - ITeye博客
Hive 是建立在 Hadoop  上的数据仓库基础构架. 它提供了一系列的工具,可以用来进行数据提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop  中的大规模数据的机制. Hive 定义了简单的类 SQL  查询语言,称为 QL ,它允许熟悉 SQL  的用户查询数据. 同时,这个语言也允许熟悉 MapReduce  开发者的开发自定义的 mapper  和 reducer  来处理内建的 mapper 和 reducer  无法完成的复杂的分析工作.

hive小文件合并

- - 互联网 - ITeye博客
    hive仓库表数据最终是存储在HDFS上,由于Hadoop的特性,对大文件的处理非常高效. 而且大文件可以减少文件元数据信息,减轻NameNode的存储压力. 但是在数据仓库中,越是上层的表汇总程度就越高,数据量也就越小,而且这些表通常会有日期分区,随着时间的推移,HDFS的文件数目就会逐步增加.

hive 配置文件以及join中null值的处理

- - CSDN博客云计算推荐文章
1.  三种设定方式:配置文件. ·   用户自定义配置文件:$HIVE_CONF_DIR/hive-site.xml. ·   默认配置文件:$HIVE_CONF_DIR/hive-default.xml. 用户自定义配置会覆盖默认配置. 另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hadoop的配置文件包括.

Hadoop 归档 和HIVE 如何使用har 归档 文件

- - CSDN博客云计算推荐文章
但对于MapReduce 来说起不到任何作用,因为har文件就相当一个目录,仍然不能讲小文件合并到一个split中去,一个小文件一个split ,任然是低效的,这里要说一点<>对这个翻译有问题,上面说可以分配到一个split中去,但是低效的.      既然有优势自然也有劣势,这里不说它的不足之处,仅介绍如果使用har 并在hadoop中更好的使用har 文件.

Hive优化之小文件问题及其解决方案_lavimer-CSDN博客

- -
1.动态分区插入数据,产生大量的小文件,从而导致map数量剧增. 2.reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的). 3.数据源本身就包含大量的小文件. 1.从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能.

hive调优

- - 互联网 - ITeye博客
一、    控制hive任务中的map数: . 1.    通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改);.

hive 优化 tips

- - CSDN博客推荐文章
一、     Hive join优化. 也可以显示声明进行map join:特别适用于小表join大表的时候,SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a join b on a.key = b.key. 2.     注意带表分区的join, 如:.

Hive中的join

- - CSDN博客云计算推荐文章
select a.* from a join b on a.id = b.id select a.* from a join b on (a.id = b.id and a.department = b.department). 在使用join写查询的时候有一个原则:应该将条目少的表或者子查询放在join操作符的左边.

hive优化(2)

- - 开源软件 - ITeye博客
Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具. 使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别,. 所以需要去掉原有关系型数据库下开发的一些固有思维. 1:尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段.

hive优化

- - 开源软件 - ITeye博客
hive.optimize.cp=true:列裁剪. hive.optimize.prunner:分区裁剪. hive.limit.optimize.enable=true:优化LIMIT n语句. hive.limit.optimize.limit.file=10:最大文件数.   1.job的输入数据大小必须小于参数:hive.exec.mode.local.auto.inputbytes.max(默认128MB).