We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
记录搭建完全分布式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
The text was updated successfully, but these errors were encountered:
No branches or pull requests
记录搭建完全分布式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
The text was updated successfully, but these errors were encountered: