基于Hadoop2.7.3集群数据仓库Hive1.2.2的部署及使用

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处理在线查询。

1.安装hive通过二进制包安装
下载地址:http://mirrors.shuosc.org/apache/hive/stable/apache-hive-1.2.2-bin.tar.gz
tar -zxf apache-hive-1.2.2-bin.tar.gz

配置环境变量

  1. # vi /etc/profile
  2. HIVE_HOME=/data/yunva/apache-hive-1.2.-bin
  3. PATH=$PATH:$HIVE_HOME/bin
  4. export HIVE_NAME PATH
  5. # source /etc/profile

2.安装mysql,存储hive相关的信息(此处因为资源使用问题,mysql安装在了另外的服务器中)

  1. # yum install -y mariadb mariadb-server
  2. # systemctl start mariadb

在MySQL创建Hive元数据存放库和连接用户

  1. mysql>create database hive;
  2. mysql>grant all on *.* to'hive'@'%' identified by 'hive';
  3. mysql>flush privileges;

3.配置hive

  1. cd /data/yunva/apache-hive-1.2.-bin/conf
  2. cp hive-default.xml.template hive-default.xml

配置hive连接mysql的信息
# vim hive-site.xml

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <property>
  5. <name>javax.jdo.option.ConnectionURL</name>
  6. <value>jdbc:mysql://10.10.11.214:3306/hive?createDatabaseIfNotExist=true</value>
  7. <description>JDBC connect string for a JDBC metastore</description>
  8. </property>
  9. <property>
  10. <name>javax.jdo.option.ConnectionDriverName</name>
  11. <value>com.mysql.jdbc.Driver</value>
  12. <description>Driver class name for a JDBC metastore</description>
  13. </property>
  14.  
  15. <property>
  16. <name>javax.jdo.option.ConnectionUserName</name>
  17. <value>hive</value>
  18. <description>username to use against metastore database</description>
  19. </property>
  20. <property>
  21. <name>javax.jdo.option.ConnectionPassword</name>
  22. <value>hive</value>
  23. <description>password to use against metastore database</description>
  24. </property>
  25. </configuration>

4.安装java连接mysql的驱动
下载地址:https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.45.tar.gz
将解压的mysql-connector-java-5.1.45-bin.jar放到/data/yunva/apache-hive-1.2.2-bin/lib目录

5.启动Hive服务

  1. # hive --service metastore &
  2.  
  3. [root@test3 apache-hive-1.2.-bin]# ps -ef|grep hive
  4. root : pts/ :: /usr/java/jdk1..0_65/bin/java -Xmx256m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/data/yunva/hadoop-2.7./logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/data/yunva/hadoop-2.7. -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Xmx512m -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /data/yunva/apache-hive-1.2.-bin/lib/hive-service-1.2..jar org.apache.hadoop.hive.metastore.HiveMetaStore
  5. root : pts/ :: grep hive
  6. [root@test3 apache-hive-1.2.-bin]# jps
  7. HRegionServer
  8. Jps
  9. RunJa # hive会启动叫做RunJa的程序

客户端配置,需要集成Hadoop环境
scp -P 48490 -r apache-hive-1.2.2-bin 10.10.114.112:/data/yunva

配置环境变量:
vim /etc/profile

# hive client
HIVE_HOME=/data/yunva/apache-hive-1.2.2-bin
PATH=$PATH:$HIVE_HOME/bin
export HIVE_NAME PATH

# vi hive-site.xml(或者直接使用原有配置不变,此时hive就有两个服务端了)

  1. <configuration>
  2. <!--通过thrift方式连接hive-->
  3. <property>
  4. <name>hive.metastore.uris</name>
  5. <value>thrift://hive_server_ip:9083</value>
  6. </property>
  7. </configuration>

简单测试:
执行hive命令会进入命令界面:

  1. [root@test3 apache-hive-1.2.-bin]# hive
  2.  
  3. Logging initialized using configuration in jar:file:/data/yunva/apache-hive-1.2.-bin/lib/hive-common-1.2..jar!/hive-log4j.properties
  4. hive> show databases;
  5. OK
  6. default
  7. Time taken: 1.158 seconds, Fetched: row(s)
  8.  
  9. hive> create database yunvatest;
  10. hive> use yunvatest;
  11. OK
  12. Time taken: 0.021 seconds
  13. hive> show databases;
  14. OK
  15. default
  16. yunvatest
  17. Time taken: 0.225 seconds, Fetched: row(s)
  18. hive> create table table_test(id string,name string);
  19. OK
  20. Time taken: 0.417 seconds
  21. hive> show tables;
  22. OK
  23. table_test
  24. Time taken: 0.033 seconds, Fetched: row(s)

6.Hive常用SQL命令
6.1先创建一个测试库

  1. hive> create database test;
  2. hive> use test;

创建tb1表,并指定字段分隔符为tab键(否则会插入NULL)

  1. hive> create table tb1(id int,name string) row format delimited fields terminated by '\t';

如果想再创建一个表,而且表结构和tb1一样,可以这样:
hive> create table table2 like tb1;

查看下表结构:
hive> describe table2;
OK
id int
name string
Time taken: 0.126 seconds, Fetched: 2 row(s)

6.2从本地文件中导入数据到Hive表
先创建数据文件,键值要以tab键空格:

  1. # cat seasons.txt
  2. spring
  3. summer
  4. autumn
  5. winter

再导入数据:
hive> load data local inpath'/root/seasons.txt' overwrite into table tb1;
查询是否导入成功

  1. hive> select * from tb1;
  2. OK
  3. spring
  4. summer
  5. autumn
  6. winter

6.3从HDFS中导入数据到Hive表:

列出hdfs文件系统根目录下的目录
hadoop fs -ls /

创建test根目录
hadoop fs -mkdir /test
put 命令向/test目录写入文件为siji.txt
hadoop fs -put /root/seasons.txt /test/siji.txt

查看siji.txt文件内容

  1. # hadoop fs -cat /test/siji.txt
  2. // :: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  3. spring
  4. summer
  5. autumn
  6. winte

hive> load data inpath '/test/siji.txt' overwrite into table table2;
Loading data to table test.table2
Table test.table2 stats: [numFiles=1, numRows=0, totalSize=36, rawDataSize=0]
OK
Time taken: 0.336 seconds

查询是否导入成功

  1. hive> select * from table2;
  2. OK
  3. spring
  4. summer
  5. autumn
  6. winter
  7. Time taken: 0.074 seconds, Fetched: row(s)

6.4上面是基本表的简单操作,为了提高处理性能,Hive引入了分区机制,那我们就了解分区表概念:

1>.分区表是在创建表时指定的分区空间
2>.一个表可以有一个或多个分区,意思把数据划分成块
3>.分区以字段的形式在表结构中,不存放实际数据内容
分区表优点:将表中数据根据条件分配到不同的分区中,缩小查询范围,提高检索速度和处理性能

6.5单分区表:
创建单分区表tb2(HDFS表目录下只有一级目录):
hive> create table tb2(id int,name string) partitioned by (dt string) row format delimited fields terminated by '\t';

注:dt可以理解为分区名称。

从文件中把数据导入到Hive分区表,并定义分区信息(需要已经存在的表)

hive> load data local inpath '/root/seasons.txt' into table tb2 partition (dt='2017-12-06');
hive> load data local inpath '/root/seasons.txt' into table tb2 partition (dt='2017-12-07');

查看表数据

  1. hive> select * from tb2;
  2. OK
  3. spring --
  4. summer --
  5. autumn --
  6. winter --
  7. spring --
  8. summer --
  9. autumn --
  10. winter --
  11. Time taken: 0.086 seconds, Fetched: row(s)

查看HDFS仓库中表目录变化

  1. [root@test4_haili_dev ~]# hadoop fs -ls -R /user/hive/warehouse/test.db/tb2
  2. // :: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  3. drwxrwxrwx - root supergroup -- : /user/hive/warehouse/test.db/tb2/dt=--
  4. -rwxrwxrwx root supergroup -- : /user/hive/warehouse/test.db/tb2/dt=--/seasons.txt
  5. drwxrwxrwx - root supergroup -- : /user/hive/warehouse/test.db/tb2/dt=--
  6. -rwxrwxrwx root supergroup -- : /user/hive/warehouse/test.db/tb2/dt=--/seasons.txt

可以看到tb2表导入的数据根据日期将数据划分到不同目录下

6.6多分区表:
创建多分区表tb3(HDFS表目录下有一级目录,一级目录下再有子级目录)

hive> create table table3(id int,name string) partitioned by (dt string,location string) row format delimited fields terminated by '\t';

从文件中把数据导入到Hive分区表,并定义分区信息

hive> load data local inpath '/root/seasons.txt' into table table3 partition (dt='2017-12-06',location='guangzhou');
hive> load data local inpath '/root/seasons.txt' into table table3 partition (dt='2017-12-07',location='shenzhen');

查看表数据

  1. hive> select * from table3;
  2. OK
  3. spring -- guangzhou
  4. summer -- guangzhou
  5. autumn -- guangzhou
  6. winter -- guangzhou
  7. spring -- shenzhen
  8. summer -- shenzhen
  9. autumn -- shenzhen
  10. winter -- shenzhen

查看HDFS仓库中表目录变化

  1. [root@test3 yunva]# hadoop fs -ls -R /user/hive/warehouse/test.db/table3
  2. // :: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  3. drwxrwxrwx - root supergroup -- : /user/hive/warehouse/test.db/table3/dt=--
  4. drwxrwxrwx - root supergroup -- : /user/hive/warehouse/test.db/table3/dt=--/location=guangzhou
  5. -rwxrwxrwx root supergroup -- : /user/hive/warehouse/test.db/table3/dt=--/location=guangzhou/seasons.txt
  6. drwxrwxrwx - root supergroup -- : /user/hive/warehouse/test.db/table3/dt=--
  7. drwxrwxrwx - root supergroup -- : /user/hive/warehouse/test.db/table3/dt=--/location=shenzhen
  8. -rwxrwxrwx root supergroup -- : /user/hive/warehouse/test.db/table3/dt=--/location=shenzhen/seasons.txt

可以看到表中一级dt分区目录下又分成了location分区。

查看表分区信息
hive> show partitions table3;
OK
dt=2017-12-06/location=guangzhou
dt=2017-12-07/location=shenzhen
Time taken: 0.073 seconds, Fetched: 2 row(s)

根据分区查询数据

hive> select name from table3 where dt='2017-12-06';
OK
spring
summer
autumn
winter
Time taken: 0.312 seconds, Fetched: 4 row(s)

重命名分区
hive> alter table table3 partition (dt='2017-12-06',location='guangzhou') rename to partition(dt='20171206',location='shanghai');

删除分区
hive> alter table table3 drop partition(dt='2017-12-06',location='guangzhou');
OK
Time taken: 0.113 seconds
可以看到已经查不出来了
hive> select name from table3 where dt='2017-12-06';
OK
Time taken: 0.078 seconds

模糊搜索表
hive> show tables 'tb*';
OK
tb1
tb2

给表新添加一列

  1. hive> alter table tb1 add columns (comment string);
  2. OK
  3. Time taken: 0.106 seconds
  4. hive> describe tb1;
  5. OK
  6. id int
  7. name string
  8. comment string
  9. Time taken: 0.079 seconds, Fetched: row(s)

重命名表
hive> alter table tb1 rename to new_tb1;
OK
Time taken: 0.095 seconds
hive> show tables;
OK
new_tb1
table2
table3
tb2

删除表
hive> drop table new_tb1;
OK
Time taken: 0.094 seconds
hive> show tables;
OK
table2
table3
tb2

基于Hadoop2.7.3集群数据仓库Hive1.2.2的部署及使用的更多相关文章

  1. Linux基于Hadoop2.8.0集群安装配置Hive2.1.1及基础操作

    前言 安装Apache Hive前提是要先安装hadoop集群,并且hive只需要在hadoop的namenode节点集群里安装即可,安装前需保证Hadoop已启(动文中用到了hadoop的hdfs命 ...

  2. hive1.2.1安装步骤(在hadoop2.6.4集群上)

    hive1.2.1在hadoop2.6.4集群上的安装 hive只需在一个节点上安装即可,这里再hadoop1上安装 1.上传hive安装包到/usr/local/目录下 2.解压 tar -zxvf ...

  3. 分布式Hbase-0.98.4在Hadoop-2.2.0集群上的部署

    fesh个人实践,欢迎经验交流!本文Blog地址:http://www.cnblogs.com/fesh/p/3898991.html Hbase 是Apache Hadoop的数据库,能够对大数据提 ...

  4. 基于centos6.5 hbase 集群搭建

    注意本章内容是在上一篇文章“基于centos6.5 hadoop 集群搭建”基础上创建的 1.上传hbase安装包 hbase-0.96.2-hadoop2 我的目录存放在/usr/hadoop/hb ...

  5. Hadoop2.X分布式集群部署

    本博文集群搭建没有实现Hadoop HA,详细文档在后续给出,本次只是先给出大概逻辑思路. (一)hadoop2.x版本下载及安装 Hadoop 版本选择目前主要基于三个厂商(国外)如下所示: 基于A ...

  6. Ubuntu下用hadoop2.4搭建集群(伪分布式)

    要真正的学习hadoop,就必需要使用集群,可是对于普通开发人员来说,没有大规模的集群用来測试,所以仅仅能使用伪分布式了.以下介绍怎样搭建一个伪分布式集群. 为了节省时间和篇幅,前面一些步骤不再叙述. ...

  7. 新闻实时分析系统-Hadoop2.X分布式集群部署

    (一)hadoop2.x版本下载及安装 Hadoop 版本选择目前主要基于三个厂商(国外)如下所示: 1.基于Apache厂商的最原始的hadoop版本, 所有发行版均基于这个版本进行改进. 2.基于 ...

  8. 新闻网大数据实时分析可视化系统项目——3、Hadoop2.X分布式集群部署

    (一)hadoop2.x版本下载及安装 Hadoop 版本选择目前主要基于三个厂商(国外)如下所示: 1.基于Apache厂商的最原始的hadoop版本, 所有发行版均基于这个版本进行改进. 2.基于 ...

  9. Tomcat:基于Apache+Tomcat的集群搭建

    根据Tomcat的官方文档说明可以知道,使用Tomcat配置集群需要与其它Web Server配合使用才可以完成,典型的有Apache和IIS. 这里就使用Apache+Tomcat方式来完成基于To ...

随机推荐

  1. VMware Workstation Pro 14 虚拟机安装教程

    准备学习一下linxus,可不想双系统,那么只有虚拟机这条路了.故在此记录一下安装VMware的过程. 一.下载VMware 我用的是VMware Workstation Pro 14(其他版本也可以 ...

  2. 细说java系列之反射

    什么是反射 反射机制允许在Java代码中获取被JVM加载的类信息,如:成员变量,方法,构造函数等. 在Java包java.lang.reflect下提供了获取类和对象反射信息的相关工具类和接口,如:F ...

  3. Silverlight分页

    对于分页,首先要明确一些高效率的策略: 1.一次获取还是每次获取一页的数据 既然考虑了分页,肯定是数据量大,大到不能一页来显示,可能会很多页,我的做法更倾向于,首先要考虑用户可能看的页数,就是说用户可 ...

  4. 双数组Trie树中叶子结点check[t]=t的证明

    双数组Trie树,其实就是用两个一维数组来表示Trie树这种数据结构. 一个数组称为BASE,另一个数组为CHECK.转移条件如下: 对于状态s,接收字符c,转移到状态t BASE[s]+c=t CH ...

  5. MySQL 字符集问题

    MySQL 支持许多字符集及其编码方案, 甚至是不同编码之间的转换. 在使用 MySQL 进行应用程序编程时, 常常会出现乱码现象, 这通常是由于客户端没有声明与 MySQL 服务器通信的字符串编码造 ...

  6. [C++]PAT乙级1005. 继续(3n+1)猜想 (25/25)

    /* 1005. 继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推 ...

  7. Java EE之Struts2异常[No mapping found for dependency [type=java.lang.String, name='actionPackages'#java.lang.RuntimeException]【摘抄】

    本博文摘自:http://www.blogjava.net/nkjava/archive/2009/03/29/262705.html 出现这个问题,可能是添加了struts2-codebehind包 ...

  8. rabbitMQ学习1:消息队列介绍与rabbitmq安装使用

    1. 什么是消息队列 生活里的消息队列,如同邮局的邮箱, 如果没邮箱的话, 邮件必须找到邮件那个人,递给他,才玩完成,那这个任务会处理的很麻烦,很慢,效率很低 但是如果有了邮箱, 邮件直接丢给邮箱,用 ...

  9. C#获取客户端IP地址

    客户端ip:Request.ServerVariables.Get("Remote_Addr").ToString();客户端主机名:Request.ServerVariables ...

  10. Tip:什么是JavaBean

    可视化JavaBean  非可视化JavaBean(分:值JavaBean和工具JavaBean) JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参 ...