centos7 安装hadoop:伪分布式配置、全分布模式配置

来源:互联网 发布:自动曝光控制算法 编辑:程序博客网 时间:2024/05/18 12:41

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 Variablesexport HADOOP_HOME=/usr/local/hadoopexport HADOOP_INSTALL=$HADOOP_HOMEexport HADOOP_MAPRED_HOME=$HADOOP_HOMEexport HADOOP_COMMON_HOME=$HADOOP_HOMEexport HADOOP_HDFS_HOME=$HADOOP_HOMEexport YARN_HOME=$HADOOP_HOMEexport HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/nativeexport 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]$ ./sbin/start-dfs.sh #开启 NameNode 和 DataNode 守护进程:

开启之后:

[hadoop@vdevops hadoop]$ jps964 NameNode1556 Jps1158 DataNode1389 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]$ jps964 NameNode2228 ResourceManager2740 Jps1158 DataNode2566 NodeManager1389 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 ~]$ jps28192 SecondaryNameNode28343 Jps27935 NameNode
#从节点上[hadoop@test2 hadoop]$ jps27702 DataNode27914 Jps

主节点上运行start-yarn.sh

    [hadoop@vdevops ~]$ /usr/local/hadoop/sbin/start-yarn.sh

再次查看主节点:

[hadoop@vdevops ~]$ jps16372 ResourceManager15031 NameNode15288 SecondaryNameNode16639 Jps

再次查看从几点:

[hadoop@test2 hadoop]$ jps27972 NodeManager27702 DataNode28124 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.md17/12/20 18:38:10 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicablerm: 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