一.hive的metastore的三种模式
Hive中metastore(元数据存储)的三种方式:
1. 内嵌Derby方式:
这个是Hive默认的启动模式,一般用于单元测试,这种存储方式有一个缺点:在同一时间只能有一个进程连接使用数据库。
2. Local方式
例如本地mysql:创建好用户:hive;database:hive。
ps:需要把mysql的驱动包copy到目录<HIVE_HOME>/lib中
如果是第一次需要执行初始化命令:schematool -dbType mysql -initSchema
配置完成后就可在shell中以CLI的方式访问hive进行操作验证。
3.Remote方式
以Mysql数据库为例:创建好用户:hive;database:hive_meta。Remote方式需要分别配置服务端和客户端的配置文件。
hive metastore服务端启动命令:
hive --service metastore -p <port_num>
如果不加端口默认启动:hive --service metastore,则默认监听端口是:9083
二.数据量特别大的情况下(例如10g、100g、1t)如何用mr实现全局排序?
方式一:reduce数量只设置为1个。缺点:没有用到集群的优势,速度慢。
方式二:自定义分区类partition,按照key值进行分区。
例如:将排序key值为1-1000的数据,使用两个分区,将1-500的key发送到partition1,将501-1000的key发送到partition2。
缺点:1、当数据量大时会出现OOM。2、会出现数据倾斜。
方式三(推荐):利用TotalOrderPartitioner类。(hive的order by底层也是该方法)