hadoop-0.23.9安装以及第一个mapreduce测试程序

     hadoop是一个能够对大量数据进行分布式处理的软件框架。它实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

    这里是一些公司使用hadoop的情况,POwerByWIki  :http://wiki.apache.org/hadoop/PoweredBy,可以看到目前hadoop在世界范围内的的使用情况。

    对这个东西的介绍也就不再多说,并且关于他的一个架构大家可以google去查询(主从关系Master-Slaves),我更多的是想通过hadoop这个并行框架学习如何去写mapreduce,所以就今天这里只说说一开始如何安装并配置hadoop,并且最后利用《hadoop实战》上的一个简单的wordcount来测试我们的hadoop是否搭建成功。(当然hadoop本身适用于集群的数据处理工作,但是这里我只是学习下简单的mapreduce,所以可以将它配置为一个伪分布式的模式,只在本机上运行就ok!)

   关于hadoop的版本,可以参见下 http://ipjmc.iteye.com/blog/1767819 这里对hadoop版本衍生的说明,我下面的0.23.9已经是第二代hadoop体系了,包含HDFS Federation和YARN两个系统

   [环境说明]:

   Ubuntu12.10 +hadoop-0.23.9+openjdk1.7.0

   [Start]:

   首先我们需要一个hadoop的releases版本,可以从这个链接下载:http://mirrors.cnnic.cn/apache/hadoop/common/

    然后 

tar -xzf hadoop-0.23.9.tar.gz
     sudo mv hadoop-0.23.9 /usr/local/      (目录自己设定,后面的配置文件目录要保持一致)
cd /usr/local/
     sudo ln -s hadoop-0.23.9/  hadoop
   完成后需要安装我们的java jdk了,可以直接sudo apt-get install openjdk-7-jre

   安装完后可以看看java的版本 : java -version

   [Step 2]:

  安装ssh-server,ubuntu默认只会安装ssh的client,你的机子如果每安装过ssl-server端,别人是没办法ssh你的机子。

   sudo apt-get install openssh-server或是 sudo apt-get install ssh

  然后配置本机无密钥登录,

  ssh-keygen -t rsa -P ""

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

  可以检测下是否成功,即登录自己的机子,with command : ssh localhost  

  [Step 3]:

  当然我么需要为hadoop自己建立一个用户组,这样是为了以后的事物处理,在这个用户组下在建立一个hadoop用户,当作master管辖下的一个slave,在集群上,就会有许多的用户了,相当于Mul-slave。 

    创建hadoop用户组:   

    sudo addgroup hadoop

    创建hadoop用户:

    sudo adduser -ingroup hadoop hadoop

    给hadoop这个用户设置权限,编辑/etc/sudoers文件,给hadoop用户赋予root用户同样的权限,

     在root   ALL=(ALL:ALL)   ALL下添加 hadoop   ALL=(ALL:ALL)  ALL,

  [Step 4]:

     在这一步,我们就开始配置我们的hadoop的配置:

    chown  -R hadoop:hadoop /usr/local/hadoop
    chown  -R hadoop:hadoop /usr/local/hadoop-0.23.9

    切换用户:su hadoop

    1. 配置jdk及hadoop环境变量

  编辑 sudo vim /etc/profile ,添加以下配置信息:

#java environment
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
export PATH=${JAVA_HOME}/bin:$PATH
#hadoop environment
export HADOOP_PREFIX=/usr/local/hadoop-0.23.9
export PATH=$PATH:$HADOOP_PREFIX/bin
export PATH=$PATH:$HADOOP_PREFIX/sbin
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export YARN_HOME=${HADOOP_PREFIX}
export HADOOP_CONF_DIR=${HADOOP_PREFIX}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_PREFIX}/etc/hadoop

2.hadoop 文件配置

 hadoop@szm-Lenovo:~$ cd /usr/local/hadoop/etc/hadoop/

hadoop@szm-Lenovo:/usr/local/hadoop/etc/hadoop$ vim yarn-env.sh 

添加配置信息:

export HADOOP_FREFIX=/usr/local/hadoop
export HADOOP_COMMON_HOME=${HADOOP_FREFIX}
export HADOOP_HDFS_HOME=${HADOOP_FREFIX}
export PATH=$PATH:$HADOOP_FREFIX/bin
export PATH=$PATH:$HADOOP_FREFIX/sbin
export HADOOP_MAPRED_HOME=${HADOOP_FREFIX}
export YARN_HOME=${HADOOP_FREFIX}
export HADOOP_CONF_HOME=${HADOOP_FREFIX}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_FREFIX}/etc/hadoop

之后就需要配置hadoop的运行配置文件:
 hadoop@szm-Lenovo:/usr/local/hadoop/etc/hadoop$ vim core-site.xml

 配置为:

<configuration>
<property> 

    <name>fs.defaultFS</name> 

    <value>hdfs://localhost:12200</value> 

  </property>

  <property>  

    <name>hadoop.tmp.dir</name> 

    <value>/usr/local/hadoop/hadoop-root</value> 

  </property> 

<property>

  <name>fs.arionfs.impl</name>

  <value>org.apache.hadoop.fs.pvfs2.Pvfs2FileSystem</value>

  <description>The FileSystem for arionfs.</description>

</property> 
</configuration>
hadoop@szm-Lenovo:/usr/local/hadoop/etc/hadoop$ vim hdfs-site.xml 

<configuration>
 <property>

    <name>dfs.namenode.name.dir</name>

    <value>file:/usr/local/hadoop/data/dfs/name</value>

    <final>true</final>

    </property>

    <property>

    <name>dfs.namenode.data.dir</name>

    <value>file:/usr/local/hadoop/data/dfs/data</value>

    <final>true</final>

    </property>

    <property>  

    <name>dfs.replication</name>

    <value>1</value>

    </property>

    <property>

    <name>dfs.permission</name>

    <value>false</value>

    </property>
</configuration>
hadoop@szm-Lenovo:/usr/local/hadoop/etc/hadoop$ vim mapred-site.xml  (原来存在的是有后缀为.template的文件,改掉)

<configuration>
<property>

    <name>mapreduce.framework.name</name>

    <value>yarn</value>

    </property>

    <property>

    <name>mapreduce.job.tracker</name>

    <value>hdfs://localhost:9001</value>

    <final>true</final>

    </property>

    <property>

    <name>mapreduce.map.memory.mb</name>

    <value>1536</value>

    </property>

    <property>

    <name>mapreduce.map.java.opts</name>

    <value>-Xmx1024M</value>

    </property>

    <property>

    <name>mapreduce.reduce.memory.mb</name>

    <value>3072</value>

    </property>

    <property>

    <name>mapreduce.reduce.java.opts</name>

    <value>-Xmx2560M</value>

    </property>

    <property>

    <name>mapreduce.task.io.sort.mb</name>

    <value>512</value>

    </property>
 <property>

    <name>mapreduce.task.io.sort.factor</name>

    <value>100</value>

    </property>    

    <property>

    <name>mapreduce.reduce.shuffle.parallelcopies</name>

    <value>50</value>

    </property>

    <property>

    <name>mapreduce.system.dir</name>

    <value>file:/usr/local/hadoop/data/mapred/system</value>

    </property>

    <property>

    <name>mapreduce.local.dir</name>

    <value>file:/usr/local/hadoop/data/mapred/local</value>

    <final>true</final>

    </property>
</configuration>

hadoop@szm-Lenovo:/usr/local/hadoop/etc/hadoop$ vim yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<property> 

    <name>yarn.nodemanager.aux-services</name> 

    <value>mapreduce.shuffle</value> 

  </property> 

  <property> 

    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> 

    <value>org.apache.hadoop.mapred.ShuffleHandler</value> 

  </property> 

  <property> 

    <name>mapreduce.framework.name</name> 

    <value>yarn</value> 

  </property> 

  <property> 

    <name>user.name</name> 

    <value>hadoop</value> 

  </property> 

  <property> 

    <name>yarn.resourcemanager.address</name> 

    <value>localhost:54311</value> 

  </property> 

  <property> 

    <name>yarn.resourcemanager.scheduler.address</name> 

    <value>localhost:54312</value> 

  </property> 
<property> 

    <name>yarn.resourcemanager.webapp.address</name> 

    <value>localhost:54313</value> 

  </property> 

  <property> 

    <name>yarn.resourcemanager.resource-tracker.address</name> 

    <value>localhost:54314</value> 

  </property> 

  <property> 

    <name>yarn.web-proxy.address</name> 

    <value>localhost:54315</value> 

  </property> 

  <property> 

    <name>mapred.job.tracker</name> 

    <value>localhost</value> 

  </property>
</configuration>
编辑完成后就差不多将hadoop的配置信息改完了,其中的localhost因为是运行在本机的伪分布式,当然可以根据实际的集群关系该为该宿主机的信息

[Step 5]:

测试我们的hadoop是否运行,

hadoop@szm-Lenovo:~$ cd /usr/local/hadoop/sbin/



hadoop@szm-Lenovo:/usr/local/hadoop/sbin$ ./start-dfs.sh 

Starting namenodes on [localhost]
localhost: starting namenode, logging to /usr/local/hadoop-0.23.9/logs/hadoop-hadoop-namenode-szm-Lenovo.out
localhost: starting datanode, logging to /usr/local/hadoop-0.23.9/logs/hadoop-hadoop-datanode-szm-Lenovo.out
Starting secondary namenodes [3dns-2.adobe.com]
3dns-2.adobe.com: starting secondarynamenode, logging to /usr/local/hadoop-0.23.9/logs/hadoop-hadoop-secondarynamenode-szm-Lenovo.out



hadoop@szm-Lenovo:/usr/local/hadoop/sbin$ ./start-yarn.sh 
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop-0.23.9/logs/yarn-hadoop-resourcemanager-szm-Lenovo.out
localhost: starting nodemanager, logging to /usr/local/hadoop-0.23.9/logs/yarn-hadoop-nodemanager-szm-Lenovo.out



可以用java的Jps命令查看hadoop是否成功运行:

hadoop@szm-Lenovo:/usr/local/hadoop/sbin$ jps
1200 Jps
27288 NameNode
32150 ResourceManager
28138 SecondaryNameNode
32375 NodeManager
27668 DataNode

如果显示为上面的信息,则证明hadoop正常运行,上面的几个进程namenode是集群上的宿主节点信息,然后还有mapreduce对应的任务检测进程,可以查看集群节点的任务提交情况,然后处理。(我也是刚开始看,架构还不是很懂)

[STep 6 ]:

成功后我们就可以测试下第一个mapreduce程序,利用它自带的一个wordcount例子来运行下,

在一个目录下建立文件:hadoop@szm-Lenovo:~/jkl$ touch test.txt

编辑文件内容为:hadoop@szm-Lenovo:~/jkl$ cat test.txt 
a s d f g h j k l p o i u y t r e w q z x c v b n m s d f a g h y t c v g f d s

在hadoop的hdfs文件系统建立一个文件夹

hadoop@szm-Lenovo:~/jkl$ hadoop fs -mkdir /test

提交test.txt 

hadoop@szm-Lenovo:~/jkl$ hadoop fs -copyFromLocal test.txt /test

产看提交信息:

hadoop@szm-Lenovo:~/jkl$ hadoop fs -ls /test

Found 1 items
-rw-r--r--   1 hadoop supergroup         80 2013-10-10 16:29 /test/test.txt

然后运行wordcount:

hadoop@szm-Lenovo:~/jkl$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-0.23.9.jar wordcount /test/test.txt  /test/out

查看结果信息:

hadoop@szm-Lenovo:~/jkl$ hadoop fs -ls /test/out
Found 2 items
-rw-r--r--   1 hadoop supergroup          0 2013-10-10 16:32 /test/out/_SUCCESS
-rw-r--r--   1 hadoop supergroup        104 2013-10-10 16:32 /test/out/part-r-00000

查看单词统计结果:

hadoop@szm-Lenovo:~/jkl$ hadoop fs -cat /test/out/part-r-00000

a       2
b       1
c       2
d       3
e       1
f       3
g       3
h       2
i       1
j       1
k       1
l       1
m       1
n       1
o       1
p       1
q       1
r       1
s       3
t       2
u       1
v       2
w       1
x       1
y       2
z       1
运行结果就是上面的样子,一个整体的体验流程就是这样,然后我们需要现在单机上学习如何写我们的mapreduce程序。若是想拓展当然可以搞一个真正的集群,可惜,现在没有硬件设备。就是自己的PC。好了,就到这里,手酸了。

<think>我们正在解决Hadoop2.7.7运行MapReduce示例程序时出现的"找不到或无法加载主类"错误。根据引用[1]和[2],用户尝试运行示例程序(如pi或grep)时遇到问题。这个错误通常是由于Hadoop类路径配置不正确或示例JAR文件路径错误引起的。解决方案步骤:1.**确认JAR文件路径**:首先,确保你使用的JAR文件路径正确。在Hadoop2.7.7中,示例JAR文件通常位于:`$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar`使用绝对路径来运行命令,例如:```bashhadoopjar/path/to/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jarpi1010```2.**设置HADOOP_CLASSPATH**:如果类路径没有正确设置,Hadoop可能无法找到主类。可以尝试设置`HADOOP_CLASSPATH`环境变量,包含示例JAR文件所在的目录:```bashexportHADOOP_CLASSPATH=$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar```3.**检查Hadoop配置文件**:确保`mapred-site.xml`中配置了正确的框架名称(YARN):```xml<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>```4.**重新初始化环境变量**:有时环境变量可能没有正确加载,尝试重新加载环境变量:```bashsource$HADOOP_HOME/etc/hadoop/hadoop-env.sh```5.**检查JAVA_HOME设置**:在`hadoop-env.sh`中确认`JAVA_HOME`设置正确(引用[3][4]):```bashexportJAVA_HOME=/usr/local/src/jdk1.8.0_381#替换为你的实际路径```6.**使用完整的类名**:如果上述方法无效,可以尝试使用完整的类名运行。例如,计算pi的类名为`org.apache.hadoop.examples.Pi`:```bashhadoopjar/path/to/hadoop-mapreduce-examples-2.7.7.jarorg.apache.hadoop.examples.Pi1010```7.**检查Hadoop服务状态**:确保HDFS和YARN服务已经启动:```bashstart-dfs.shstart-yarn.sh```8.**检查JAR文件完整性**:确认JAR文件没有损坏。可以通过列出JAR文件内容来检查:```bashjartf/path/to/hadoop-mapreduce-examples-2.7.7.jar|grepPi.class```应该能看到`org/apache/hadoop/examples/Pi.class`。9.**检查用户权限**:确保当前用户有权限执行Hadoop命令和访问JAR文件。如果以上步骤仍无法解决问题,请检查Hadoop日志(位于`$HADOOP_HOME/logs/`)以获取更详细的错误信息。相关问题:1.Hadoop中如何正确配置类路径?2.如何诊断Hadoop作业提交失败的原因?3.HadoopMapReduce示例程序有哪些常用示例?4.如何修复Hadoop中的类加载问题?</think>### 解决 Hadoop 2.7.7 MapReduce "找不到或无法加载主类" 错误 #### 🔍 问题原因分析 该错误通常由以下原因引起: 1. **JAR文件路径错误**:Hadoop无法定位示例程序JAR文件[^1][^2] 2. **类路径配置缺失**:Hadoop未正确加载MapReduce依赖库 3. **环境变量未生效**:`HADOOP_CLASSPATH`未包含必要路径 4. **JAR文件损坏**:下载或传输过程中文件损坏 #### ✅ 解决方案步骤 ##### 1. 验证JAR文件路径 ```bash # 检查示例JAR是否存在(注意版本号) ls $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar # 正确执行命令格式(使用绝对路径) hadoop jar /path/to/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi 10 10 ``` ##### 2. 配置全局类路径 编辑 `hadoop-env.sh` 添加类路径: ```bash vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh ``` 添加以下配置(根据实际路径调整): ```bash export HADOOP_CLASSPATH=$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/common/* ``` ##### 3. 修复依赖库路径 在 `mapred-site.xml` 添加库路径配置: ```xml <property> <name>mapreduce.application.classpath</name> <value> $HADOOP_HOME/share/hadoop/mapreduce/*, $HADOOP_HOME/share/hadoop/mapreduce/lib/*, $HADOOP_HOME/share/hadoop/common/*, $HADOOP_HOME/share/hadoop/common/lib/* </value> </property> ``` ##### 4. 验证JAR文件完整性 ```bash # 检查文件MD5(应与官方一致) md5sum $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar # 重新下载损坏的JAR(从官方镜像) wget https://archive.apache.org/dist/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz tar -xzf hadoop-2.7.7.tar.gz --strip-components=2 hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar ``` ##### 5. 使用完整类名执行 ```bash hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar \ org.apache.hadoop.examples.Pi 10 10 ``` ##### 6. 检查服务状态 确保HDFS和YARN已启动: ```bash # 检查NameNode hdfs dfsadmin -report # 检查YARN资源管理器 yarn node -list ``` #### ⚠️ 注意事项 1. **权限问题**:确保执行用户对JAR文件有读取权限 2. **配置同步**:在集群环境下同步所有节点的配置文件 3. **环境变量生效**:修改后执行 `source $HADOOP_HOME/etc/hadoop/hadoop-env.sh` 4. **版本一致性**:确认命令中的JAR版本号与实际完全匹配 > 通过上述步骤可解决99%的类加载错误。若仍失败,检查 `$HADOOP_HOME/logs/userlogs/` 中的详细错误日志。 --- ### 相关问题 1. **如何验证Hadoop集群的MapReduce功能是否正常?** > 探讨MapReduce健康检查的标准流程 2. **Hadoop类路径冲突有哪些典型表现?如何解决?** > 分析类加载冲突的诊断方法与解决策略 3. **Hadoop 2.x与3.x的MapReduce API有何兼容性差异?** > 对比版本间API变化及迁移注意事项 4. **如何为自定义MapReduce作业配置依赖库?** > 解析作业依赖管理的三种实现方式 5. **Hadoop环境变量配置的最佳实践是什么?** > 探讨全局配置与作业级配置的优先级管理 [^1]: Hadoop示例程序执行方法 [^2]: MapReduce作业运行错误分析 [^3]: Hadoop类路径配置规范 [^4]: JAR文件完整性验证流程 [^5]: Hadoop服务状态检查方法
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值