c# hadoop_hadoop 命令

c# hadoop_hadoop 命令Hive Hive将HiveQL(类sql语言)转为MapReduce,完成数据的查询与分析,减少了编写MapReduce的复杂度。它有以下优点: 学习成本低:熟悉sql就能使用 良好的数据分析:底层

Hadoop(五)C#操作Hive

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中数据的处理。

c# hadoop_hadoop 命令

Hive工作流程

c# hadoop_hadoop 命令

  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是否启动

c# hadoop_hadoop 命令

 也可以查看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)

Hive操作

Hive是一种数据库,可以定义数据库与表来结构化数据。

https://cwiki.apache.org/confluence/display/Hive//Home#Home-UserDocumentation

数据库操作

Hive中默认存在一个default的数据库,默认的操作都应用在这个库上,可以通过bin/hive  这个cli命令查看。

hive> show databases;
OK
default Time taken: 0.075 seconds, Fetched: 1 row(s)

新建数据库

#新建数据库
CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name>

新建一个chesterdb

create database chesterdb;

删除数据库

DROP DATABASE StatementDROP (DATABASE|SCHEMA) [IF EXISTS] database_name  [RESTRICT|CASCADE];

CASCADE代表在删除数据库之前要把其中的表删除。

删除chesterdb

hive> drop database chesterdb;

表操作

新建表

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name

[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[ROW FORMAT row_format]
[STORED AS file_format]

在defaultdb中新建一个表

 CREATE TABLE IF NOT EXISTS employee ( eid int, name String, salary String, destination String)
 COMMENT "Employee details" ROW FORMAT DELIMITED FIELDS TERMINATED BY " " LINES TERMINATED BY " " STORED AS TEXTFILE;

插入本地文件数据

新建一个e.txt文件

[root@localhost ~]# cat e.txt
1201    Gopal   45000 Technical manager 1202 Manisha 45000 Proof reader

将其load进入employee表

LOAD DATA LOCAL INPATH "/root/e.txt" OVERWRITE INTO TABLE employee;

查看employee中是否存在数据

select * from employee;

插入HDFS文件数据

load hdfs中的文件到hive,新建一个e2.txt

[root@localhost ~]# cat e2.txt
1203    Gopal1  45000 Technical manager 1204 Manisha1 45000 Proof reader

将其put到hdfs中的chesterdata文件夹

[root@localhost ~]# hdfs dfs -mkdir /chesterdata
[root@localhost ~]# hdfs dfs -put e2.txt /chesterdata

然后在hive的cli中将hdfs中的/chesterdata/e2.txt load到employee表,需要注意的是,load之后hdfs中的文件就会被删除

load data inpath "/chesterdata/e2.txt"  OVERWRITE INTO TABLE employee;

查看employee中是否存在数据

select * from employee;

删除表

DROP TABLE [IF EXISTS] table_name;

分区

新建分区

Hive可以通过分区实现数据的隔离,这样可实现数据的快速查询。

 CREATE TABLE IF NOT EXISTS employee2 ( eid int, name String, salary String)
 COMMENT "Employee details" PARTITIONED BY (destination String) ROW FORMAT DELIMITED FIELDS TERMINATED BY " " LINES TERMINATED BY " " STORED AS TEXTFILE;

我们将e2.txt load进此表

hdfs dfs -put e2.txt /chesterdata

load data inpath "/chesterdata/e2.txt"  OVERWRITE INTO TABLE employee2;

重命名分区

ALTER TABLE employee2 PARTITION (destination="Technical manager") RENAME TO PARTITION (destination="T2");

删除分区

ALTER TABLE employee2 DROP  PARTITION (destination="T2");

查询

hive的查询支持我们常见的where、order by、group by、join等语句

select Name,count(1) from employee2 where destination="Technical manager" group by Name;

视图

hive也支持视图,创建视图语法如下

CREATE VIEW emp_v2 AS
select Name,count(1) from employee2 where destination="Technical manager" group by Name;

查看视图

select * from emp_v2;

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启动

c# hadoop_hadoop 命令

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

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

4.打开odbc,添加dsn

c# hadoop_hadoop 命令

 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)

原文地址:https://www.cnblogs.com/chenyishi/archive/2022/05/04/16219828.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5314.html

(0)
上一篇 2023-05-14
下一篇 2023-05-14

相关推荐

  • Python requests模块使用指南

    Python requests模块使用指南Python requests模块是用于向外部资源发送HTTP请求的Python库。它使得HTTP请求可以用更简单、更简洁的方式发送,并且支持多种HTTP请求方法。本篇文章为大家介绍requests模块的基本用法和高级用法,帮助读者更好地理解Python网络请求。

    2024-08-12
    30
  • CentOS7安装MySQL(完整版)[通俗易懂]

    CentOS7安装MySQL(完整版)[通俗易懂]在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。 1 下载并安装MySQL官方的 Yum R…

    2022-12-19
    156
  • Python优化语法:简洁高效的核心关键词

    Python优化语法:简洁高效的核心关键词对于Python工程师来说,一直以来就更加关注代码的简洁性和高效性,这也不无道理,Python以其简洁易懂的语法、高效的运行速度和强大的程序库生态圈著称。而本文就将针对Python中的几个核心关键词,分别为大家详细阐述如何优化自己的代码,更好地利用Python的特性。

    2024-02-18
    102
  • Python中使用max函数的方法

    Python中使用max函数的方法在Python中,max是一个非常有用的函数。它可以在一组值中找到最大值,无论这组值是数字、字符串还是其他类型。本文将从多个方面对Python中使用max函数的方法做详细的阐述,让读者掌握这个重要工具的使用。

    2024-04-14
    75
  • net start npf_MySQL启动

    net start npf_MySQL启动造成这种情况的原因有很多,如果直接百度错误信息的话,不一定能很快解决问题,所以,出现这种情况,我们可以使用 mysqld console 命令来查看报错信息,然后根据报错信息来百度,这样就很快定位到问

    2023-01-23
    171
  • conda与pip的区别

    conda与pip的区别conda与pip是python中两个常用的包管理工具。pip是python的包管理工具,主要用于管理和安装python的第三方库和模块。而conda是Anaconda中的包管理工具,是一个开源的跨平台环境管理系统,旨在解决多语言依赖问题。本文将阐述conda和pip在功能、依赖管理、平台支持、环境管理等方面的区别和优劣。

    2024-07-04
    49
  • MySQL进阶系列:一文详解explain[通俗易懂]

    MySQL进阶系列:一文详解explain[通俗易懂]explain有何用处呢: 为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。 ​ 可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道

    2023-04-22
    148
  • Python命令行运行

    Python命令行运行Python是一种高级编程语言,广受欢迎且使用广泛。它被广泛应用于程序开发、Web开发和数据分析等领域。Python代码可以通过多种方式进行运行,其中一种是通过命令行运行。

    2024-06-02
    69

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注