设为首页 收藏本站
查看: 876|回复: 0

[经验分享] 基于Hadoop数据仓库Hive1.2部署及使用

[复制链接]

尚未签到

发表于 2018-10-30 09:14:19 | 显示全部楼层 |阅读模式
  以下基于上篇Hadoop2.6集群部署:http://lizhenliang.blog.51cto.com/7876557/1661354
  接下来安装Hadoop数据仓库Hive,上节了解HBase简单使用,听起来HBase与Hive有些类似,概念也有点模糊,那我们先了解下他们之间有什么区别:
  HBase是一种分布式、面向列的NoSQL数据库,基于HDFS存储,以表的形式存储数据,表由行和列组成,列划分到列族中。HBase不提供类SQL查询语言,要想像SQL这样查询数据,可以使用Phonix,让SQL查询转换成hbase的扫描和对应的操作,也可以使用现在说讲Hive仓库工具,让HBase作为Hive存储。
  Hive是运行在Hadoop之上的数据仓库,将结构化的数据文件映射为一张数据库表,提供简单类SQL查询语言,称为HQL,并将SQL语句转换成MapReduce任务运算。有利于利用SQL语言查询、分析数据,适于处理不频繁变动的数据。Hive底层可以是HBase或者HDFS存储的文件。
  两者都是基于Hadoop上不同的技术,相互结合使用,可处理企业中不同类型的业务,利用Hive处理非结构化离线分析统计,利用HBase处理在线查询。
  Hive三种元数据存储方式:
  1>.本地derby存储,只允许一个用户连接Hive,适用于测试环境
  2>.本地/远程MySQL存储,支持多用户连接Hive,适用于生产环境
  三、Hive安装与配置(以下将元数据存储到远程MySQL配置)
  1.在MySQL创建Hive元数据存放库和连接用户
mysql> create database hive;  
mysql> grant all on *.* to'hive'@'%' identified by 'hive';
  
mysql> flush privileges;
  2.安装与配置Hive(在HMaster0安装)
# tar zxvf apache-hive-1.2.0-bin.tar.gz  
# mv apache-hive-1.2.0-bin /opt
# vi hive-site.xml  

  
   
  
   
  
        javax.jdo.option.ConnectionURL
  
        jdbc:mysql://192.168.18.210:3306/hive?createDatabaseIfNotExist=true
  
   
  
   
  
        javax.jdo.option.ConnectionDriverName
  
        com.mysql.jdbc.Driver
  
   
  
   
  
        javax.jdo.option.ConnectionUserName
  
        hive_user
  
   
  
   
  
        javax.jdo.option.ConnectionPassword
  
        hive_pass
  
   
  

  3.配置系统变量
# vi /etc/profile  
HIVE_HOME=/opt/apache-hive-1.2.0-bin
  
PATH=$PATH:$HIVE_HOME/bin
  
export HIVE_HOME PATH
  
# source /etc/profile
  4.启动Hive
# hive --service metastore &   #启动远程模式,否则你只能在本地登录  5.检查是否正常启动
  查看进程是否启动:
[root@HMaster0 ~]# jps  
2615 DFSZKFailoverController
  
30027 ResourceManager
  
29656 NameNode
  
25451 Jps
  
10270 HMaster
  
14975 RunJar     #会启动一个RunJar进程
  执行hive命令会进入命令界面:
[root@HMaster0 ~]# hive  
Logging initialized usingconfiguration in file:/opt/apache-hive-1.2.0-bin/conf/hive-log4j.properties
  
hive> show databases;
  
OK
  
default
  
Time taken: 0.986 seconds,Fetched: 1 row(s)
  查看数据库,默认有一个default库,现在就可以用你熟悉的SQL语言了。
  6.客户端连接Hive(必须有Hadoop环境)
# tar zxvf apache-hive-1.2.0-bin.tar.gz  
# mv apache-hive-1.2.0-bin /opt
# vi hive-site.xml  

  

  
   
  
       hive.metastore.uris
  
        thrift://192.168.18.215:9083
  
   
  

  配置好连接信息,连接命令行:
# /opt/apache-hive-1.2.0-bin/bin/hive  7.Hive常用SQL命令
  7.1 先创建一个测试库
hive> create database test;  7.2 创建tb1表,并指定字段分隔符为tab键(否则会插入NULL)
hive> create table tb1(id int,name string)row format delimited fields terminated by '\t'  如果想再创建一个表,而且表结构和tb1一样,可以这样:
hive> create table tb3 like tb1;  查看下表结构:
hive> describe tb3;  
OK
  
id                     int
  
name                   string
  
Time taken: 0.091 seconds, Fetched: 2 row(s)
  7.3 从本地文件中导入数据到Hive表
  先创建数据文件,键值要以tab键空格:
# cat kv.txt  
1       zhangsan
  
2       lisi
  
3       wangwu
  再导入数据:
hive> load data local inpath'/root/kv.txt' overwrite into table tb1;  7.4 从HDFS中导入数据到Hive表
# hadoop fs -cat /kv.txt   #查看hdfs中要导入的数据  
1       zhangsan
  
2       lisi
  
3       wangwu
  
hive> load data inpath '/kv.txt'overwrite into table tb1;
  7.5 查询是否导入成功
hive> select * from tb1;  
OK
  
1       zhangsan
  
2       lisi
  
3       wangwu
  
Time taken: 0.209 seconds,Fetched: 3 row(s)
  博客地址:http://lizhenliang.blog.51cto.com
  
  上面是基本表的简单操作,为了提高处理性能,Hive引入了分区机制,那我们就了解分区表概念:
  1>.分区表是在创建表时指定的分区空间
  2>.一个表可以有一个或多个分区,意思把数据划分成块
  3>.分区以字段的形式在表结构中,不存放实际数据内容
  分区表优点:将表中数据根据条件分配到不同的分区中,缩小查询范围,提高检索速度和处理性能。
  单分区表:
  7.6 创建单分区表tb2(HDFS表目录下只有一级目录):
hive> create table tb2(idint,name string) partitioned by (dt string) row format delimited fieldsterminated by '\t';  注:dt可以理解为分区名称。
  7.7 从文件中把数据导入到Hive分区表,并定义分区信息
hive> load data local inpath '/root/kv.txt' into table tb2 partition (dt='2015-06-26');  
hive> load data local inpath '/root/kv.txt' into table tb2 partition (dt='2015-06-27');
  7.8 查看表数据
hive> select * from tb2;  
OK
  
1       zhangsan  2015-06-26
  
2       lisi     2015-06-26
  
3       wangwu   2015-06-26
  
1       zhangsan  2015-06-27
  
2       lisi   2015-06-27
  
3       wangwu   2015-06-27
  
Time taken: 0.223 seconds,Fetched: 6 row(s)
  7.9 查看HDFS仓库中表目录变化
# hadoop fs -ls -R /user/hive/warehouse/test.db/tb2  
drwxr-xr-x   - root supergroup          0 2015-06-26 04:12/user/hive/warehouse/test.db/tb2/dt=2015-06-26
  
-rwxr-xr-x   3 root supergroup         27 2015-06-26 04:12 /user/hive/warehouse/test.db/tb2/dt=2015-06-26/kv.txt
  
drwxr-xr-x   - root supergroup          0 2015-06-26 04:15/user/hive/warehouse/test.db/tb2/dt=2015-06-27
  
-rwxr-xr-x   3 root supergroup         27 2015-06-26 04:15/user/hive/warehouse/test.db/tb2/dt=2015-06-27/kv.txt
  可以看到tb2表导入的数据根据日期将数据划分到不同目录下。
  多分区表:
  7.10 创建多分区表tb3(HDFS表目录下有一级目录,一级目录下再有子级目录)
hive> create table tb3(idint,name string) partitioned by (dt string,location string) row formatdelimited fields terminated by '\t';  7.11 从文件中把数据导入到Hive分区表,并定义分区信息
hive> load data local inpath '/root/kv.txt' into table tb3 partition (dt='2015-06- 26',location='beijing');  
hive> load data local inpath '/root/kv.txt' into table tb3 partition (dt='2015-06-27',location='shanghai');
  7.12 查看表数据
hive> select * from tb3;  
OK
  
1       zhangsan  2015-06-26      beijing
  
2       lisi     2015-06-26      beijing
  
3       wangwu    2015-06-26      beijing
  
1       zhangsan  2015-06-26      shanghai
  
2       lisi     2015-06-26      shanghai
  
3       wangwu    2015-06-26      shanghai
  
Time taken: 0.208 seconds,Fetched: 6 row(s)
  7.13 查看HDFS仓库中表目录变化
# hadoop fs -ls -R /user/hive/warehouse/test.db/tb3  drwxr-xr-x   - root supergroup          0 2015-06-26 04:35/user/hive/warehouse/test.db/tb3/dt=2015-06-26
  drwxr-xr-x   - root supergroup          0 2015-06-26 04:35 /user/hive/warehouse/test.db/tb3/dt=2015-06-26/location=beijing
  -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:35/user/hive/warehouse/test.db/tb3/dt=2015-06-26/location=beijing/kv.txt
  drwxr-xr-x   - root supergroup          0 2015-06-26 04:45 /user/hive/warehouse/test.db/tb3/dt=2015-06-27
  drwxr-xr-x   - root supergroup          0 2015-06-26 04:45/user/hive/warehouse/test.db/tb3/dt=2015-06-27/location=shanghai
  -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:45/user/hive/warehouse/test.db/tb3/dt=2015-06-27/location=shanghai/kv.txt
  可以看到表中一级dt分区目录下又分成了location分区。
  7.14 查看表分区信息
hive> show partitions tb2;  7.15 根据分区查询数据
hive> select name from tb3 where dt='2015-06-27';  7.16 重命名分区
hive> alter table tb3 partition (dt='2015-06-27',location='shanghai') rename to partition(dt='20150627',location='shanghai');  7.17 删除分区
hive> alter table tb3 droppartition (dt='2015-06-26',location='shanghai');  7.18 模糊搜索表
hive> show tables 'tb*';  7.19 给表新添加一列
hive> alter table tb1 addcolumns (commnet string);  7.20 重命名表
hive> alter table tb1 rename to new_tb1;  7.21 删除表
hive> drop table new_tb1;  8.启动过程中遇到错误
  报错1:
  [ERROR]Terminal initialization failed; falling back to unsupported

  java.lang.IncompatibleClassChangeError:Found>  解决方法,将hive/lib下jline包拷贝到hadoop/yarn/lib下:
# cp /opt/apache-hive-1.2.0-bin/lib/jline-2.12.jar /opt/hadoop-2.6.0/share/hadoop/yarn/lib/  
# rm /opt/hadoop-2.6.0/share/hadoop/yarn/lib/jline-0.9.94.jar
  报错2:
  javax.jdo.JDOFatalInternalException:Error creating transactional connection factory
  解决方法,在百度下载java连接MySQL包放到hive/lib下:
# cp mysql-connector-java-5.1.10-bin.jar /opt/apache-hive-1.2.0-bin/lib


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-628276-1-1.html 上篇帖子: Hadoop2.6.0学习笔记(十四)Hadoop Two HA: ActiveStandbyElector 下篇帖子: Ganglia监控Hadoop与HBase集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表