一、安装Java
1.下载jdk-8u91-linux-x64.tar.gz文件,网址为:http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.安装:
#选择一个安装路径,我选择的是/opt,并将下载的jdk-8u91-linux-x64.tar.gz文件复制到这个文件夹下
$ cd /opt
$ sudo cp ~/Downloads/jdk-8u91-linux-x64.tar.gz -i /opt/
#解压、安装
$ sudo tar zxvf jdk-8u91-linux-x64.tar.gz
$ sudo rm -r jdk-8u91-linux-x64.tar.gz
#检查是否安装成功
二、创建hadoop组和hadoop用户
1.添加hadoop用户到系统用户
$ sudo addgroup hadoop
$ sudo adduser --ingroup hadoop hduser
2.给hadoop用户赋予rs
在root ALL=(ALL:ALL) ALL下面加上hduser ALL=(ALL:ALL) ALL
如下图:
三、配置SSH
以使各机器之间执行指令无需输入登录密码,否则,主节点每次试图访问其他节点时,都需要手动输入这个密码。
1.安装ssh
$ sudo apt-get install openssh-server
2.启动服务
$ sudo /etc/init.d/ssh start
3.启动后,可以通过如下命令查看服务是否正确启动
$ ps -e |grep ssh
4.生成公钥和私钥:
$ ssh-keygen -y -t rsa -P ""
这时会在/home/hduser/.ssh下生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥.
5.现在我们将公钥追加到authorized_keys中
$ cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
6.登入ssh,确认以后登录时不用输入密码
ssh localhost
7.登出
exit
再次登入的话就不需要密码了
四、安装hadoop
1.首先到https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/stable/下载hadoop-2.7.2.tar.gz
2.解压并放在你希望的目录中。我放到了/usr/local/hadoop
$ sudo tar xzf hadoop-2.7.2.tar.gz
$ sudo mv hadoop-2.7.2 /usr/local/hadoop
3.要确保所有的操作都是在用户hdsuer下完成的:
$ sudo chown -R hduser:hadoop /usr/local/hadoop
五、配置~/.bashrc
1.切换到hadoop用户,我的是hduser
$ su - hduser
2..查看java安装路径
update-alternatives - -config java
完整的路径为: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
我们只取前面的部分 /usr/lib/jvm/java-7-openjdk-amd64
3.修改配置文件bashrc
$ sudo gedit ~/.bashrc
#在文件末尾追加下面内容
#HADOOP VARIABLES START
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
#HADOOP VARIABLES END
4.修改/usr/local/hadoop/etc/hadoop/hadoop-env.sh
$ sudo gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh
找到JAVA_HOME变量,修改此变量如下
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
至此,单机模式配置完毕,下面进行wordcount测试
六、wordcount测试
1.首先在hadoop目录下新建文件夹input
$ cd /usr/local/hadoop/
$ mkdir input
2.将README.txt文件拷贝到input文件夹下,以统计文件中单词的频数
$ sudo cp README.txt input
3.运行wordcount程序,并将输出结果保存在output文件夹下
#每次重新执行wordcount程序的时候,都需要先把output文件夹删除!否则会出错
$ bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output
4.查看字符统计结果
$ cat output/*
七、伪分布模式配置
1.修改2个配置文件 core-site.xml 和 hdfs-site.xml,配置文件位于 /usr/local/hadoop/etc/hadoop/ 中
首先在hadoop目录下创建几个文件夹:
$ cd /usr/local/hadoop
$ mkdir tmp
$ mkdir tmp/dfs
$ mkdir tmp/dfs/data
$ mkdir tmp/dfs/name
修改 core-site.xml:
$ sudo gedit etc/hadoop/core-site.xml
修改为以下配置:
修改hdfs-site.xml:
$ sudo gedit etc/hadoop/hdfs-site.xml
修改为以下配置:
2.执行NameNode 的格式化
./bin/hdfs namenode -format
注意!只有刚创建hadoop集群的时候才需要格式化,不能对一个运行中的hadoop文件系统(HDFS)格式化,否则会丢失数据!!
成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。
3.启动hadoop
执行start-all.sh来启动所有服务,包括namenode,datanode.
$ start-all.sh
在这里,如果出现了 Error: Cannot find configuration directory: /etc/hadoop,则通过下面方法解决:
在hadoop-env.sh 配置一条hadoop配置文件所在目录
$ sudo gedit etc/hadoop/hadoop-env.sh
加上export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
修改后如下图:
$ source etc/hadoop/hadoop-env.sh
再次启动所有服务就好了
$ start-all.sh
启动时可能会出现如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。该 WARN 提示可以忽略,并不会影响正常使用
4.通过jps命令判断是否成功启动:
出现这种情况后,在计算机中搜索jps,由于我的java安装路径是:/opt/jdk1.8.0_91,所以jps位于:/opt/jdk1.8.0_91/bin
$ cd /opt/jdk1.8.0_91/bin
$ ./jps
若成功启动则会列出如下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”
5.通过web界面查看hdfs信息
转到http://localhost:50070/即可查看
如果不能加载出http://localhost:50070/,则可能通过下面的方法解决:
先执行NameNode 的格式化
$ ./bin/hdfs namenode -format
出现提示输入Y/N时一定要输入大写Y!!!
出现提示输入Y/N时一定要输入大写Y!!!
出现提示输入Y/N时一定要输入大写Y!!!
再执行start-all.sh来启动所有服务
$ start-all.sh
然后执行jps命令
$ cd /opt/jdk1.8.0_91/bin
$ ./jps
再次转到网址http://localhost:50070/,就可以正常加载了。6.停止运行hadoop
$ stop-all.sh
出现了no datanode to stop的提示:
解决方法:
在stop-all.sh之后,删除/tmp/dfs/data以及/tmp/dfs/name下的所有内容,如下图所示,均包含一个current文件夹:
因此只需删除current文件夹
删除之后,再次格式化namenode、启动所有服务start-all.sh、并停止stop-all.sh,就可以正常stop datanode了。