Hive

Hive将HiveQL(类sql语言)转为MapReduce,完成数据的查询与分析,减少了编写MapReduce的复杂度。它有以下优点:

  • 学习成本低:熟悉sql就能使用
  • 良好的数据分析:底层基于MapReduce实现

同样存在一些缺点:

  • HiveDL表达能力有限
  • 效率不高
  • Hive调优比较困难

Hive架构

  1. 用户通过Hive的用户接口(User Interfaces)与hive交互,常见的用户接口有CLI,JDBC/ODBC,WEB UI等
  2. Hive将元数据存在Meta Store中,元数据包括数据库、表、列、类型、数据所在目录等
  3. HiveQL Process Engine实现HiveQL的语法分析、优化生成对应的查询计划,存于HDFS中。
  4. 由Execution Engine实现HiveQL Process Engine与MapReduce的结合。最终实现对HDFS中数据的处理。

Hive工作流程

  1. Execute Query:Hive接口,如命令行或Web UI发送查询驱动程序(任何数据库驱动程序,如JDBC,ODBC等)来执行。
  2. Get Plan: 在驱动程序帮助下查询编译器,分析查询检查语法和查询计划或查询的要求。
  3. Get MetaData:编译器发送元数据请求到Metastore(任何数据库)。
  4. Send MetaData:Metastore发送元数据,以编译器的响应。
  5. Send Plan:编译器检查要求,并重新发送计划给驱动程序。到此为止,查询解析和编译完成。
  6. Excute Plan:驱动程序发送的执行计划到执行引擎。
  7. Excute Job:执行作业的过程是一个MapReduce工作。执行引擎发送作业给JobTracker,在名称节点并把它分配作业到TaskTracke。
    1. MetaData Ops:在执行时,执行引擎可以通过Metastore执行元数据操作。
  8. Fetch Results:执行引擎接收来自数据节点的结果。
  9. Send Results:执行引擎发送这些结果值给驱动程序。
  10. Send Results:驱动程序将结果发送给Hive接口。

Hive安装

1.下载Hive3.1.2

https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/

2.解压

tar -zxvf apache-hive-3.1.2-bin.tar.gz

3.配置环境变量

vi /etc/profile

export HIVE_HOME=/usr/local/hive312/apache-hive-3.1.2-bin
export HIVE_CONF_DIR=/usr/local/hive312/apache-hive-3.1.2-bin/conf #生效
source /etc/profile

4.将mysql作为metastore,下载mysql-connetctor

https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.46

将其放入$HIVE_HOME/lib文件夹中

5.配置conf/hive-env.sh

cd conf
mv hive-env.sh.template hive-env.sh

6.将以下内容加入hive-env.sh

export JAVA_HOME=/usr/local/java18/jdk1.8.0_331
export HADOOP_HOME=/usr/local/hadoop323/hadoop-3.2.3
export HIVE_HOME=/usr/local/hive312/apache-hive-3.1.2-bin
export HIVE_CONF_DIR=/usr/local/hive312/apache-hive-3.1.2-bin/conf

7.添加conf/hive-site.xml文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>admin</value>
<description>password to use against metastore database</description>
</property>
</configuration>

8.替换guava文件

因为hadoop/share/hadoop/common/lib目录下的guava和/apache-hive-3.1.2-bin/lib目录下的guava版本不同。需要将版本将hadoop高版本的guava拷贝到hive的目录下,删除hive低的版本。

cp /usr/local/hadoop323/hadoop-3.2.3/share/hadoop/common/lib/guava-27.0-jre.jar /usr/local/hive312/apache-hive-3.1.2-bin/lib/

rm -rf /usr/local/hive312/apache-hive-3.1.2-bin/lib/guava-19.0.jar

9.初始化metastore

./bin/schematool -dbType mysql -initSchema

10.使用Hive

bin/hive

这种方式默认启动了cli,相当于以下命令

bin/hive --service cli

11.查看表

hive> show tables;

12.启动Hive Thrift Server

bin/hive --service hiveserver2 &

通过jps验证RunJar是否启动

也可以查看10000端口是否处于监听状态

[root@localhost apache-hive-3.1.2-bin]# netstat -anop |grep 10000
tcp6 0 0 :::10000 :::* LISTEN 12207/java off (0.00/0/0)

C#如何连接Hive

可以通过odbc来连接。

1.首先需要配置hadoop,从任何主机登录的root用户可以作为任意组的用户

<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>

重启hadoop

sbin/stop-dfs.sh
sbin/stop-yarn.sh sbin/start-dfs.sh
sbin/start-yarn.sh

2.启动hiveserver2 thrift server,其默认端口为10000

bin/hive --service hiveserver2 &

可通过10002端口验证是否thrift server启动

3.下载odbc,并安装(同样有linux版本)

http://package.mapr.com/tools/MapR-ODBC/MapR_Hive/MapRHive_odbc_2.1.1.0013/Windows/

4.打开odbc,添加dsn

5.新建console,并添加hive访问类

using System.Data;
using System.Data.Odbc; public class HiveOdbcClient
{ public static HiveOdbcClient Current
{
get { return new HiveOdbcClient(); }
}
public void ExcuteNoQuery(string dns, string sql)
{
OdbcConnection conn = null; try
{
conn = new OdbcConnection(dns);
conn.Open();
OdbcCommand cmd = new OdbcCommand(sql, conn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (null != conn)
{
conn.Close();
}
}
} public DataSet Query(string dns, string sql, string tblName = "tbl")
{
DataSet set = new DataSet();
OdbcConnection conn = null; try
{
conn = new OdbcConnection(dns);
conn.Open();
OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
OdbcDataAdapter adapter = new OdbcDataAdapter(cmd);
adapter.Fill(set, tblName);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (null != conn)
{
conn.Close();
}
} return set;
}
}

通过C#直接新加hive表

string dns = "DSN=test;UID=root;PWD=";

string sql = "show tables";

string sql2 = "create table Employee(ID string,Code string,Name string)";
HiveOdbcClient.Current.ExcuteNoQuery(dns, sql2); Console.WriteLine(HiveOdbcClient.Current.Query(dns, sql));

6.通过bin/hive进入交互式命令,查看employee新建成功

hive> show tables;
OK
employee
Time taken: 0.62 seconds, Fetched: 1 row(s)

Hadoop(四)C#连接Hive的更多相关文章

  1. 教你成为全栈工程师(Full Stack Developer) 四十五-一文读懂hadoop、hbase、hive、spark分布式系统架构

    转载自http://www.shareditor.com/blogshow?blogId=96 机器学习.数据挖掘等各种大数据处理都离不开各种开源分布式系统,hadoop用于分布式存储和map-red ...

  2. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  3. HADOOP+SPARK+ZOOKEEPER+HBASE+HIVE集群搭建(转)

    原文地址:https://www.cnblogs.com/hanzhi/articles/8794984.html 目录 引言 目录 一环境选择 1集群机器安装图 2配置说明 3下载地址 二集群的相关 ...

  4. Hive(3)-meta store和hdfs详解,以及JDBC连接Hive

    一. Meta Store 使用mysql客户端登录hadoop100的mysql,可以看到库中多了一个metastore 现在尤其要关注这三个表 DBS表,存储的是Hive的数据库 TBLS表,存储 ...

  5. hive学习2(Navicat连接hive)

    Navicat连接hive 第一步:win下安装好mysql 第二步:win下安装Navicat 第三步:启动hadoop集群,启动hive 第四步:Navicat连接hive 在第四步中需先配置ss ...

  6. 通过JDBC连接hive

    hive是大数据技术簇中进行数据仓库应用的基础组件,是其它类似数据仓库应用的对比基准.基础的数据操作我们可以通过脚本方式以hive-client进行处理.若需要开发应用程序,则需要使用hive的jdb ...

  7. beeline连接hive server遭遇MapRedTask (state=08S01,code=1)错误

    采用beeline连接hive server是遭遇到如下错误: 5: jdbc:hive2://bluejoe0/default> select * from hive_triples wher ...

  8. 大数据自学3-Windows客户端DbVisualizer/SQuirreL配置连接hive

    前面已经学习了将数据从Sql Server导入到Hive DB,并在Hue的Web界面可以查询,接下来是配置客户端工具直接连Hive数据库,常用的有DbVisualizer.SQuirreL SQL ...

  9. 连接Hive的客户端界面工具–SQuirrel SQL Client

    关键字:Hive客户端.界面.SQuirrel SQL Client 刚看到一个可以连接Hive的客户端界面工具–SQuirrel SQL Client,试了一下,用起来还行,在这里记录一下安装及使用 ...

随机推荐

  1. python 字典dict 增删改查操作

    初始化: a. data_dict = {} b. data_dict1 = dict() c. data_dict2 = {'key':'value'} 新增: a. data_dict[key]= ...

  2. Redis的Jedis操作(五)

    需要把jedis依赖的jar包添加到工程中.Maven工程中需要把jedis的坐标添加到依赖. 推荐添加到服务层. 1.连接单机版 第一步:创建一个Jedis对象.需要指定服务端的ip及端口. 第二步 ...

  3. Hadoop全分布式

    1.安装jdk      Linux下安装jdk-7u67-linux-x64.rpm 2.免密登录   ssl免密登录(centos6) 3.同步时间:date -s "2020-04-0 ...

  4. MariaDB数据库设置用户密码

    SET PASSWORD [FOR user] = { PASSWORD('some password') | OLD_PASSWORD('some password') | 'encrypted p ...

  5. 两个链表有一个交点,如何在时间复杂度 O(n) 和 空间复杂度 O(1) 的条件下实现?_字节跳动面试题

    输入两个链表,找出它们的第一个公共结点 我们可以首先遍历两个链表得到它们的长度,就能知道哪个链表比较长, 我们可以首先遍历两个链表得到它们的长度,就能知道哪个链表比较长,以及长的链表比短的链表多几个结 ...

  6. Spring 应用程序有哪些不同组件?

    Spring 应用一般有以下组件:接口 - 定义功能.Bean 类 - 它包含属性,setter 和 getter 方法,函数等.Spring 面向切面编程(AOP) - 提供面向切面编程的功能.Be ...

  7. RabbitMQ踩坑记

    之前我们给我们的系统加了一个使用SpringAOP+RabbitMQ+WebSocket进行实时消息通知功能(https://www.cnblogs.com/little-sheep/p/993488 ...

  8. Volcano:在离线作业混部管理平台,实现智能资源管理和作业调度

    摘要:本文结合华为CCE团队在混合部署方面的研究和实战,介绍了混合部署的背景.概念.混部技术的设计方案和实际落地情况,以及对未来的计划和展望. 现代互联网数据中心的规模随着应用服务需求的快速增长而不断 ...

  9. 后端渲染神器!Dust

    Dust一个适用于浏览器与node的异步模板框架. 先上实例 后端模板: {@inject api="http://api.myserver.com/get_message"} & ...

  10. ES6-11学习笔记--函数的参数

    参数的默认值 与解构赋值结合 length属性 作用域 函数的name属性   ES5设置函数参数默认值: function foo(x, y) { y = y || 'world'; console ...