Mac系统下,Hadoop集群的搭建

- 环境

  • 主节点操作系统:macOS High Sierra 10.13.3
  • 虚拟机软件:Parallels Desktop
  • 从节点操作系统:Centos7
  • Centos7 jdk版本:1.8.0_144
  • Mac jdk版本:1.8.0_171
  • Hadoop版本:Hadoop 2.8.1

本文是在Mac上创建两个虚拟机,两个虚拟机和Mac主机组成三个节点,主节点为Mac,两个从节点为centos7。


- 安装虚拟机

  1. 安装Parallels Desktop虚拟机软件
  2. 打开Parallels Desktop
  3. 选择相关镜像安装(虚拟机镜像为CentOS-7-x86_64-Everything-1611.iso)

首次安装好centos7进入桌面,发现没有输入法可以选择,只能输入英文。
解决方法如下:

  • 选择桌面的“应用程序”—>“系统工具”
  • 找到“设置”—>“区域和语言”
  • 在输入源中添加汉语(中国)
  • 接着选择其中的“汉语(Intelligent Pinyin)”,添加即为成功

- 安装JDK

  1. Centos7下配置jdk环境:
    (1)在根目录下创建文件夹app(用于存放安装的集群组件)
    cd /
    mkdir app
    (2)解压jdk压缩包
    tar -zxvf jdk-8u144-linux-x64.tar.gz
    (3)进入解压后的jdk文件夹,并获取绝对路径
    cd jdk1.8.0_144
    pwd
    (4)Centos7自带有openjdk,所以在配置之前先删除掉自带openjdk,命令如下:
    rpm -qa | grep java
    sudo rpm -e —nodeps xxx-openjdk-xxx
    (5)环境变量配置
    #命令如下:
    vim ~/.bash_profile
    #在文件最后添加如下代码:
    export JAVA_HOME=/app/jdk1.8.0_144
    export PATH=$PATH:$JAVA_HOME/bin
    #保存后,source一下使配置生效
    source ~/.bash_profile
    (6)检验是否配置成功:java -version
    Mac系统下,Hadoop集群的搭建_第1张图片
  2. Mac下配置jdk环境

(1)下载jdk安装包.dmg
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
(2)下载完成后直接点击安装(不需要修改安装路径)
(3)找到安装路径

#安装路径为:
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/ Contents/Home
(4)配置环境变量
vim ~/.bash_profile(Mac系统中找不到.bash_profile,需要自己创建)
#添加如下代码:
在这里插入图片描述
(5)保存后,执行:source .bash_profile
(6)检测是否配置成功:java -version
Mac系统下,Hadoop集群的搭建_第2张图片


- 修改各个节点的hostname

  1. Mac节点(master)
    #执行以下命令:
    sudo scutil --set HostName master
    Mac系统下,Hadoop集群的搭建_第3张图片
  2. Centos7(slaver1,slaver2)
    修改/etc/hostname文件,在其中把之前的名字删除,只留下slaver1(在另一个centos上修改为slaver2)
    修改完成后重启系统使之生效

- 修改各个系统的hosts文件
此方法Mac和centos系统上的操作是一样的,所以就统一说明:

  • 输入ifconfig查看各个系统上的IP地址,并保证ping命令相互可以ping通,记录各个系统的IP地址
  • 修改/etc/hosts文件,在文件中添加以下3条内容(以下内容仅代表本系统各个节点的IP地址):
    10.xxx.xx.2 master
    10.xxx.xx.5 slaver2
    10.xxx.xx.4. slaver1

- 安装及测试SSH

  • Macbookpro、centos7都自带ssh,所以不需要再安装ssh
  • 测试的时候直接在终端输入:ssh IP地址(由于上面已经修改了hosts文件,所以ssh后面的IP地址可以用相应的机器名代替如master、slaver1、slaver2)
  • 注意⚠️:在测试过程中遇到一个问题:Mac到centos的远程登陆都是成功的,但是通过centos远程登陆Mac一直不成功,显示连接拒绝。在这种情况下一般的解决方法有:1.查看Mac系统的防火墙是否关闭;2.Mac系统的远程登陆没有开启。开启的方法为:找到“系统偏好设置”—>“共享”—>勾选上“远程登录”选项即可。

- 配置ssh免密码登陆

  • 在Mac和centos系统中,分别执行:ssh-keygen命令,一路回车下来会在.ssh文件夹下面生成id_rsa和id_rsa.pub私钥和公钥。
  • 以Mac系统为例。在.ssh下创建一个文件authorized_keys,并且将三个系统中各自的id_rsa.pub(公钥)的内容复制到authorized_keys中。保存后,将这个文件分发至另外两个系统(slaver1和slaver2),命令如下:
    scp ./authorized_keys hongqiang@slaver1:~/.ssh/
    scp ./authorized_keys hongqiang@slaver2:~/.ssh/
  • 测试:ssh slaver1/ssh slaver2/ssh master(三个系统之间就可以实现免密码登录了,第一次实验的时候可能需要密码。实质就是:在各自.ssh文件夹下的authorized_keys中添加对方的id_dsa.pub公钥。)

- 安装配置Hadoop环境
此过程在master节点:

  1. 解压缩包
  • 首先进入根目录下app文件夹,切换到root用户:Mac(sudo su)centos(su)
  • 更改文件夹权限用户名和用户组
    chown -R hongqiang:staff app/ (Mac系统)
    chown -R hongqiang:hongqiang app/ (centos系统)
  • 解压hadoop包
    tar -zxvf hadoop-2.8.1.tar.gz
  • 解压后可以看到一个hadoop-2.8.1的文件夹,切换到文件夹内
    cd hadoop-2.8.1
  1. 创建以下文件夹(之后在配置文件中有用到)
  • mkdir hfs
  • mkdir hdfs/name
  • mkdir hdfs/data
  • mkdir tmp
  1. 进入Hadoop配置文件夹
    cd /app/hadoop-2.8.1/etc/hadoop

  2. 配置hadoop-env.sh文件

  • 修改JAVA_HOME值为当前系统jdk的安装路径
  • 注意⚠️:JAVA_HOME的值对应jdk的安装路径,Mac系统和centos系统的jdk安装路径不同,要做相应的改变
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
  1. 配置slaves
    将内容修改为:
master
slaver1
slaver2
  1. 配置core-site.xml文件
    添加以下内容:

       
                fs.defaultFS
                hdfs://master:9000
       
       
                io.file.buffer.size
                131072
        
       
               hadoop.tmp.dir
               /app/hadoop-2.8.1/tmp
               Abase for other temporary   directories.
       
       
               ha.zookeeper.quorum
               master:2181,slaver1:2181,slaver2:2181
       
        
               hadoop.proxyuser.hongqiang.hosts
               *
       
       
               hadoop.proxyuser.hongqiang.groups
               *
       
     

  1. 配置hdfs-site.xml文件
    添加以下内容:

     
             dfs.namenode.http-address
             master:50070
     
     
             dfs.namenode.secondary.http-address
             master:50090
     
     
             dfs.namenode.name.dir
             /app/hadoop-2.8.1/hdfs/name
       
      
              dfs.datanode.data.dir
              /app/hadoop-2.8.1/hdfs/data
       
       
               dfs.replication
               3
        
        
               dfs.webhdfs.enabled
               true
        

  1. 配置mapred-site.xml文件
    添加以下内容:

           
        mapreduce.framework.name
                yarn
           
   
  1. 配置yarn-site.xml文件
    添加以下内容:



        
               yarn.nodemanager.aux-services
               mapreduce_shuffle
        
        
               yarn.nodemanager.aux-services.mapreduce.shuffle.class
               org.apache.hadoop.mapred.ShuffleHandler
        
        
               yarn.resourcemanager.address
               master:8032
       
       
               yarn.resourcemanager.scheduler.address
               master:8030
       
       
            yarn.resourcemanager.resource-tracker.address
             master:8035
      
      
              yarn.resourcemanager.admin.address
               master:8033
       
       
               yarn.resourcemanager.webapp.address
               master:8088
       
     
  1. 将配置好的hadoop2.8.1文件夹远程拷贝到另外的两个节点
    注意⚠️:配置文件中有些地方,根据每个节点不同路径也要做相应的改变。特别是jdk的安装路径
scp -r hadoop2.8.1 hongqiang@slaver1:~/app/
scp -r hadoop2.8.1 hongqiang@slaver2:~/app/
  1. 在各个系统中配置hadoop环境变量
    在.bash_profile中添加如下内容:
    export HADOOP_HOME=/app/hadoop-2.8.1
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

centos7系统和Mac系统一样的操作(添加之后,source一下,使之生 效)

  1. 启动hadoop集群
  • 首先格式化namenode
    hadoop namenode -format
  • 启动hadoop集群
    start-all.sh
  1. 分别在各个节点执行jps,查看相关进程是否启动成功

    至此,hadoop集群搭建成功!

注意⚠️: 在Mac系统执行hadoop fs -ls /时,出现如下警告:
18/06/08 13:55:06 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

原因: hadoop-2.8.1.tar.gz安装包是在32位机器上编译的,64位(Mac系统)的机器加载本地库.so文件时出错,不影响使用。(hadoop中lib目录下的native本地库出问题)

解决方法: 下载hadoop源码,重新编译一下,然后将编译后的native文件替换掉之前$HADOOP_HOME/lib/native文件夹即可。(替换掉后需要重启hadoop集群)


- 执行测试程序wordcount

  • 在hdfs上创建input文件夹,用于存放待测文件(此处以hadoop自带的README.txt文件为例)
    hadoop fs -mkdir /input
  • 将README.txt文件上传到hdfs上
    hadoop fs -put README.txt /input/
  • 进入到hadoop-2.8.1/share/hadoop/mapreduce文件夹下,并调用Hadoop自带案例,执行下面单词计数程序:
    hadoop jar hadoop-mapreduce-examples-2.8.1.jar wordcount /input /output

注意⚠️: 在执行此程序之前,在HDFS上一定不能存在output文件夹,如果存在,需要先删除

  • 程序执行完成后,可通过如下命令查看
    hadoop fs -ls /output
    hadoop fs -cat /output/part-r-00000

- 集群搭建相关安装包

  • Parallels Desktop:https://pan.baidu.com/s/1z_wogkEsBX3tsjf0uLtl8w
  • Centos7 jdk:https://pan.baidu.com/s/1kKdUm2gXN6CBkU2_bpK5FQ
  • Mac jdk:https://pan.baidu.com/s/1dZ21tX4ioD132e1-7wPbJQ
  • Hadoop2.0安装包:https://pan.baidu.com/s/1BhFubbj3hVR4PYsDxodHWQ
  • 编译后的native文件:https://pan.baidu.com/s/1YqlBxldMdpyCjPn-u4SAVw

你可能感兴趣的:(Hadoop)