Open chenpengcong opened 5 years ago
记录搭建完全分布式Hadoop集群需要做的一些工作,方便日后查看
系统和软件
这里我使用VirtualBox创建3台虚拟机来进行部署,虚拟机的网络配置:为每个虚拟机创建2个网卡,分别将网络连接方式设置为NAT和Host-only,使用NAT网络的网卡用来实现访问外网和访问其他虚拟机,使用Host-only网络的网卡用来实现宿主机与虚拟机之间的访问。还有需要注意的是防火墙可能会影响网络访问,我这里把防火墙都关闭了
一开始,我们需要修改系统的Hostname(默认为localhost.localdomain),分别将3台机器命名为bigdata1,bigdata2,bigdata3 $ hostnamectl set-hostname your-new-hostname
$ hostnamectl set-hostname your-new-hostname
如果不修改的话最终在namenode的webui上只能看到一个节点的情况
修改hostname后即可正常显示
至此,我3台机器的hostname与ip的对应情况为
192.168.56.102 bigdata1 192.168.56.101 bigdata2 192.168.56.103 bigdata3
我将使用bigdata1来启动namenode和resourcemanager
接下来修改每台机器的/etc/hosts文件,添加host与ip的映射
这样hadoop配置文件中关于host的配置就可以使用hostname(bigdata1/bigdata2/bigdata3)而不是ip了,以后ip变动了只需要修改hosts文件而不用修改hadoop配置
接下来创建hadoop用户(使用该用户启动hadoop程序,用以区分同一机器上的其他服务) $ adduser hadoop 并切换到hadoop用户
$ adduser hadoop
因为打算使用start(stop)-dfs.sh和start(stop)-yarn.sh来一次性启动(停止)所有节点的hadoop服务且该脚本依赖ssh来执行(停止)各个节点上的服务,所以需要为hadoop用户配置ssh,实现hadoop用户不用密码即可登陆bigdata1/bigdata2/bigdata3
首先生成RSA公私钥对: $ ssh-keygen -t rsa -f ~/.ssh/id_rsa,为安全起见,这里最好为密钥生成一个口令
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
接下来将公钥追加到登陆目标主机的~/.ssh/authorized_keys文件中:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@bigdata1 $ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@bigdata2 $ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@bigdata3
此时我们登陆bigdata1/2/3还是需要输入密钥id_rsa的口令,我们还需要使用ssh-agent来实现免口令登陆
eval `ssh-agent -s` ssh-add ~/.ssh/id_rsa
这样hadoop在登陆时就不需要输入密钥的口令了
完成上面工作后,可以开始对hadoop的配置文件进行修改了
在~/.bashrc配置HADOOP_HOME环境变量
export HADOOP_HOME=/home/hadoop/hadoop-2.7.7 export PATH=$HADOOP_HOME/bin:$PATH
在$HADOOP_HOME/etc/conf/hadoop-env.sh中配置JDK路径和pid文件路径
export JAVA_HOME=/home/hadoop/jdk1.8.0_201 export HADOOP_PID_DIR=/home/hadoop/.hadoop export YARN_PID_DIR=/home/hadoop/.hadoop
hadoop的pid文件默认存放在/tmp目录,而/tmp目录一般会有定期清理策略,会造成这样一个问题:hadoop程序正常启动一段时间后,pid文件被删除了,此时运行stop-dfs.sh将无法向该进程发送信号从而结束进程,因为获取不到进程id
接下来将所有节点的配置文件都改成下述配置即可
$HADOOP_HOME/etc/conf/core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://bigdata1:9000</value> </property> </configuration>
$HADOOP_HOME/etc/conf/hdfs-site.xml
<configuration> <property> <name>dfs.namenode.name.dir</name><!--供namenode存储永久性的文件系统元数据(编辑日志和文件系统映像),如果指定多目录,这些元数据会同时备份在所有指定目录 --> <value>/home/hadoop/data/name</value> </property> <property> <name>dfs.datanode.data.dir</name><!--设置datanode存储数据块的目录列表(不是冗余备份),为了提高性能,最好分别为各个本地磁盘指定一个存储目录,这样一来数据块跨磁盘分布,针对不同数据块的读操作可以并发执行,取自权威指南10.3.3节--> <value>/home/hadoop/data/data</value> </property> </configuration>
$HADOOP_HOME/etc/conf/yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>bigdata1</value> </property> <property> <name>yarn.nodemanager.log-dirs</name> <value>/home/hadoop/data/yarn/logs</value> </property> <property> <name>yarn.nodemanager.local-dirs</name> <value>/home/hadoop/data/yarn/local</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> </configuration>
$HADOOP_HOME/etc/conf/mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
最后将作为slave节点的hostname添加bigdata1的$HADOOP_HOME/etc/hadoop/slaves文件,start(stop)-dfs.sh和start(stop)-yarn.sh脚本会读取该文件去各个slave节点启动(关闭)相应服务
bigdata1 bigdata2 bigdata3
到这里hadoop集群即可正常运行,更多配置可以参考Determining HDP Memory Configuration Settings和How to Plan and Configure YARN and MapReduce 2 in HDP 2.0
记录搭建完全分布式Hadoop集群需要做的一些工作,方便日后查看
系统和软件
这里我使用VirtualBox创建3台虚拟机来进行部署,虚拟机的网络配置:为每个虚拟机创建2个网卡,分别将网络连接方式设置为NAT和Host-only,使用NAT网络的网卡用来实现访问外网和访问其他虚拟机,使用Host-only网络的网卡用来实现宿主机与虚拟机之间的访问。还有需要注意的是防火墙可能会影响网络访问,我这里把防火墙都关闭了
一开始,我们需要修改系统的Hostname(默认为localhost.localdomain),分别将3台机器命名为bigdata1,bigdata2,bigdata3
$ hostnamectl set-hostname your-new-hostname
如果不修改的话最终在namenode的webui上只能看到一个节点的情况
修改hostname后即可正常显示
至此,我3台机器的hostname与ip的对应情况为
我将使用bigdata1来启动namenode和resourcemanager
接下来修改每台机器的/etc/hosts文件,添加host与ip的映射
这样hadoop配置文件中关于host的配置就可以使用hostname(bigdata1/bigdata2/bigdata3)而不是ip了,以后ip变动了只需要修改hosts文件而不用修改hadoop配置
接下来创建hadoop用户(使用该用户启动hadoop程序,用以区分同一机器上的其他服务)
$ adduser hadoop
并切换到hadoop用户因为打算使用start(stop)-dfs.sh和start(stop)-yarn.sh来一次性启动(停止)所有节点的hadoop服务且该脚本依赖ssh来执行(停止)各个节点上的服务,所以需要为hadoop用户配置ssh,实现hadoop用户不用密码即可登陆bigdata1/bigdata2/bigdata3
首先生成RSA公私钥对:
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
,为安全起见,这里最好为密钥生成一个口令接下来将公钥追加到登陆目标主机的~/.ssh/authorized_keys文件中:
此时我们登陆bigdata1/2/3还是需要输入密钥id_rsa的口令,我们还需要使用ssh-agent来实现免口令登陆
这样hadoop在登陆时就不需要输入密钥的口令了
完成上面工作后,可以开始对hadoop的配置文件进行修改了
在~/.bashrc配置HADOOP_HOME环境变量
在$HADOOP_HOME/etc/conf/hadoop-env.sh中配置JDK路径和pid文件路径
hadoop的pid文件默认存放在/tmp目录,而/tmp目录一般会有定期清理策略,会造成这样一个问题:hadoop程序正常启动一段时间后,pid文件被删除了,此时运行stop-dfs.sh将无法向该进程发送信号从而结束进程,因为获取不到进程id
接下来将所有节点的配置文件都改成下述配置即可
$HADOOP_HOME/etc/conf/core-site.xml
$HADOOP_HOME/etc/conf/hdfs-site.xml
$HADOOP_HOME/etc/conf/yarn-site.xml
$HADOOP_HOME/etc/conf/mapred-site.xml
最后将作为slave节点的hostname添加bigdata1的$HADOOP_HOME/etc/hadoop/slaves文件,start(stop)-dfs.sh和start(stop)-yarn.sh脚本会读取该文件去各个slave节点启动(关闭)相应服务
到这里hadoop集群即可正常运行,更多配置可以参考Determining HDP Memory Configuration Settings和How to Plan and Configure YARN and MapReduce 2 in HDP 2.0