单机模式(standalone)
Hadoop的默认模式。当首次解压 Hadoop的源码包时, Hadoop无法了解硬件安装环境,便保守地选择了最小配置。在这种默认模式下所有 3个 XML文件均为空。当配置文件为空时, Hadoop会完全运行在本地。因为不需要与其他节点交互,单机模式就不使用 HDFS,也不加载任何 Hadoop的守护进程。该模式主要用于开发调试 MapReduce程序的应用逻辑。
伪分布模式( Pseudo-DistributedMode )
Hadoop,其中所有的守护进程都运行在同一台机器上。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况, HDFS输入输出,以及其他的守护进程交互。
全分布模式( FullyDistributed Mode )
Hadoop守护进程运行在一个集群上。
一.ubuntu平台上安装JDK
1.将下载好的tar.gz 文件解压到一个文件夹下。
2.然后,配置环境变量。方法如下:
打开终端输入
sudo gedit /etc/profile
输入密码后可以看到:
配置环境变量(在profile文件到最后加上这些代码):
#set java environment
JAVA_HOME=/home/hadoop/java/jdk1.8.0_05
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
如下图:
上面到JAVA_HOME的值是我机器上jdk的文件路径。
最后保存文件即可。
为了是环境变量生效,需要注销一下当前用户,重新登录后在终端中输入(验证是否配置成功)
java -version
二.部署hadoop之单机模式与伪分布式模式
1. 将下载好的hadoop解压,重新命名为hadoop(这是为了方便以后到操作)。
进入etc/hadoop文件夹下,在hadoop-env.sh文件中做修改,在第25行左右到位置中有export JAVA_HOME=*******这样到字样,修改JAVA_HOME的值为你机器中jdk到文件路径即可,这里到值和/etc/profile是相同的。
现在就可以进行单机模式了(省略)。
2. 伪分布式模式配置
这里需要修改etc/hadoop文件夹中到2个文件(现在可以不启动yarn)。分别是core-site.xml、hdfs-site.xml 两个文件
/home/hadoop/hadoop...,红色部分,系统用户名不同,相应的路径也不同,这里的用户是hadoop)
core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<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>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop/tmp/dfs/data</value>
</property>
</configuration>
这样就配置好hadoop了,由于haoop不同结点间到通信是用的ssh,所以我们还需要安装ssh
在ubnuntu下直接在终端中输入
sudo apt-get install openssh-server
如果提示找不到源,更新ubuntu到软件中心即可
sudo apt-get update
这样就安装完成了ssh。下面需要设置免密钥登录ssh了。输入下面两行代码即可:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
这样以后登录本地ssh就不需要密码了。
这里稍微解释一下:ssh-keygen代表生成密钥;-t(注意区分大小写)表示指定生成的密钥类型,dsa是dsa密钥认证的意思,即密钥类型;-P用于提供密语;-f指定生成的密钥文件。然后把id_dsa.pub(公钥)追加到授权的key里面去。
完成了部署。
三.运行wordcount例子
(1)首先格式化namenode并,开启hadoop相关进程(一般启动前把tmp里面的文件全部删除)
bin/hdfs namenode -format
sbin/start-dfs.sh
(2)查看所有进程
(3)把本地到hadoop/input (自己建立的)文件夹中到文件上传到hdfs文件系统到input文件夹下
bin/hdfs dfs -mkdir /input
bin/hdfs dfs -put input/* /input
查看文件是否上传到hdfs
bin/hdfs dfs -ls /input
bin/hdfs dfs -cat /input/word
(4)下面即可运行wordcount了
bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /input /output
(5)查看结果可用下面这条命令
bin/hdfs dfs -cat /output/*
也可以将运行结果取回到本地:
rm -r ./output # 先删除本地的 output 文件夹(如果存在)
bin/hdfs dfs -get /output ./output # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*
Hadoop 运行程序时,输出目录不能存在,否则会提示错误 "org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists" ,因此若要再次执行,需要执行如下命令删除 output 文件夹:
bin/hdfs dfs -rm -r output
(6)关闭进程
sbin/stop-dfs.sh