hadoop伪分布式搭建&hadoop-example运行示例

本文详细介绍了如何在单机上搭建Hadoop的伪分布式环境,包括配置~-site.xml文件,创建必要的存储目录,格式化HDFS,运行hadoop自带的例子并查看输出,以及关闭Hadoop守护进程。通过这些步骤,读者可以了解Hadoop的基本操作和管理。

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

hadoop伪分布式搭建

hadoop 伪分布式实在单击模式的基础上进行的,单击模式可以参考我的另外一片blog : http://blog.youkuaiyun.com/zhumingyuan111/article/details/53149642

配置 ~-site.xml文件

%HODOOP_HOME%/etc/hadoop/路径下有:core-site.xml,hdfs-site.xml,mapred-site.xml 三个文件,其含义:

  • core-site.xml: Hadoop Core的配置项,例如HDFS和MapReduce常用的I/O设置等。
  • hdfs-site.xml: Hadoop 守护进程的配置项,包括namenode,辅助namenode和datanode等。
  • mapred-site.xml: MapReduce 守护进程的配置项,包括jobtracker和tasktracker。
    下面给出三个文夹的配置内容:

core-site.xml

<configuration>
   <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
  </property>
  <property>
      <name>hadoop.tmp.dir</name>
      <value>/usr/local-extend/hadoop_hdfs/tmp</value>
  </property>
</configuration>

hdfs-site.xml

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/usr/local/hadoop/hdfs/name</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/usr/local/hadoop/hdfs/data</value>
        </property>
</configuration>

mapred-site.xml

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

新建几个文件夹用于存储namenode&datanode&hadoop.tmp.dir

建立文件夹的位置分别与core-site.xml、hdfs-site.xml中配置一致。
/usr/local-extend/hadoop_hdfs/tmp
file:/usr/local/hadoop/hdfs/name
file:/usr/local/hadoop/hdfs/data

mkdir /usr/local-extend/hadoop_hdfs/tmp
mkdir /usr/local/hadoop/hdfs
mkdir /usr/local/hadoop/hdfs/name
mkdir /usr/local/hadoop/hdfs/data

格式化HDFS

主要就是格式化namenode,secondarynamenode,tasktracker
在%HADOOP_HOME%/bin下执行:

hadoop namenode -format

这里写图片描述

这里写图片描述

  • 注意如果是第二次格式化,/usr/local/hadoop/hdfs/name 和/usr/local/hadoop/hdfs/data 两个文夹下的VERSION中的cluster要保证一致,否则datanode节点无法启动。

    启动hadoop

    路径%HADOOP_HOME%/sbin

    /usr/local/hadoop/sbin$ ./start-all.sh

    查看hadoop守护进程

    /usr/local/hadoop/sbin$ jps

    出现下图则表示安装成功
    这里写图片描述

如果安装成功之后,可以访问以下web
http://localhost:50030/ - Hadoop 管理介面
http://localhost:50060/ - Hadoop Task Tracker 状态
http://localhost:50070/ - Hadoop DFS 状态

此时hadoop已经安装成功,可以对hdfs进行相关操作

创建文件夹 : /usr/local/hadoop/bin$ hdfs dfs -mkdir /usr/tmp/input
存放文件:/usr/local/hadoop/bin$ hdfs dfs -put test.txt /usr/tmp/input

运行hadoop自带的例子

/usr/local/hadoop/bin$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /usr/tmp/input /usr/tmp/output

这里写图片描述

这里写图片描述

查看输出文件
/usr/local/hadoop/bin$ hdfs dfs -get /usr/tmp/output
 /usr/local/hadoop/bin$ vim part-r-00000 

这里写图片描述

关闭Hadoop的守护进程

/usr/local/hadoop/sbin$ ./stop-all.sh 

总结

      以上基本把hadoop伪分布的情况搭建完成,后续在此基础上进行spark的环境搭建。
### Hadoop伪分布式环境下的Java开发与常见问题解决 #### 1. Hadoop伪分布式配置概述 Hadoop伪分布式配置是指在一个节点上模拟多个角色(NameNode、DataNode、ResourceManager等)的运行模式。这种配置适合用于学习和测试目的[^3]。 #### 2. Java开发基础 在Hadoop伪分布式环境中进行Java开发,主要涉及编写MapReduce程序并提交至集群运行。以下是几个关键点: - **依赖管理** 使用Maven或Gradle来管理项目依赖。对于Hadoop开发,通常需要引入`hadoop-common`和`hadoop-mapreduce-client-core`库[^1]。 ```xml <!-- Maven pom.xml --> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>3.3.0</version> </dependency> </dependencies> ``` - **编写MapReduce程序** MapReduce程序由Mapper类和Reducer类组成。以下是一个简单的WordCount示例: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); @Override protected void map(Object key, Text value, Context context) throws IOException, InterruptedException { String[] words = value.toString().split("\\s+"); for (String w : words) { word.set(w); context.write(word, one); } } } public static class SumReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); @Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(SumReducer.class); job.setReducerClass(SumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` - **编译与打包** 编写好代码后,需将其编译成JAR包以便提交给Hadoop执行。可以通过以下命令完成: ```bash mvn clean package ``` - **提交作业** 将输入数据上传到HDFS,并通过`hadoop jar`命令提交作业: ```bash hdfs dfs -mkdir /input hdfs dfs -put input.txt /input/ hadoop jar target/your-jar-file.jar com.example.WordCount /input /output ``` #### 3. 常见问题及其解决方案 - **问题:无法找到JDK路径** 如果未正确设置JDK路径,在启动Hadoop时可能出现错误。可通过修改`hadoop-env.sh`文件中的JAVA_HOME变量来解决此问题[^2]。 ```bash export JAVA_HOME=/path/to/jdk ``` - **问题:Namenode格式化失败** Namenode格式化可能因临时目录权限不足或其他原因失败。建议手动指定`hadoop.tmp.dir`参数以避免此类问题。 ```properties <property> <name>hadoop.tmp.dir</name> <value>/home/user/hadoop/tmp</value> </property> ``` - **问题:Datanode未能启动** Datanode启动失败可能是由于磁盘空间不足或配置不匹配引起的。检查`dfs.datanode.data.dir`是否指向有效路径,并确保有足够的存储空间。 - **问题:JobTracker无法连接** 若JobTracker无法正常工作,可尝试调整YARN相关配置文件(如`yarn-site.xml`)。例如,启用RM调度器日志记录功能有助于排查问题: ```properties <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property> ``` #### 4. 总结 以上介绍了基于Hadoop伪分布式环境的Java开发流程及相关问题处理方法。合理配置核心组件并遵循最佳实践能够显著提升开发效率。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值