• 10-18-hive-元数据及其他方式与hive交互


    10-hive-元数据及其他方式访问hive:

    使用元数据服务的方式访问 Hive (类似将hive提供了一个服务端)

    1)在hive-site.xml 文件中添加如下配置信息

      
      
     	hive.metastore.uris 
     	thrift://hadoop102:9083 
      
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2)启动 metastore

    [root@hadoop202 hive]$ bin/hive --service metastore

    注意: 启动后窗口不能再操作,需打开一个新的 shell 窗口做别的操作

    3)启动 hive

    [root@hadoop202 hive]$ bin/hive

    使用 JDBC 方式访问 Hive

    1)在 hive-site.xml 文件中添加如下配置信息

      
      
     hive.server2.thrift.bind.host 
     hadoop102 
      
      
      
     hive.server2.thrift.port 
     10000 
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2)启动 hiveserver2

    [root@hadoop102 hive]$ bin/hive --service hiveserver2

    3)启动 beeline 客户端(需要多等待一会)

    [root@hadoop102 hive]$ bin/beeline -u jdbc:hive2://hadoop102:10000 -n root

    遇见错误,hiveserver2未成功启动。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-viPCUR40-1669556203202)(png/1627203089357.png)]

    查看日志提示:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzjegSYY-1669556203202)(png/1627205870169.png)]

    主要报错内容是:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException:User: root is not allowed to impersonate anonymous

    解决办法:通过httpfs协议访问rest接口,以root用户包装自己用户的方式操作HDFS

    首先需要开启rest接口,在hdfs-site.xml文件中加入:

      
    	dfs.webhdfs.enabled  
    	true  
       
    
    • 1
    • 2
    • 3
    • 4

    然后在core-site.xml文件中加入:

    
    	hadoop.proxyuser.root.hosts
    	*
    
    
    	hadoop.proxyuser.root.groups
    	*
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4)看到如下界面

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ylOaWXw1-1669556203203)(png/1627205833752.png)]

    5)编写 hive 服务启动脚本(重点脚本相关命令多了解一下)

    (1) 前台启动的方式导致需要打开多个 shell 窗口,可以使用如下方式后台方式启动

    nohup: 放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态

    /dev/null:是 Linux 文件系统中的一个文件,被称为黑洞,所有写入改文件的内容

    都会被自动丢弃

    2>&1 : 表示将错误重定向到标准输出上

    &: 放在命令结尾,表示后台运行

    一般会组合使用: nohup [xxx 命令操作]> file 2>&1 &,表示将 xxx 命令运行的结

    果输出到 file 中,并保持命令启动的进程在后台运行。主要使用以下脚本。

    [root@hadoop102 hive]$ nohup hive --service metastore 2>&1 &

    [root@hadoop102 hive]$ nohup hive --service hiveserver2 2>&1 &

    编写脚本,在$HIVE_HOME/bin下创建hiveservices.sh

    #!/bin/bash
    HIVE_LOG_DIR=$HIVE_HOME/logs
    if [ ! -d $HIVE_LOG_DIR ]
    then
    	mkdir -p $HIVE_LOG_DIR
    fi
    #检查进程是否运行正常,参数 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 &"
    	[ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
    	server2pid=$(check_process HiveServer2 10000)
    	cmd="nohup  hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
    	[ -z "$server2pid" ] && eval $cmd || 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    3)添加执行权限

    [root@hadoop102 hive]$ chmod +x $HIVE_HOME/bin/hiveservices.sh

    4)启动 Hive 后台服务

    [root@hadoop102 hive]$ hiveservices.sh start

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vPpodRHN-1669556203203)(png/1627211748648.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9JTE4Uu-1669556203204)(png/1627211772325.png)]

    hiveservices.sh start/stop/restart/status

    启动客户端 bin/beeline -u jdbc:hive2://hadoop102:10000 -n root

    Hive日常其他交互命令(使用于脚本):

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qfJtuTE2-1669556203204)(png/image-20210727193453044.png)]

    1)“-e”不进入 hive 的交互窗口执行 sql 语句

    [root@hadoop102 hive]# bin/hive -e “select * from test;”

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lIY3BAoZ-1669556203204)(png/image-20210727194222482.png)]

    2)“-f”执行脚本中 sql 语句

    (1)在/opt/module/hive/下创建 hive-sql文件

    [root@hadoop102 hive]# vim hive-sql

    (2)文件中写入正确的 sql 语句

    select * from test;

    select count(id) from test;

    (3)执行文件中的 sql 语句

    [root@hadoop102 hive]# bin/hive -f hive-sql

    (4)执行文件中的 sql 语句并将结果写入文件中

    [root@hadoop102 hive]# bin/hive -f hive-sql > hive_result.txt

    Hive 其他命令操作(作用不大,了解)

    1)退出 hive 窗口:

    exit; quit;

    2)在hive cli** 命令窗口中如何查看 hdfs 文件系统

    hive(default)>dfs -ls /;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rVzM51S6-1669556203205)(png/image-20210727195233049.png)]

    3)查看在 hive 中输入的所有历史命令

    (1)进入到当前用户的根目录 /root 或/home/atguigu

    (2)查看. hivehistory 文件

    [root@hadoop102 ~]$ cat .hivehistory

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BzRiGGnX-1669556203205)(png/image-20210727195633203.png)]

    Hive 常见属性配置

    Hive 运行日志信息配置

    Hive 的log默认存放在/tmp/root/hive.log 目录下(当前用户名下)

    修改 hive log 存放日志到/opt/module/hive/logs

    (1)修改/opt/module/hive/conf/hive-log4j2.properties.template 文件名称为hive-log4j2.properties

    [root@hadoop102 hive]#mv hive-log4j2.properties.template hive

    log4j2.properties

    (2)在 hive-log4j2.properties 文件中修改 log 存放位置

    hive.log.dir=/opt/module/hive/logs

    打印 当前库 和 表头

    在 hive-site.xml 中加入如下两个配置:

     
     hive.cli.print.header
     true
     
     
     hive.cli.print.current.db
     true
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    参数配置方式

    1)查看当前所有的配置信息,都是key-value的形式

    hive>set;

    2)参数的配置三种方式

    (1)配置文件方式

    默认配置文件:hive-default.xml,用户自定义配置文件:hive-site.xml

    注意:用户自定义配置会覆盖默认配置。另外,Hive 也会读入 Hadoop 的配置,因为 Hive是作为 Hadoop 的客户端启动的,Hive 的配置会覆盖 Hadoop 的配置。配置文件的设定对本机启动的所有 Hive 进程都有效。

    (2)命令行参数方式

    启动 Hive 时,可以在命令行添加-hiveconf param=value 来设定参数。

    例:

    [root@hadoop102 hive]$ bin/hive -hiveconf mapred.reduce.tasks=10;

    注意:仅对本次 hive 启动有效

    查看参数设置:

    hive (default)> set mapred.reduce.tasks;

    (3)参数声明方式

    可以在 HQL 中使用 SET 关键字设定参数

    例如:

    hive (default)> set mapred.reduce.tasks=100;

    注意:仅对本次 hive 启动有效。

    查看参数设置

    hive (default)> set mapred.reduce.tasks;

    上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。注意某些系

    select count(*) from test;原因解析,hive写到mysql元数据,hadoop put不往hive元数据中存储。

    学习路径:https://space.bilibili.com/302417610/,如有侵权,请联系q进行删除:3623472230

  • 相关阅读:
    【中小学科技竞赛】哪些比赛较有含金量值得参加?如何获取赛事信息?
    打破企业管理边界,数字化供应链管理系统助力企业建设数字化韧性供应链
    网址分类-杂项
    11 Go的作用域
    Mygin实现中间件Middleware
    层叠、继承与盒模型
    262-视口,布局视口,视觉视口,移动端适配,less语法,比哪里,DPR,RRI,less的弊端,运算,嵌套,混合,继承,混入,运算,
    广汽传祺E9上市,3DCAT实时云渲染助力线上3D高清看车体验
    为什么要考NISP
    【算法思考】端到端实例分割模型 SOLO
  • 原文地址:https://blog.csdn.net/qq_37171694/article/details/128070374