Hadoop是分为3种安装模式的,单机模式,伪分布模式和完全分布模式。众所周知,完全分布模式是企业真实开发用的,大型的系统可能需要成千上万台电脑。没有条件的话,可以搭建单机模式或者伪分布模式。本文主要是讲解怎么应用Hadoop2.8.0搭建单机模式和伪分布模式Hadoop。
1.单机模式
□ 所需软件
- RHEL 6.8
- JRE 1.8
- Hadoop 2.8.0
□ 安装软件
- RHEL 6.8安装
- JRE 1.8
$ rpm -ivh jre-8-linux-i586.rpm
- Hadoop 2.8.0
$ tar -xzf hadoop-2.8.0.tar.gz -C /usr
□ 修改下主机名为master,修改hosts中的主机名,重启系统
$ sudo vi /etc/sysconfig/network
$ sudo vi /etc/hosts
□ Hadoop配置
- /etc/profile添加,然后执行source /etc/profile使其有效。
$ export JAVA_HOME=/usr/java/jre1.8.0
$ export HADOOP_HOME=/usr/hadoop-2.8.0
$ export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
$ export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
- 编辑 hadoop-env.sh,yarn-env.sh,mapred-env.sh文件,将JAVA_HOME设置为Java安装根路径
$ export JAVA_HOME=/usr/java/jre1.8.0
-运行$ bin/hadoop命令
□ Hadoop Sample运行
$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar /文件路径/hadoop-mapreduce-examples-2.8.0.jar wordcount input output
$ cat output/*
2.伪分布式模式
□ 前四步和单机模式一样
□ 修改/usr/hadoop-2.8.0/etc/hadoop/中,配置文件 core-site.xml。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/hadoop-2.8.0/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
★Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果
需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。
此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),
不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个
目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,
同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
□ 修改/usr/hadoop-2.8.0/etc/hadoop/中,配置文件 hdfs-site.xml 。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop-2.8.0/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop-2.8.0/tmp/dfs/data</value>
</property>
</configuration>
□ 修改/usr/hadoop-2.8.0/etc/hadoop/中,配置文件 mapred-site.xml 。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
□ 修改/usr/hadoop-2.8.0/etc/hadoop/中,配置文件 yarn-site.xml 。
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hostname</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
□ 免密码ssh设置
- 现在确认能否不输入口令就用ssh登录localhost:
$ ssh localhost
- 如果不输入口令就无法用ssh登陆localhost,执行下面的命令:
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
□ 配置完成后,执行 NameNode 的格式化:
$./bin/hdfs namenode -format
★成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,
若为 “Exitting with status 1” 则是出错。
□ 启动Hadoop守护进程:
$ sbin/start-all.sh
★查看运行情况hadoop dfsadmin -report或者用jsp命令查看
□ Hadoop Sample运行
- 创建输入HDFS系统的目录:
$ bin/hadoop fs -mkdir -p /user/data/input
★1.使用-p参数可以创建路径中的各级父目录
★2.lib/native下的libhadoop.so.1.0.0如果和OS不匹配的话,下面的命令会报错(unable to load native-library)
查看libhadoop.so.1.0.0文件的版本可以用命令【$file libhadoop.so.1.0.0】,也可以用【$hadoop checknative -a】
命令来检查native状态。
- 将输入文件拷贝到分布式文件系统:
$ bin/hadoop fs -put <localfile path> /user/data/input
★这里有可能会报could only be replicated to 0 nodes, instead of 1 错误
这个问题主要原因是
1、节点通信 包括域名解析 ssh免密 关闭防火墙
2、nameNode格式化不完全 比如之前格式化过 最好先删除tmp和data目录再格式化
- 运行发行版提供的示例程序:
$ bin/hadoop jar /文件路径/hadoop-mapreduce-examples-2.8.0.jar wordcount /user/data/input /user/data/output
- 查看输出文件:
- 将输出文件从分布式文件系统拷贝到本地文件系统查看:
$ bin/hadoop fs -get /user/data/output ./output
$ cat output/*
- 或者在分布式文件系统上查看输出文件:
$ bin/hadoop fs -cat /user/data/output/*
□ 完成全部操作后,停止守护进程:
$ sbin/stop-all.sh