美文网首页编程我爱编程
OS X 安装Hadoop教程 单机 伪分布式配置

OS X 安装Hadoop教程 单机 伪分布式配置

作者: harrytc | 来源:发表于2017-12-27 21:38 被阅读19次

    题外话。。。这是一个Markdown知识点。。。在段首我都想输入空格,在markdown下打不出,遂求知乎我很喜欢这个回答:Markdown 奉行的是样式和内容分开的哲学。来自王成

     //半角空格(英文)
     //全角空格(中文)
    

    步入正题

    这个是我上手就想发布的,临近发布出现问题,so 一直拖到了现在。。。

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算.本教程将指导如何用苹果macOS系统安装Hadoop。

    安装Homebrew

    习惯使用ubuntu的同学,一定很喜欢ubuntu系统apt-get的软件安装方式。macOS上也有类似这样的包管理器,利用Homebrew即可。
    Homebrew的官方网站
    安装Homebrew的方法:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
    

    需要注意的是:
    Homebrew安装的软件都集中在/usr/local/Cellar里面
    想了解更多有关Homebrew的知识,访问macOS 安装Homebrew和常用命令

    ssh登录本地

    1. ssh-keygen -t rsa -P

    2. cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

    Shell 命令

    ssh-keygen -t rsa -P ""
    cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
    

    这样就可以生成ssh公钥,接下来进行测试登录本地是否成功

    ssh localhost
    
    

    登录成功显示结果如下:


    安装Hadoop

    输入以下代码,自动安装hadoop

    brew install hadoop
    
    

    安装过程会提示重要的信息,如下:

    Updating Homebrew...
    
    ==> Auto-updated Homebrew!
    Updated 1 tap (homebrew/core).
    ==> New Formulae
    stress-ng           telnetd             tnftp               tnftpd
    ==> Updated Formulae
    amazon-ecs-cli             fmt                        libfabric
    angular-cli                frugal                     logstash
    apm-server                 gmime                      lxc
    arangodb                   gnupg                      metricbeat
    argyll-cms                 gopass                     miniupnpc
    cgrep                      grpc                       neko
    conjure-up                 harfbuzz                   nomad
    cromwell                   heartbeat                  packetbeat
    dar                        jenkins                    snappy
    dlib                       jsoncpp                    spdlog
    elasticsearch              kibana                     ttyrec
    etcd                       libbitcoin-explorer        weechat
    fftw                       libbitcoin-node            yle-dl
    filebeat                   libbitcoin-server
    fio                        libcouchbase
    
    Warning: hadoop 2.8.2 is already installed
    

    在这里显示我大Hadoop已经安装成功了
    在macOS中,我们可以终端输入:
    /usr/libexec/java_home来获取JAVA_HOME的路径
    Hadoop的安装需要配置JAVA_HOME,用 brew安装,就已经帮我们配置好了。

    测试Hadoop是否安装成功

    Hadoop有三种安装模式:单机模式,伪分布式模式,分布式模式
    分布式模式需要在多台电脑上面测试,这里只测试前面两种,即单机模式和伪分布式模式

    测试单机模式

    这里使用Hadoop附带的示例来检验单机模式是否运行正常。
    通过Homebrew安装的Hadoop,附带的示例在路径/usr/local/Cellar/hadoop/2.8.2/libexec/share/hadoop/mapreduce

    通过Homebrew默认会安装软件的最新stable版本,所以读者安装的Hadoop版本会大于或等于2.8.2版本

    单词计数wordcount是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版”Hello World”,单词计数主要完成功能是:统计一系列文本文件中每个单词出现的次数.

    • 创建input目录和output目录
      input作为输入目录,output目录作为输出目录
    cd /usr/local/Cellar/hadoop/2.8.2/
    mkdir input 
    mkdir output
    
    • 在input文件夹中创建两个测试文件file1.txt和file2.txt
    cd input
    echo 'hello world' > file1.txt
    echo 'hello hadoop' > file2.txt
    
    • 运行示例检测单机模式
    hadoop jar /usr/local/Cellar/hadoop/2.8.2/libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.2.jar  wordcount /usr/local/Cellar/hadoop/2.8.2/input/ /usr/local/Cellar/hadoop/2.8.2/output/
    
    • 查看结果
    17/12/21 18:00:45 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    17/12/21 18:00:45 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
    17/12/21 18:00:45 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
    org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/usr/local/Cellar/hadoop/2.8.2/output already exists
        at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:146)
        at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:268)
        at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:141)
        at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1341)
        at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1338)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1836)
        at org.apache.hadoop.mapreduce.Job.submit(Job.java:1338)
        at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1359)
        at org.apache.hadoop.examples.WordCount.main(WordCount.java:87)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)
        at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)
        at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:74)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:234)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:148)
    
    more output/part-r-00000
    

    显示结果如下:

    测试伪分布式模式

    这个可以参考官网的配置     官网☺:我在这

    测试为分布模式前,需要修改相关的配置文件,把之前的单机模式修改成伪分布式模式

    • 修改Core-site.xml
      文件地址:/usr/local/Cellar/hadoop/2.8.2/libexec/etc/hadoop/core-site.xml
      把原来的

      <configuration>
      </configuration>
      
      

      修改为

      <configuration>
          <property>
              <name>hadoop.tmp.dir</name>
              <value>/usr/local/Cellar/hadoop/hdfs/tmp</value>
              <description>A base for other temporary directories</description>
          </property>
          <property>
              <name>fs.default.name</name>
              <value>hdfs://localhost:9000</value>
          </property>
      </configuration>
      
      

      fs.default.name 保存了NameNode的位置,HDFS和MapReduce组件都需要用到它,这就是它出现在core-site.xml 文件中而不是 hdfs-site.xml文件中的原因

    • 修改mapred-site.xml.template

      文件地址:/usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop/mapred-site.xml.template
      把原来的

      <configuration>
      </configuration>
      
      

      修改为

      <configuration>
          <property>
              <name>mapred.job.tracker</name>
              <value>localhost:9010</value>
          </property>
      </configuration>
      
      

      变量mapred.job.tracker 保存了JobTracker的位置,因为只有MapReduce组件需要知道这个位置,所以它出现在mapred-site.xml文件中。

    • 修改hdfs-site.xml

      文件地址:/usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop/hdfs-site.xml
      把原来的

      <configuration>
      </configuration>
      
      

      修改为

      <configuration>
          <property>
              <name>dfs.replication</name>
              <value>1</value>
          </property>
      </configuration>
      
      

      变量dfs.replication指定了每个HDFS数据库的复制次数。 通常为3, 由于我们只有一台主机和一个伪分布式模式的DataNode,将此值修改为1。

    • 运行

      hadoop namenode -format
      ./sbin/start-all.sh
      
      

      运行成功后,用浏览器访问:Hdfs的Web界面,可以查看相关的信息

    界面信息
    • 用示例测试

    • 估计圆周率PI的值

      hadoop jar ./libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.2.jar pi 2 5
      
      

      运行结果如下:

      Estimated value of Pi is 3.60000000000000000000
      
      
    • wordcount统计数据
      把原来用于单机模式的测试input文件上传到hdfs中

      ```
      hadoop fs -put ./input input
      
      ```
      
      运行wordcount
      
      ```
      hadoop jar ./libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.2.jar wordcount input output
      
      ```
      
      查看output的结果文件
      
      ```
      hadoop fs -tail output/part-r-00000
      
      ```
      
      得到的结果是:
      
      > *   hadoop 1
      > *   hello 2
      > *   world 1
      
    • 关闭伪分布式

      ./sbin/stop-all.sh
      
    忽视警告

    其间警告
    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    一直存在,解决方法来自CSDN:

    Hadoop自身的原因,需要自己编译Makefile里所需要的libhadooppipes.a和libhadooputils.a这两个静态库文件以适应自己系统的需求&nbsp;(官网说预编译的是32位库,如果你是64位的才需要重新编译,可是我主机虽是64位但虚拟机系统是32位的,不知道为什么也不行需要重新编译)这个你可以去下载就行,下载对应的版本即可

    文章修改自http://dblab.xmu.edu.cn/blog/820-2/

    相关文章

      网友评论

        本文标题:OS X 安装Hadoop教程 单机 伪分布式配置

        本文链接:https://www.haomeiwen.com/subject/qbvawxtx.html