0%

Hadoop集群以及Hive服务部署中的坑

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
2
3
4
5
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_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
2
3
4
5
6
7
8
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>

hadoop的map-reduce执行方式的执行个数通过

1
2
3
4
5
6
7
8
9
10
<property>
<name>mapreduce.job.reduces</name>
<value>4</value>
<description>reduce个数</description>
</property>
<property>
<name>mapreduce.job.maps</name>
<value>4</value>
<description>map个数</description>
</property>

设置, 但是其值最好设定为集群数据节点数量的0.95倍. 同时为了加速执行, 可以把预测执行mapreduce.map.speculativemapreduce.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