Mac上第一个eclipse编译的Hadoop程序

本文详细介绍了如何在Mac上安装配置Hadoop,并通过示例演示如何在Eclipse环境中编写和运行Hadoop程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考博客

手把手教你安装mac版hadoop2.7.3教程
Mac Hadoop的安装与配置
Win下Eclipse提交hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denied:
Mac上的第一个hadoop小demo
Mac OSX下配置和启动hadoop以及常见错误解决
hadoop学习之二:mac下hadoop+eclipse环境搭建

目录

  • Hadoop的下载安装
  • SSH免密登陆
  • eclipse下Hadoop插件的安装
  • 编写第一个Hadoop程序

Hadoop的下载安装
安装java环境,配置环境变量
使用brew下载安装

brew install hadoop

默认安装目录
/usr/local/Cellar/hadoop
安装完成后的目录
这里写图片描述
定位到Hadoop的安装目录下
修改/etc/hadoop/hadoop-env.sh
export JAVA_HOME=jdk的安装目录
修改配置文件

  • core-site.xml
  • hadfs-site.xml
  • mapred-site.xml
  • yarn-site.xml

core-site.xml

 <configuration> 
    <property> 
        <name>fs.defaultFS</name> 
        <value>hdfs://localhost:9000</value> 
    </property> 
</configuration>

hdfs-site.xml

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

mapred-site.xml
如果不存在则创建一个 (可以复制一下mapred-site.xml.template文件再进行修改)

<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>

yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

配置免密登陆
定位到当前用户目录下,我的是koukouken
这里写图片描述
用dsa密钥认证来生成一对公钥和私钥:

ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa

将生成的公钥加入到用于认证的公钥文件中:

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

ssh localhost判读是否登陆成功
这里写图片描述

如果所示则登陆成功

Hadoop的启动

  • 进入Hadoop的目录,以mac系统为例目录为

/usr/local/Cellar/hadoop/2.7.2/libexec
格式化文件系统
hdfs namenode -format

  • 启动NameNode和DataNode的守护进程。

sbin/start-dfs.sh

  • 启动ResourceManager和NodeManager的守护进程

sbin/start-yarn.sh

  • 访问localhost:50070和localhost:8088测试是否正常

这里写图片描述

  • 创建hdfs目录:

hdfs dfs -mkdir -p /user/robin/input

  • 拷贝一些文件到input目录:

hdfs dfs -put etc/hadoop input

  • 运行样例: (下面命令中的hadoop版本号是2.8.1,根据你自己的hadoop版本修改版本号)

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar grep input output ‘dfs[a-z.]+’

  • 在localhost:50070中的Utilities标签下找到/user/robin目录,下载part-r-00000文件,可以看到其中内容如下所示:

这个地方我什么都没有显示
4 dfs.class
4 dfs.audit.logger
3 dfs.server.namenode.
2 dfs.period
2 dfs.audit.log.maxfilesize
2 dfs.audit.log.maxbackupindex
1 dfsmetrics.log
1 dfsadmin
1 dfs.servers
1 dfs.replication
1 dfs.file

eclipse下Hadoop插件的安装
插件下载地址
将jar 拷贝到eclipse的plugins目录下,重启eclipse,定位Hadoop目录下:
这里写图片描述
修改中间的install目录为Hadoop安装的目录

编写第一个Hadoop程序
新建一个Hadoop项目
这里写图片描述
配置 Map/Reduce Locations
Windows—show view—Other—— Map…
新建一个Hadoop local,我的端口为9000,点击确定
这里写图片描述
在右侧DFS就会出现你创建的Hadoop local,点击就能看到你创建的文件目录
这里写图片描述
新建HdfsClientDemo.java
中间的koukouken是我的用户名,需要改成你对应的用户名

package testHadoop;

import java.net.URI;
import java.util.Iterator;
import java.util.Map.Entry;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test;
/**
 * 
 * 客户端去操作hdfs时,是有一个用户身份的
 * 默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=koukouken
 * 
 * 也可以在构造客户端fs对象时,通过参数传递进去
 * @author
 *
 */
public class HdfsClientDemo {
    FileSystem fs = null;
    Configuration conf = null;
    @Before
    public void init() throws Exception{

        conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://localhost:9000");

        //拿到一个文件系统操作的客户端实例对象
        /*fs = FileSystem.get(conf);*/
        //可以直接传入 uri和用户身份
        fs = FileSystem.get(new URI("hdfs://localhost:9000"),conf,"koukouken"); //最后一个参数为用户名
    }

    @Test
    public void testUpload() throws Exception {

        Thread.sleep(2000);
        fs.copyFromLocalFile(new Path("/Users/koukouken/hadoop/access.log"), new Path("/access.log.copy"));
        fs.close();
    }


    @Test
    public void testDownload() throws Exception {

        fs.copyToLocalFile(new Path("/access.log.copy"), new Path("/Users/koukouken/hadoop"));
        fs.close();
    }

    @Test
    public void testConf(){
        Iterator<Entry<String, String>> iterator = conf.iterator();
        while (iterator.hasNext()) {
            Entry<String, String> entry = iterator.next();
            System.out.println(entry.getValue() + "--" + entry.getValue());//conf加载的内容
        }
    }

    /**
     * 创建目录
     */
    @Test
    public void makdirTest() throws Exception {
        boolean mkdirs = fs.mkdirs(new Path("/user/aaa/bbb"));
        System.out.println(mkdirs);
    }

    /**
     * 删除
     */
    @Test
    public void deleteTest() throws Exception{
        boolean delete = fs.delete(new Path("/user/aaa"), true);//true, 递归删除
        System.out.println(delete);
    }

    @Test
    public void listTest() throws Exception{

        FileStatus[] listStatus = fs.listStatus(new Path("/"));
        for (FileStatus fileStatus : listStatus) {
            System.err.println(fileStatus.getPath()+"================="+fileStatus.toString());
        }
        //会递归找到所有的文件
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
        while(listFiles.hasNext()){
            LocatedFileStatus next = listFiles.next();
            String name = next.getPath().getName();
            Path path = next.getPath();
            System.out.println(name + "---" + path.toString());
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://localhost:9000");
        //拿到一个文件系统操作的客户端实例对象
        FileSystem fs = FileSystem.get(conf);

        fs.copyFromLocalFile(new Path("/Users/koukouken/hadoop/access.log"), new Path("/access.log.copy"));
        fs.close();
    }


}

执行完中间的测试代码,点击如图所示Disconnect即可看到文件是否创建成功
这里写图片描述
可能出现一些权限的错误,Hadoop修改权限的方式

hadoop fs -chmod 777 /user/koukouken

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值