hive分区对应hadoop_Hive架构与部署

5ef2dd3e701a1218f7d46dc0a803bb75.png

一般做大数据分析都会建立在Hive的基础上,Hive本身有两个主要的功能:维护元数据信息,比如库、表以及他们在Hdfs上如何存储;提供查询分析能力,Hive的查询引擎可以自由替换,比如MapReduce、Spark等。

本篇就通过架构和部署等方面来了解下Hive。

1 架构

Hive从架构上主要分成三个角色,客户端、执行引擎、元数据MetaStore。

2aaa73d81ed081aea3c007d8f02e7157.png

客户端: 支持多种连接方式,用户可以通过这些客户端连接到Hive集群并执行命令。常用的如Jdbc可以很方便的与一些web项目集成,beeline命令行,thrift跨语言rpc。之前做过的项目直接使用jdbc多一点。

HiveServer2:一般提到HiveServer,还会有一种叫法叫HiveServer2。其实他们是一个东西,只不过HiveServer2是后期优化的升级版,支持多客户端访问以及身份认证等功能。回头说说这个HiveServer2,它是Hive的核心组件,包括接收客户端请求,查询语法的解析、优化、执行等。Hive也支持多种查询引擎,比如MapReduce以及Spark。执行的过程其实大体相同,都是通过一个语法解析解析SQL,然后生成对应执行引擎的查询任务,提交到对应的集群上执行。如果是MapReduce会翻译成一组MapReduce提交到Yarn上执行,如果是Spark也会翻译成Spark的DAG图执行。

元数据:元数据服务提供了对应库和表等信息的维护,比如表的表结构信息、分区信息、字段信息、统计信息等。很多计算框架都会依赖于这些统计信息进行查询的优化,对于大数据的场景这些统计信息有时候是缺失的,因此Spark也在3.0推出了动态查询自适应的特性。

2 部署

如果使用的是Hadoop,那推荐直接使用cdh安装大数据套件,这些东西就都有了。如果是K8s环境,则建议采用Docker方案,无论是Mac还是Windows只要安装Docker就可以一键部署。部署脚本参考项目:

https://github.com/big-data-europe/docker-hive

这个项目内置了Hadoop的简易环境,比如单机版的hdfs(namenode+datanode),提供了一个单机版的presto,基于postgre的metastore,hive-server,这样就构成了一个极简的Hive版本。如果想要用Spark来连接这个Hive进行查询,需要修改下载的docker-compose.yml:

version: "3"

services:
  namenode:
    image: bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8
    volumes:
      - namenode:/hadoop/dfs/name
    environment:
      - CLUSTER_NAME=test
    env_file:
      - ./hadoop-hive.env
    ports:
      - "50070:50070"
      # 主要修改这里,开放8020端口
      - "8020:8020"
  datanode:
    image: bde2020/hadoop-datanode:2.0.0-hadoop2.7.4-java8
    volumes:
      - datanode:/hadoop/dfs/data
    env_file:
      - ./hadoop-hive.env
    environment:
      SERVICE_PRECONDITION: "namenode:50070"
    ports:
      - "50075:50075"
      # 增加datanode端口开放
      - "50010:50010"
  hive-server:
    image: bde2020/hive:2.3.2-postgresql-metastore
    env_file:
      - ./hadoop-hive.env
    environment:
      HIVE_CORE_CONF_javax_jdo_option_ConnectionURL: "jdbc:postgresql://hive-metastore/metastore"
      SERVICE_PRECONDITION: "hive-metastore:9083"
    ports:
      - "10000:10000"
  hive-metastore:
    image: bde2020/hive:2.3.2-postgresql-metastore
    env_file:
      - ./hadoop-hive.env
    command: /opt/hive/bin/hive --service metastore
    environment:
      SERVICE_PRECONDITION: "namenode:50070 datanode:50075 hive-metastore-postgresql:5432"
    ports:
      - "9083:9083"
  hive-metastore-postgresql:
    image: bde2020/hive-metastore-postgresql:2.3.0
  presto-coordinator:
    image: shawnzhu/prestodb:0.181
    ports:
      - "8080:8080"

volumes:
  namenode:
  datanode:

然后宿主机配置增加三个域名:

1 namenode
2 namenode的镜像id
3 datanode的镜像id

这三个主机都配成宿主主机的IP即可。

修改完成后启动Docker-Compose并下载相关镜像

docker-compose up -d

安装成功后如下图所示:

PS D:\workspace\docker-hive> docker-compose up -d
Creating network "docker-hive_default" with the default driver
Creating docker-hive_hive-server_1               ... done
Creating docker-hive_hive-metastore_1            ... done
Creating docker-hive_hive-metastore-postgresql_1 ... done
Creating docker-hive_datanode_1                  ... done
Creating docker-hive_namenode_1                  ... done
Creating docker-hive_presto-coordinator_1        ... done

安装完成后内部包含

PS D:\workspace\docker-hive> docker ps
CONTAINER ID        IMAGE                                             COMMAND                  CREATED             STATUS                            PORTS                                          NAMES
3edc920f9709        bde2020/hive-metastore-postgresql:2.3.0           "/docker-entrypoint.…"   8 seconds ago       Up 6 seconds                      5432/tcp                                       docker-hive_hive-metastore-postgresql_1
d548c32a8e92        bde2020/hadoop-datanode:2.0.0-hadoop2.7.4-java8   "/entrypoint.sh /run…"   8 seconds ago       Up 6 seconds (health: starting)   0.0.0.0:50075->50075/tcp                       docker-hive_datanode_1        
f070bb17a740        shawnzhu/prestodb:0.181                           "./bin/launcher run"     8 seconds ago       Up 6 seconds                      0.0.0.0:8080->8080/tcp                         docker-hive_presto-coordinator_1
8de0d6d2cc37        bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8   "/entrypoint.sh /run…"   8 seconds ago       Up 6 seconds (health: starting)   0.0.0.0:50070->50070/tcp                       docker-hive_namenode_1        
ecbc1eafc995        bde2020/hive:2.3.2-postgresql-metastore           "entrypoint.sh /bin/…"   8 seconds ago       Up 6 seconds                      0.0.0.0:10000->10000/tcp, 10002/tcp            docker-hive_hive-server_1     
a907be52a04d        bde2020/hive:2.3.2-postgresql-metastore           "entrypoint.sh /opt/…"   8 seconds ago       Up 6 seconds                      10000/tcp, 0.0.0.0:9083->9083/tcp, 10002/tcp   docker-hive_hive-metastore_1  
加载测试数据
启动成功后登录到hive-server镜像中
docker-compose exec hive-server bash
使用Beeline连接hive
/opt/hive/bin/beeline -u jdbc:hive2://localhost:10000

创建hive表
CREATE TABLE pokes (foo INT, bar STRING);

加载数据
LOAD DATA LOCAL INPATH '/opt/hive/examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

使用技巧:https://www.runoob.com/docker/docker-compose.html

docker-compose down用于关闭yml配置文件中的所有镜像
docker-compose up -d 用于在后台启动所有镜像

3 参考

hiveserver2官方文档
https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2

docker-hive官方文档
https://github.com/big-data-europe/docker-hive

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值