Hadoop集群环境搭建(云服务器,虚拟机都适用)

首先要说明:这里采用了阿里云,腾讯云服务器来搭建集群。当然,在vm中开多台虚拟机来实现集群环境搭建,此教程也同样适用。下面切入正题:

1.vmware虚拟机的安装(云服务器搭建忽略此点)

这里就自行选择一个版本的vmware,来进行安装操作。

2.linux安装(云服务器搭建忽略此点)

关于linux的具体的安装教程可另行搜索,这里提几点建议:
- 建议安装没有图形界面的linux,比如ubuntu server,体积小,占内存少,毕竟搞hadoop也用不到什么图形界面。
- 安装的时候一般会先创建一个普通用户,用此用户登录。登陆后,输入:sudo passwd root ,就可以进行root用户密码的设置
- dpkg-reconfigure console-setup 用来设置终端的字体格式

3.ssh配置链接

主从主机之间进行通信、对各个主机的统一控制,都需要配置ssh服务。

  1. 在linux上开启ssh服务
    • apt-get install openssh-server 安装ssh组件
    • 这个教程涉及的hadoop集群,默认都是在root用户下进行操作。但ubuntu下默认不允许用ssh登录root用户,故需要进行配置:
      • vim /etc/ssh/sshd_config
      • PermitRootLogin=yes 找到该行,做如此修改
    • /etc/init.d/ssh start 启动ssh服务
    • ps -e | grep sshd 查看ssh服务进程是否正常启动
  2. (vm虚拟机搭建注意此点)如果每次打开vm中的虚拟机,ip发生变更,那就要进行相应配置变更,为了避免麻烦,故这里:
    • 将虚拟机关闭,并在vm中设置该虚拟机的网络适配器为:NAT模式
  3. 在windows上使用ssh客户端工具
    • 这里我用了secureCRT,他有一个优点:可以直接用其提供的ftp,从windows向虚拟机传输文件
    • Xshell也非常不错

4.JDK安装与配置

  1. jdk压缩包
    • 可通过windows去Oracle下载好,再利用ftp传到各个节点
    • 也可在节点的终端里下载:
      wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
      
  2. 将jdk压缩包解压到指定目录:tar xzvf xxxname -C /usr/local
  3. 进入/usr/local给jdk1.8.0_73 改名:mv jdk1.8.0_73 jdk
  4. 修改配置环境变量:vim /etc/profile 打开后,在文件最下面添加:
    export JAVA_HOME=/usr/local/jdk
    export PATH=\$PATH:\$JAVA_HOME/bin:
    export CLASS_PATH=\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
    
  5. source /etc/profile 让配置生效,输入java -version看是否成功

5.Hadoop的下载安装

  1. 直接终端下载:
    wget http://mirrors.shu.edu.cn/apache/hadoop/common/hadoop-2.8.4/hadoop-2.8.4.tar.gz
    
  2. 若到 www.apache.org 上下载hadoop,记得,是binary的那一个版本
  3. 将压缩包解压到/usr/local目录
  4. 改名字 mv hadoop-2.7.2 hadoop
  5. 进行环境变量配置:vim /etc/profile
     export JAVA_HOME=/usr/local/jdk
     export HADOOP_HOME=/usr/local/hadoop
     export PATH=\$PATH:\$JAVA_HOME/bin:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin:
     export CLASS_PATH=\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
    
  6. source /etc/profile 让配置生效

6.Hadoop配置

  1. 为了配置方便,为每台电脑配置一个主机名:
    • vim /etc/hostname
    • 各个节点中,主节点写入:master , 其他从节点写入:slavexx
    • 如果这样修改不能生效,则继续如下操作
    • vim /etc/cloud/cloud.cfg 做preserve_hostname: true 修改
    • reboot重启,这时应该就修改过来了
  2. 主机名称与ip的绑定:(云服务器配置这里有大坑
    • vim /etc/hosts 添加如下信息
    • 本机ip 本机hostname
    • 其他节点xx的ip 其他节点xx的hostname
    • 需要注意的是,如果是云服务器搭建,一般买来的服务器会提供一个内网ip,一个公网ip,这里配置时,其他节点ip是公网ip,本机ip是ifconfig得到的内网ip
  3. 上面配置生效可能要reboot重启
  4. 设置ssh免登录处理,也就是master节点无密码登录各个slave节点:
    • 根目录中,查看是否有.ssh的配置文件,有就要先删除: rm -rf ~/.ssh
    • 在master的节点上生成ssh key: ssh-keygen -t rsa 一路回车
    • 将公钥信息保存到另一个文件:
      cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
      
    • 将公钥信息复制到id_rsa_master.pub:
      cp .ssh/id_rsa.pub ~/id_rsa_master.pub
      
    • 将此id_rsa_master.pub文件,复制到各个slave节点的~/.ssh目录中去(可以通过secureCRT提供的ftp功能)
    • 免登录测试:ssh root@slavexx 此时就进入了从节点slavexx的终端,退出可以用exit
  5. 在/usr/local/hadoop 中创建如下目录, 如果hadoop出问题,需要重新配置时,这些文件记得彻底删除再重新创建
    mkdir hdfs hdfs/tmp hdfs/data hdfs/name
    
  6. 进入 cd /usr/local/hadoop/etc/hadoop ,准备对如下几个文件进行配置:
  7. 配置core-site.xml文件,在configuration标签中添加如下代码,注意hadoop.tmp.dir的value目录与刚刚创建的tmp目录要一致
    	<property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/hdfs/tmp</value>
                <description>A base for other temporary directories.</description>
        </property>
        <property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
        </property>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
    
  8. 配置 hadoop-env.sh文件,关联hadoop使用的语言,就是jdk
    # The java implementation to use.
    export JAVA_HOME=/usr/local/jdk
    
  9. 配置 yarn-env.sh文件
    # some Java parameters
    export JAVA_HOME=/usr/local/jdk
    
  10. 配置hdfs-site.xml,在configuration标签中添加如下代码。注意其中dfs.namenode.name.dir和dfs.datanode.data.dir的value和之前创建的/hdfs/name和/hdfs/data路径一致;因为我只有一个从节点slave1,所以dfs.replication设置为1
    	<property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/hdfs/name</value>
                <final>true</final>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/hdfs/data</value>
                <final>true</final>
        </property>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>master:9001</value>
        </property>
        <property>
                <name>dfs.webhdfs.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>dfs.permissions</name>
                <value>true</value>
        </property>
    
  11. 复制mapred-site.xml.template模板文件:cp mapred-site.xml.template mapred-site.xml ,然后在configuration标签中添加如下代码:
    	<property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    	</property>
    
  12. 配置yarn-site.xml,在configuration标签中添加如下代码:
    	<property>
    		<name>yarn.resourcemanager.address</name>
    	 	<value>master:18040</value>
    	</property>
    	<property>
    		<name>yarn.resourcemanager.scheduler.address</name>
    		<value>master:18030</value>
    	</property>
    	<property>
    		<name>yarn.resourcemanager.webapp.address</name>
    		<value>master:18088</value>
    	</property>
    	<property>
    		<name>yarn.resourcemanager.resource-tracker.address</name>
    		<value>master:18025</value>
    	</property>
    	<property>
    		<name>yarn.resourcemanager.admin.address</name>
    		<value>master:18141</value>
    	</property>
    	<property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    	</property>
    	<property>
     		<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
     		<value>org.apache.hadoop.mapred.ShuffleHandler</value>
    	</property>
    
  13. 配置slaves 文件:vim slaves 添加所有从节点的hostname,然后保存退出
  14. 配置masters文件:vim masters 添加主节点的hostname,然后保存退出
  15. 要确保所有节点的防火墙已经关闭,以防出现一下错误:(云服务器配置这里有大坑
    • could only be replicated to 0 nodes instead of minReplication (=1). There are …
    • ubuntu中的防火墙是ufw防火墙:状态查看:ufw status 开启:ufw enable 关闭:ufw disable
    • 需要注意的是,如果是云服务器搭建,有的云服务平台会默认开启一些端口的防火墙,比如阿里云的服务器就默认开启了三个端口的防火墙,此时要想在不同节点之间成功传输数据,就要:1,把ubuntu里的防火墙关了 2,把阿里云服务器上提供的防火墙端口全部打开。
  16. 各个节点都要进行如上配置
  17. 在master节点格式化系统: hdfs namenode -format
  18. 启动hadoop:start-all.sh
  19. 终端输入:jps 命令,若主节点出现如下进程:
    5664 SecondaryNameNode
    14392 Jps
    5821 ResourceManager
    5439 NameNode
    
    从节点出现如下进程:
    21557 NodeManager
    21432 DataNode
    24558 Jps
    
    则说明配置成功
  20. 接下来可以试着编写一个hadoop界的“hello world”程序:wordcount,来测试一下配置好的集群了。

猜你喜欢

转载自blog.csdn.net/Saltwind/article/details/82967025