菜鸟笔记
提升您的技术认知

hive入门到魔改-ag真人游戏

阅读 : 240

ag真人试玩娱乐官网:

apache hive

hive 是一个构建在 hadoop 之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类 sql 查询功能,用于查询的 sql 语句会被转化为 mapreduce 作业,然后提交到 hadoop 上运行。

特点

  1. 简单、容易上手 (提供了类似 sql 的查询语言 hql),使得精通 sql 但是不了解 java 编程的人也能很好地进行大数据分析;
  2. 灵活性高,可以自定义用户函数 (udf) 和存储格式;
  3. 为超大的数据集设计的计算和存储能力,集群扩展容易;
  4. 统一的元数据管理,可与 presto/impala/sparksql 等共享数据;
  5. 执行延迟高,不适合做数据的实时处理,但适合做海量数据的离线处理。

hive的体系架构

command-line shell & thrift/jdbc

可以用 command-line shell 和 thrift/jdbc 两种方式来操作数据:

  • command-line shell:通过 hive 命令行的的方式来操作数据;
  • thrift/jdbc:通过 thrift 协议按照标准的 jdbc 的方式操作数据。

metastore

在 hive 中,表名、表结构、字段名、字段类型、表的分隔符等统一被称为元数据。所有的元数据默认存储在 hive 内置的 derby 数据库中,但由于 derby 只能有一个实例,也就是说不能有多个命令行客户端同时访问,所以在实际生产环境中,通常使用 mysql 代替 derby。

hive 进行的是统一的元数据管理,就是说你在 hive 上创建了一张表,然后在 presto/impala/sparksql 中都是可以直接使用的,它们会从 metastore 中获取统一的元数据信息,同样的你在 presto/impala/sparksql 中创建一张表,在 hive 中也可以直接使用。

hql的执行流程

hive 在执行一条 hql 的时候,会经过以下步骤:

  1. 语法解析:antlr 定义 sql 的语法规则,完成 sql 词法,语法解析,将 sql 转化为抽象 语法树 ast tree;
  2. 语义解析:遍历 ast tree,抽象出查询的基本组成单元 queryblock;
  3. 生成逻辑执行计划:遍历 queryblock,翻译为执行操作树 operatortree;
  4. 优化逻辑执行计划:逻辑层优化器进行 operatortree 变换,合并不必要的 reducesinkoperator,减少 shuffle 数据量;
  5. 生成物理执行计划:遍历 operatortree,翻译为 mapreduce 任务;
  6. 优化物理执行计划:物理层优化器进行 mapreduce 任务的变换,生成最终的执行计划。

安装

下载:

index of /hive

网盘下载:

链接:https://pan.baidu.com/s/1bq09-qgxwubrh9dzfftaaa 
提取码:yyds 
 

 tar -zxvf apache-hive-3.1.2-bin.tar.gz
  • 配置环境变量
sudo vi /etc/profile.d/my_env.sh
export hive_home=/home/bigdata/module/hive-3.1.2
export path=$path:$hive_home/bin
source /etc/profile.d/my_env.sh
  • 解决依赖问题 

删除log4j冲突问题,因为hadoop已经有这个依赖了所以删除hive的依赖

cd lib
mv  log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak

由于 derby 只能有一个实例,也就是说不能有多个命令行客户端同时访问,所以在实际生产环境中,通常使用 mysql 代替 derby。

  • 把mysql连接驱动添加到lib中(更具自己的mysql的版本进行添加对应的驱动依赖)

ll | grep mysql-connector-java-5.1.49.jar

如果没有安装mysql,想快一点安装的话可以使用docker

sudo yum install docker
sudo systemctl start docker
sudo systemctl enable docker

注意: 要保证时间和客户端的同步不然又证书问题,如果客户端的时间和mysql的时间不对会报错

sudo yum install -y ntpdate
sudo ntpdate 120.24.81.91

冲突时使用这个
sudo sudo systemctl stop ntp 

镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'eof'
{
  "registry-mirrors": ["https://obnqc505.mirror.aliyuncs.com"]
}
eof
sudo systemctl daemon-reload
sudo systemctl restart docker

 

 启动一个mysql容器并且开机自启

sudo docker run -itd --name hive-mysql -p 3306:3306 -e mysql_root_password=root --restart=always  mysql:5.7

 

  • conf中创建一个hive-site.xml的配置文件
vi hive-site.xml

下面的配置文件更具自己的环境进行修改 下面的hivemetastore数据库最好提前创建,hadoop102改成自己hive安装的主机地址




    
        javax.jdo.option.connectionurl
        jdbc:mysql://hadoop102:3306/hivemetastore?usessl=false&useunicode=true&characterencoding=utf-8
    
    
        javax.jdo.option.connectiondrivername
        com.mysql.jdbc.driver
    
    
        javax.jdo.option.connectionusername
        root
    
    
        javax.jdo.option.connectionpassword
        root
    
    
        hive.metastore.warehouse.dir
        /user/hive/warehouse
    
    
        hive.metastore.schema.verification
        false
    
    
    hive.server2.thrift.port
    10000
    
    
        hive.server2.thrift.bind.host
        hadoop102
    
    
        hive.metastore.event.db.notification.api.auth
        false
    
   
  • 环境都准备好以后开始使用
  • 先启动hadoop集群
  • 初始化元数据表
schematool -initschema -dbtype mysql -verbose

然后执行hive命令

hive

测试

show databases;
create table test(id int,name string);

 

如果测试上面的没有问题,那么说明安装成功 

由于hive本身不能够提供jdbc的连接,所以我们要启动hiveserver2,但是启动hiveserver2的前提是要启动metastore,因为hiveserver2连接metastore,jdbc连接hiveserver2

启动元数据服务   metastore   hive操作元数据的服务

hive --service metastore

启动hiveserver2   我们使用的可以通过jdbc的方式连接hiveserver2

hive --service hiveserver2

访问hive

-n指定操作的用户

beeline -u jdbc:hive2://hadoop102:10000 -n bigdata

如果出现权限问题就是没有配置代理用户的原因

failed to open new session: java.lang.runtimeexception: org.apache.hadoop.ipc.remoteexception(org.apache.hadoop.security.authorize.authorizationexception): user: bigdata is not allowed to impersonate bigdata

只要在hadoop的core-site.xml添加配置


    
        hadoop.proxyuser.bigdata.hosts
        *
    
    
    
        hadoop.proxyuser.bigdata.groups
        *
    
    
    
        hadoop.proxyuser.bigdata.users
        *
    

管理hive客户端的脚本
 

#!/bin/bash
hive_log_dir=$hive_home/logs
 
mkdir -p $hive_log_dir
 
#检查进程是否运行正常,参数1为进程名,参数2为进程端口
function check_process()
{
    pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
    ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
    echo $pid
    [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}
 
function hive_start()
{
    metapid=$(check_process hivemetastore 9083)
    cmd="nohup hive --service metastore >$hive_log_dir/metastore.log 2>&1 &"
    cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 2>&1"
    [ -z "$metapid" ] && eval $cmd || echo "metastroe服务已启动"
    server2pid=$(check_process hiveserver2 10000)
    nohup hive --service hiveserver2 >$hive_log_dir/hiveserver2.log 2>&1 &
    echo "hiveserver2服务已启动"
}
 
function hive_stop()
{
    metapid=$(check_process hivemetastore 9083)
    [ "$metapid" ] && kill $metapid || echo "metastore服务未启动"
    server2pid=$(check_process hiveserver2 10000)
    [ "$server2pid" ] && kill $server2pid || echo "hiveserver2服务未启动"
}
 
case $1 in
"start")
    hive_start
    ;;
"stop")
    hive_stop
    ;;
"restart")
    hive_stop
    sleep 2
    hive_start
    ;;
"status")
    check_process hivemetastore 9083 >/dev/null && echo "metastore服务运行正常" || echo "metastore服务运行异常"
    check_process hiveserver2 10000 >/dev/null && echo "hiveserver2服务运行正常" || echo "hiveserver2服务运行异常"
    ;;
*)
    echo invalid args!
    echo 'usage: '$(basename $0)' start|stop|restart|status'
    ;;
esac
./hiveserver2.sh start

hiveserver2 启动有点慢一般要等几分钟,多运行几次./hiveserver2.sh status就会出现正常了

 使用客户端工具连接

 第一阶段结束了好好休息下,希望能完成下面的所有阶段一定会有提升

网站地图