Hadoop集群以及Hive服务部署中的坑
部署hive的版本必须和hadoop的版本匹配, 具体对应关系可以从官方文档中找到说明, 主要就是因为lib库的差异导致的. 两者必须运行在相同的java环境下. hive2.x.x不能适用与hadoop3.x.x
由于hadoop是同一份配置多机拷贝部署的, 那么就需要保持数据节点和master的namenode节点的配置一致性.
hadoop部署的节点机器一定要具有相互ssh访问的权限, 必须事先定义好publickey互访. 同时在每个节点上都得有整个集群的hosts信息(或者直接在路由上指定), 必须保证每个节点都可以通过其他节点的hostname访问到其他节点. 需要注意的是/etc/hosts
文件中最好是没有指向本地localhost的配置,即不要出现127.0.0.1 localhost
之类的配置. 在配置好ssh和hosts后,确保在每台机器上都能成功通过hostname进行ssh publickey访问. 如果ssh不是默认22端口 可以通过在hadoop的配置文件hadoop-env.sh
中设置export HADOOP_SSH_OPTS="-p 26387 -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=10s"
同时在该文件中也需要执行hadoop运行的用户:
1 | export HDFS_NAMENODE_USER="root" |
hadoop的默认配置在代码目录下的etc/hadoop
下,需要修改定义xml 文件, 根据官方手册填写对应的配置,注意涉及到节点信息的地方都不用ip地址而是必须使用hostname.(除了外部访问地址)
hadoop集群启动使用sbin/start-all.sh
, 而且只需要在namenode上执行, 不需要在每个节点上都执行,.但是启动后需要通过jps
查看java进程确保每个数据节点上都有数据服务和调度程序, 同时确保namenode 上的调度yarn调度器正确启动. 有时会出现一个进程不能正确启动, 需要到对应的节点上通过查看hadoop日志文件排查原因, 并通过stop-all.sh
&start-all.sh
两个脚本重新执行一次启动集群.或者单独执行start-yarn.sh
等
hive只需要部署在hadoop的一个数据节点上就行, 但是 由于hive server服务使用root访问是需要有hadoop访问权限的,因此在hadoop的配置中必须加入
1 | <property> |
hadoop的map-reduce执行方式的执行个数通过
1 | <property> |
设置, 但是其值最好设定为集群数据节点数量的0.95倍. 同时为了加速执行, 可以把预测执行mapreduce.map.speculative
和mapreduce.reduce.speculative
关闭, 并且使用mapreduce.output.fileoutputformat.compress
开启中间数据压缩.
hive的配置文件最好和其版本保持一致, 不同版本的配置文件小有出入. 在hive-env.sh
中使用HADOOP_OPTS
来配置hive的java运行环境参数, 其中Xmx和Xms
根据实际机器的内存配置设定. 而hive-site.xml
配置文件可以通过模板hive-default.xml
来修改生成.
需要注意的是每次修改配置后都需要重启hive server2服务或者退出hive cli来生效配置, 同时注意已经启动的hive server2数量, 如果启动了多个服务, 可能会出现混乱的结果, 请确保节点上只有一个hive server2