1. centos 新建hadoop用户
#切换到root用户
[sunwei@vdevops ~]$ su
#增加一个名为 hadoop 的用户
[root@vdevops ~]# useradd -m hadoop -G root -s /bin/bash
#给hadoop新建一个密码
[root@vdevops ~]# passwd hadoop
#为hadoop用户增加管理员权限
[root@vdevops sunwei]# visudo
在“## Allow root to run any commands anywhere”这句下面增加:
hadoop ALL=(ALL) ALL
2.配置Java环境
登录hadoop用户。
首先安装JDK,可用yum安装
配置JAVA_HOME环境变量
vim ~/.bashrc
在文件最后面添加如下单独一行(指向 JDK 的安装位置),并保存
export JAVA_HOME=/usr/java/jdk1.8.0_112
接着还需要让该环境变量生效,执行如下代码:
[hadoop@vdevops ~]$ source ~/.bashrc
设置好后我们来检验一下是否设置正确:
[hadoop@vdevops ~]$ echo $JAVA_HOME
[hadoop@vdevops ~]$ java -version
[hadoop@vdevops ~]$ $JAVA_HOME/bin/java -version
如果设置正确的话,$JAVA_HOME/bin/java -version 会输出 java 的版本信息,且和 java -version 的输出结果一样。
3. 安装hadoop
#先创建一个文件夹hadoopDownload用于存放下载的文件(目录/home/hadoop/下):
[hadoop@vdevops ~]$mkdir hadoopDownload
#1.下载hadoop
[hadoop@vdevops hadoopDownload]$ wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.8.2/hadoop-2.8.2.tar.gz
#2.下载mds 该文件包含了检验值,可用于检查 hadoop-2.x.y.tar.gz 的完整性,否则若文件发生了损坏或下载不完整,Hadoop 将无法正常运行。
[hadoop@vdevops hadoopDownload]$ wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-2.8.2/hadoop-2.8.2.tar.gz.mds
#3.检查MD5值是否相等,如果不相等 表示下载的文件不完整
# 3.1 列出hadoop-2.8.2.tar.gz.mds的md5检验值
[hadoop@vdevops hadoopDownload]$ cat ./hadoop-2.8.2.tar.gz.mds | grep 'MD5'
# 3.2 计算hadoop-2.8.2.tar.gz的MD5值,并转化为大写,方便比较
[hadoop@vdevops hadoopDownload]$ md5sum ./hadoop-2.8.2.tar.gz | tr "a-z" "A-Z"
比较3.1 3.2步列出的md5值,若相等则说明下载的tar.gz文件相等,若不相等,则必须重新下载。
解压hadoop包
[hadoop@vdevops hadoopDownload]$ sudo tar -zxf /home/hadoop/hadoopDownload/hadoop-2.8.2.tar.gz -C /usr/local # 解压到/usr/local目录下
[hadoop@vdevops hadoopDownload]$ cd /usr/local/
[hadoop@vdevops local]$sudo mv ./hadoop-2.8.2/ ./hadoop #修改文件夹名
[hadoop@vdevops local]$ sudo chown -R hadoop:hadoop ./hadoop # 修改文件权限
4.Hadoop单机配置(非分布式)
5.Hadoop伪分布式配置
5.1 设置 HADOOP 环境变量
在文件/home/hadoop/.bashrc 中的最后添加以下配置:
# Hadoop Environment Variables
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
这些变量在启动 Hadoop 进程时需要用到,不设置的话可能会报错(这些变量也可以通过修改 ./etc/hadoop/hadoop-env.sh 实现)
5.2 修改Hadoop配置文件
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中
伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml
5.2.1:修改core-site.xml:
将其中的
<configuration>
</configuration>
修改成:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
5.2.2: 修改hdfs-site.xml文件:将
<configuration></configuration>
修改成
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
5.3 NameNode格式化
退回到目录/usr/local/hadoop下,执行 NameNode 的格式化:
[hadoop@vdevops hadoop]$ ./bin/hdfs namenode -format
格式化成功标志:“successfully formatted.”,“Exiting with status 0”。如果失败的话:Exiting with status 1
5.4 开启 NameNode 和 DataNode 守护进程:
在目录/usr/local/hadoop下:
[hadoop@vdevops hadoop]$ sudo ./sbin/start-dfs.sh #开启 NameNode 和 DataNode 守护进程:
在./sbin/start-dfs.sh时可能会报以下错误:
Error: JAVA_HOME is not set and could not be found.
修改 usr/local/hadoop/etc/hadoop/hdoop-env.sh:
将语句 export JAVA_HOME=${JAVA_HOME}
修改为 export JAVA_HOME=/usr/local/java/jdk1.8.0_161
开启之后:
[hadoop@vdevops hadoop]$ jps
964 NameNode
1556 Jps
1158 DataNode
1389 SecondaryNameNode
若出现如下 SSH 的提示 “Are you sure you want to continue connecting”,输入 yes 即可。
关闭守护进程:
./sbin/stop-dfs.sh
有关启动与关闭的日志目录:/usr/local/hadoop/logs/
6.运行Hadoop伪分布式实例
参考:http://blog.csdn.net/sunweijm/article/details/78465230
的第三部分【3 上传jar包部署到hadoop服务器中】
7. 启动YARN
7.1 首先重命名 mapred-site.xml.template 文件
[hadoop@vdevops hadoop]$ mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
7.2 修改mapred-site.xml
修改为:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
7.3 修改文件yarn-site.xml:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
7.4 启动YARN
[hadoop@vdevops hadoop]$ ./sbin/start-dfs.sh #首先启动守护进程
[hadoop@vdevops hadoop]$ ./sbin/start-yarn.sh #启动YARN
[hadoop@vdevops hadoop]$ ./sbin/mr-jobhistory-daemon.sh start historyserver # 开启历史服务器,才能在Web中查看任务运行情况
开启后通过 jps 查看,可以看到多了 NodeManager 和ResourceManager 两个后台进程(比较只开启 NameNode 和 DataNode 守护进程)
[hadoop@vdevops hadoop]$ jps
964 NameNode
2228 ResourceManager
2740 Jps
1158 DataNode
2566 NodeManager
1389 SecondaryNameNode
8. 全分布模式
8.1首先需要配置主从节点的免密登录
参考:http://blog.csdn.net/sunweijm/article/details/78852889
这样从 主节点 登录 从节点就可以不用输用户密码。
注意主从节点的用户名需要一样
1.配置core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://vdevops:9900</value>
<description>set namenode's hostname and ports</description>
</property>
</configuration>
解释:
vdevops是主节点的hostname(也可以写成ip形式),所有丛节点上的该处都应该写上主节点的hostname或者ip,这里就是vdevops。
指定端口为9900,所有主从节点端口都为9900
2.配置hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>fs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
解释:
dfs.replication:因为hadoop是具有可靠性的,它会备份多个副本,value的值就是HDFS的副本数,一般是等于从节点的个数(小于等于从节点的数量)
如果想要snn(SecondaryNameNode)运行在另外一台单独节点上,需要在hdfs-site.xml上增加以下内容:
<property>
<name>dfs.nameservices</name>
<value>hadoop-cluster</value>
</property>
3.配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://vdevops:9901</value>
</property>
</configuration>
4.配置mapred-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>vdevops</value>
</property>
<!-- 指定reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
解释:
vdevops是主节点的hostname,从节点的该值也都应该是主节点的hostname,这里就是vdevops。
所以所有节点(主从节点)的core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml配置文件内容都应该相同
8.2实现主节点控制从节点的集群控制测试
1.主节点中
修改hadoop/etc/hadoop/slaves文件:
删除原先的localhost配置
将从节点的hostname或者ip添加进去
这里我的从节点只有test2一个。
当你去执行start-dfs.sh时,它会去slaves文件中去找从节点(这就是配置免密登录的原因)然后去启动从节点。
2.主节点对自己的免密登录配置
[hadoop@vdevops .ssh]$ cp id_rsa.pub authorized_keys
#测试对本地的免密登录,如下显示
[hadoop@vdevops .ssh]$ ssh 127.0.0.1
Last login: Wed Dec 20 15:27:45 2017 from 192.168.1.247
3.测试主节点控制从节点
主节点上运行start-dfs.sh
[hadoop@vdevops ~]$ /usr/local/hadoop/sbin/start-dfs.sh
查看启动服务情况
#主节点上
[hadoop@vdevops ~]$ jps
28192 SecondaryNameNode
28343 Jps
27935 NameNode
#从节点上
[hadoop@test2 hadoop]$ jps
27702 DataNode
27914 Jps
主节点上运行start-yarn.sh
[hadoop@vdevops ~]$ /usr/local/hadoop/sbin/start-yarn.sh
再次查看主节点:
[hadoop@vdevops ~]$ jps
16372 ResourceManager
15031 NameNode
15288 SecondaryNameNode
16639 Jps
再次查看从几点:
[hadoop@test2 hadoop]$ jps
27972 NodeManager
27702 DataNode
28124 Jps
在web平台查看:
一些问题:
1.一开始在启动运行start-dfs.sh时,发现子节点的Datanode启动不了
参考:http://blog.csdn.net/mmdlyn/article/details/52966942
http://blog.csdn.net/xiesai588/article/details/51222889
这种错误的原因是多次对namenode格式化使得VERSION不一致造成的。所以删除你在core-site.xml中配置的hadoop.tmp.dir所对应目录下的data目录。
1.1 首先在坏死的节点(这里是test2)上单独启动datanode:
进入到sbin下
[hadoop@test2 sbin]$ hadoop-daemon.sh start datanode
1.2 然后用jps查看发现test2的datanode仍然没有起来,
1.3 删除/usr/local/hadoop/tmp/dfs下的data目录
1.4 然后运行start-all.sh就可以看到从节点上datanode已经起来
2.刚启动hadoop时,删除hdfs文件时报错
报错信息:
[hadoop@vdevops hadoop]$ hdfs dfs -rm -r /user/hadoop/README.md
17/12/20 18:38:10 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
rm: Cannot delete /user/hadoop/README.md. Name node is in safe mode.
关闭safe mode模式就可以了:
[hadoop@vdevops hadoop]$ bin/hadoop dfsadmin -safemode leave
[1]: Hadoop安装教程 http://www.powerxing.com/install-hadoop-in-centos/
[2]:《Hadoop 实战 r3》
[3]:hadoop集群的配置 https://www.cnblogs.com/ejiyuan/p/5557061.html
[4]:手把手教你搭建Hadoop全分布式集群 https://www.cnblogs.com/zhangyinhua/p/7652686.html#_label0