
其实主要就是为了优化查询,加快查询的速度。
结果如下 numRows=12552, totalSize=1564884, rawDataSize=1552332内部表:
数据由hive自身管理 存储在hive指定的hdfs目录中 删除会删除数据本身
外部表(external):
数据存储在用户使用location关键字指定的hdfs目录中 hive中仅存储一份元数据 删除 *** 作不会影响到hdfs中原本的数据文件
将hdfs中文件存储在不同的目录下 hive查询时仅查询指定目录下的数据 避免扫描全部文件 可以极大的加速查询 hive支持静态分区和动态分区
静态分区由用户指定分区所在的目录 而动态分区由表中的某一个字段来决定每条数据所在的分区
创建了一个bill表其中包含三个业务字段
partitioned by (day int) 指定了day为分区标志 在查询时使用 where day = 20201010 来指定分区
为bill表添加一个分区目录20201010 当指定day = 20201010时 将在这个分区查询数据
随日期增加 需要手动将对应日期的目录作为分区添加到bill中 可以使用crontab 每天自动执行一次添加分区的 *** 作这里实验一下把hivemetastorelocal参数设置为false的情况下怎么启动hive,
当然首先要修改为false,
hivemetastorelocal
false
controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM
并加入配置thrift server的配置:
hivemetastoreuris thrift://127001:9083
然后启动hadoop集群,启动win上的mysql,保证集群ok,测试mysql ok
然后启动metastore:hive --service metastore
这个过程会测试连接 建立schema 建表
继续启动thrift server:hive --service hiveserver
Starting Hive Thrift Server
这里会卡住,其实这是典型的前台启动,如果退出到shell,那么server就会停止,想后台启动的话可以采用nohup方式。
最后启动hive:hive
hive> show tables;
OK
tb
tb2
Time taken: 1117 seconds
发现hive就可以启动起来了,其实我们只需要把hive理解为几个部分即可:metastore、thrift server和剩下的hive,这几个部分都是可以分开部署的,放在不同的服务器上,这样的设计增加了hive的ha和可扩展性 但是分开部署会牺牲很大的可维护性,也增加了运维的复杂性,所以一般还是把元数据留着mysql中 其他的部分放在一个jvm中。
hive也是个cs结构的东西 thrift是负责client和server通信的翻译: >在beeline中使用hive on spark ,报错
由于hive程序的是通过yarn 去跑spark的,到Hadoop目录下查看resourcemanager日志
问题分析:spark on hive本质是spark-shellsh,spark-shellsh会一直占用进程,这样后面提交的hive on spark任务就不需要重复上传spark依赖,加速任务执行速度
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)