本人小白,此文章针对简单但是容易忽略的问题,自己踩过的坑自己知道,膜拜大神。
1.下载对应的CDH版本组件CDH版本要对得上号,要不会出现一系列问题。
2.拿到集群首先该干什么。应该确定一下组件分部情况。千万不要搞混淆。
举例 4台集群
这是我给我用的那4太集群配的,后面会加上Spark和Hbase 所以2 、3号机器我打算主要当跑任务用
一定要吧mysqlhive专用的那个和普通的mysql分开 如过两个mysql放在同一台机器上 mysql如果挂掉了hive的数据是很难找回来的,专门拎出来一台机器专门做数据的读写感觉更好。
3.先别急着解压tar包。先检查机器的配置
(1)查看防火墙状态 防火墙开启的情况下 集群之间的端口用不了的!!!!!
开机启动 chkconfig iptables on
开机不启动 chkconfig iptables off
立刻开启 service iptables start
立刻关闭 service iptables stop
(2)云服务器防火墙的问题:云服务器的防火墙就比较麻烦了,比如我现在使用的是华为的ucloud,
他们官网上有控制台,控制台上有控制防火墙的组件,实在找不到就问上司要帐号 然后自己去问客服怎么操作,阿里云同理()(3)这个是检查端口能不能用的命令。很实用
先安装telnet
命令:yum install telnet
检查端口是否以通信的命令 :telnet IP或者主机名 端口号
4.配置hosts
vi /etc/hosts
5.实现分发机器与机器之间的钥匙
6.配置 /etc/profile
7.以上基本操作做好了以后就可以解压tar包啦 举例我是解压在/home下面的
配置什么?
每一台机器上的配置文件都统一
CDH版本的配置文件是在$HADOOP_HOME/etc/hadoop下面的
分别是core-site.xml hdfs-site.xml yarn-site.xml mapper-site.xml
不同颜色字体对应不同的机器
第一台主机名 第二台主机名 第三台主机名
core-site.xml
<!--配置的是主节点的client端口号 可以自己更改-->
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--设置副本数为2-->
<property><name>dfs.ha.namenodes.freedom</name>
<value> 主机1 , 主机2 </value>
</property>
<!--设置namenode高可用-->
<name>dfs.nameservices</name>
<value> 主机1 </value>
</property>
<!--设置namenode服务端-->
<property>
<name>dfs.ha.namenodes.Master.yanshu.com</name>
<value> 主机1, 主机2 </value>
</property>
<property>
<name>dfs.namenode.rpc-address.Master.yanshu.com.Master.yanshu.com</name>
<value> 主机1 :50090</value>
</property>
<!--hdfs 用的通信端口,这里找不到请改成ip-->
<property>
<name>dfs.namenode.http-address.Master.yanshu.com.Master.yanshu.com</name>
<value>主机1:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.Master.yanshu.com.slave01.yanshu.com</name>
<value> 主机2 :50090</value>
</property>
<property>
<name>dfs.namenode.http-address.Master.yanshu.com.slave01.yanshu.com</name>
<value>主机2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://主机1:8485;主机2:8485;主机3:8485/cluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/journal</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.Master.yanshu.com</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
</configuration>
yarn-site.xml
<!--指定resourcemanager的Ha -->
<!--指定resourcemanager节点的IP地址 -->
<!--指定resourcemanager节点的IP地址 -->
<!--指定resourcemanager节点挂了 就启动恢复-->
mapper-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--告诉hadoop mapreduce任务在yarn上执行-->
</configuration>
slaves
8.机器与机器之间通讯需要什么???-------zookeeper
zookeeper配置
参考 https://www.cnblogs.com/LUA123/p/7222216.html
9.以上步骤处理好了之后可以开始了
配置好了以后一定遵循以下步骤!!!!!!!!!!!!!1
1.检查core-site.xml里面配置的元文件存储地址是不是文件为空(警告:不是新配置的hadoop集群请一定不要操作!!)
2.启动j
3.在第一台NameNode节点上format 仔细查看日志 如果不出错会在倒数几行内发现success
4.启动第一台的NameNode是否可以成功启动 如果不能启动仔细检查配置(core-site.xml hdfs-site.xml)
5.如果可以成功启动就到第二台NameNode上同步元数据信息
6.在第一台机器上初始化zk
7.关闭所有机器上的NameNode
8.sbin/start-all.sh
查看所有机器的jps启动情况 如果与配置不符合则检查相对应的配置是否正确,如果确定正确。请打开相对应的logs日志的out文件查看日志输出信息
9.如果成功配置那是最好的,如果配置成功或或者中途步骤错误了,不要担心,继续重新来,新集群嘛练手的
千万千万千万不要乱用rm 这种命令 你会后悔的
尽量不要kill程序的时候用kill -9 这种命令 太暴力了 上次我就用这个命令弄得第二台机器NameNode无法跟第一台一致了 还好能再同步
有问题先看日志,一定搞清楚问题到底出在哪里,找对应的问题 会看日志总比盲目的复制错误代码去百度上找强得多
日志是好朋友