Centos7安装Hadoop2.7

准备

1、三台Centos7的机器,在/etc/hosts中都加上所有的hostname解析:

172.20.0.4  node1

172.20.0.5  node2

172.20.0.6  node3

2、配置node1到三台机器的免密登录

3、全部安装jdk8

4、官网下载安装包:hadoop-2.7.7.tar.gz(推荐中国科学技术大学开源镜像:http://mirrors.ustc.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz)

5、计划:node1作为namenode和datanode,node2和node3作为datanode

配置

三台都创建路径/mydata/,并配置环境变量:

export HADOOP_HOME=/mydata/hadoop-2.7.7

export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

下面在node1上修改hadoop的配置,解压hadoop-2.7.7.tar.gz到/mydata/,进入/mydata/hadoop-2.7.7/etc/hadoop/,修改以下文件(有些文件需要去掉,template后缀,或拷贝一份重命名):

<!-- 文件名 core-site.xml -->
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://node1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/mydata/data/hadoop-${user.name}</value> </property> </configuration>
<!-- 文件名 hdfs-site.xml -->
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>
<!-- 文件名 mapred-site.xml -->
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
<!-- 文件名 yarn-site.xml -->
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node1</value>
    </property>
</configuration>
<!-- 文件名 slaves -->
node1
node2
node3
特别说明  
fs.defaultFS namenode上文件系统的地址
hadoop.tmp.dir 多个路径的基础,包括namenode和datanode的数据,默认是/tmp/hadoop-${user.name}
dfs.replication 副本数,这里设为2,这样集群中共三份数据,适用日常大部分情况了
yarn.resourcemanager.hostname yarn资源管理器所在host
slaves 该文件中列出的是作为从节点的datanode,若node1只打算作为namenode则不需要写进去

默认日志目录在$HADOOP_HOME/logs,pid文件在/tmp,可以进行修改:

# 文件名 hadoop-env.sh
export HADOOP_PID_DIR="/mydata/data/pid"
export HADOOP_LOG_DIR="/mydata/logs/hadoop"
# 文件名 yarn-env.sh
export YARN_LOG_DIR="/mydata/logs/yarn"
export YARN_PID_DIR="/mydata/data/pid"

配置完成后将hadoop程序文件拷贝到其他两台:

node1> scp /mydata/hadoop-2.7.7/ root@node2:/mydata/
node1> scp /mydata/hadoop-2.7.7/ root@node3:/mydata/

启动

需要先在node1初始化namenode(只有第一次启动前需要,除非删除了hadoop.tmp.dir下namenode的数据):

node1> hdfs namenode -format

看到 Storage directory /mydata/data/hadoop-root/dfs/name has been successfully formatted. 则表示成功

下面先启动hdfs,后启动yarn:

node1> start-dfs.sh
node1> start-yarn.sh

验证node1的进程:

node1> jps
[pid]  Jps
[pid]  DataNode
[pid]  NameNode
[pid]  SecondaryNameNode
[pid]  NodeManager
[pid]  ResourceManager

验证node2和node3的进程(两台应该是一样的):

node2> jps
[pid]  DataNode
[pid]  Jps
[pid]  NodeManager

测试

通过浏览器可以访问以下地址:

namenode的后台 http://node1:50070
yarn资源管理的后台 http://node1:8088

前者切换到 Datanodes :

 后者进入 Cluster -> Nodes :

 下面执行一个官方示例(wordcount),先准备两个文件,内容如下:

# 文件名 1.txt
天空    sky
天空    sky
天空    sky

# 文件名 2.txt
海洋    ocean
海洋    ocean

将这两个文件上传到hdfs,然后执行任务:

# 创建路径(将root改为自己的用户名)
node1> hdfs dfs -mkdir -p /user/root/input
# 上传文件
node1> hdfs dfs -put *.txt input
# 执行wordcount任务统计文件中每个单词的数量,并等待其执行结束
node1> hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount input output
# 查看结果
node1> hdfs dfs -cat output/*
ocean  2
sky   3
天空   3
海洋   2
# 若要重复执行任务,需要删除output文件夹,或者在命令中换一个输出目录
node1> hdfs dfs -rm -r output

可以在yarn的资源管理平台 Cluster -> Applications 查看到该任务:

 启用jobhistory

这个不是必须的,但可以更好的查看job的历史记录和管理job的日志

# 文件名 mapred-env.sh
export HADOOP_MAPRED_LOG_DIR="/mydata/logs/mapred"
export HADOOP_MAPRED_PID_DIR="/mydata/data/pid"
<!-- 文件名 mapred-site.xml -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node1:10020</value>
    </property>
<!-- 文件名 yarn-site.xml 日志聚合,开启后job的日志不再存到node本地,而是上传到hdfs -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>

停止集群:

node1> stop-yarn.sh
node1> stop-dfs.sh

然后将修改的配置同步更新到其他所有节点,并在启动集群后启动historyserver:

node1> start-yarn.sh
node1> start-dfs.sh
node1> mr-jobhistory-daemon.sh start historyserver

通过浏览器访问 http://node1:19888 :

over

猜你喜欢

转载自www.cnblogs.com/toSeek/p/11981809.html