配置本地Hadoop环境

进行大数据开发一般都离不开Hadoop环境,Hadoop慢慢也变成了一个生态环境的代名词,这里记录一下Hadoop本地伪分布式环境的搭建。

本地环境

操作系统 : manjaro-64bit

内存 : 8GB

CPU : i7-4770S

前期准备

Hadoop2.7.6,下载链接

JDK1.8,下载链接

配置工作

解压和配置环境变量

  1. 将hadoop-2.7.6.tar.gz和jdk-8u191-linux-x64.tar.gz拷贝到本地~/apps目录下(这里我习惯将软件安装到自己创建的~/apps文件夹下),然后解压:
1
2
tar xzvf hadoop-2.7.6.tar.gz
tar xzvf jdk-8u191-linux-x64.tar.gz
  1. 配置HADOOP_HOME和JAVA_HOME环境变量,修改当前用户~/.bashrc(如果使用的是zsh就是修改~/.zshrc),在文件尾添加如下内容:
1
2
3
4
5
6
7
# JDK
export JAVA_HOME=/home/jony/apps/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH

# HADOOP_HOME
export HADOOP_HOME=/home/jony/apps/hadoop-2.7.6
export PATH=$HADOOP_HOME/bin:$PATH
  1. 使环境变量生效:

如果是bash环境下:

1
source ~/.bashrc

如果是zsh环境:

1
source ~/.zshrc

配置HDFS

  1. 配置hadoop-2.7.6/etc/hadoop/core-site.xml,添加默认文件路径,配置内容如下:
1
2
3
4
5
6
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:50000</value>
</property>
</configuration>

这里如果自己配置了hostname,可以使用自己配置的hostname替换localhost,默认使用localhost,端口信息也可以自己指定为未使用的端口。

  1. 配置hadoop-2.7.6/etc/hadoop/hdfs-site.xml,配置namenode和datanode相关属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<configuration>
<property>
<name>dfs.namenode.rpc-address</name>
<value>localhost:50000</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>localhost:50070</value>
</property>
<property>
<name>dfs.datanode.address</name>
<value>localhost:50010</value>
</property>
<property>
<name>dfs.datanode.http.address</name>
<value>localhost:50075</value>
</property>
<property>
<name>dfs.datanode.ipc.address</name>
<value>localhost:50020</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/jony/apps/hadoop-2.7.6/tmp/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/jony/apps/hadoop-2.7.6/tmp/data/0,/home/jony/apps/hadoop-2.7.6/tmp/data/1,/home/jony/apps/hadoop-2.7.6/tmp/data/2</value>
</property>
</configuration>
这里dfs.namenode.name.dir和dfs.datanode.data.dir可以根据自己的喜好进行配置,dfs.namenode.name.dir用于确定将HDFS文件系统的元信息保存在什么目录下。如果这个参数设置为多个目录,那么这些目录下都保存着元信息的多个备份。dfs.datanode.data.dir用于确定将HDFS文件系统的数据保存在什么目录下。
  1. 初次运行HDFS前需要先格式化HDFS,使用如下命令即可:
1
hdfs namenode -format
  1. 前台启动namenode和datanode
1
2
hdfs namenode
hdfs datanode
  1. 使用浏览器查看HDFS,在浏览器输入localhost:50070,注意50070端口是hdfs-site.xml中配置的dfs.namenode.http-address的值。如果能够看到相关页面信息,就代表HDFS配置成功了。

  2. 使用后台启动HDFS的namenode和datanode,因为前台启动一般是做调试用,正常生产环境下都是后台启动的,后台启动和停止namenode和datanode的方式如下:

1
2
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
1
2
sbin/hadoop-daemon.sh stop namenode
sbin/hadoop-daemon.sh stop datanode
  1. 使用HDFS的一些shell命令操作HDFS:
  • 查看HDFS目录:

    1
    hadoop fs -ls /
  • 创建文件夹:

    1
    hadoop fs -mkdir /user/jony
  • 将本地文件上传到HDFS:

    1
    2
    3
    4
    5
    6
    7
    将本地~/test.txt文件上传到HDFS的/user/jony目录下:
    hadoop fs -put ~/test.txt /user/jony
    or
    hadoop fs -copyFromLocal ~/test.txt /user/jony

    查看是否上传成功:
    hadoop fs -ls /user/jony/test.txt
  • 查看HDFS上文件的内容:

    1
    hadoop fs -text /user/jony/test.txt

    或者

    1
    hadoop fs -cat /user/jony/test.txt
  • 从HDFS上将文件拷贝到本地:

    1
    2
    3
    hadoop fs -get /user/jony/test.txt ~/test_hdfs.txt
    or
    hadoop fs -copyToLocal /user/jony/test.txt ~/test_hdfs.txt

配置YARN

  1. 配置hadoop-2.7.6/etc/hadoop/yarn-site.xml,添加默认文件路径,配置内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>localhost:8088</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/home/jony/apps/hadoop-2.7.6/tmp/yarn/0/logs,/home/jony/apps/hadoop-2.7.6/tmp/yarn/1/logs,/home/jony/apps/hadoop-2.7.6/tmp/yarn/2/logs</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/jony/apps/hadoop-2.7.6/tmp/yarn/0/local,/home/jony/apps/hadoop-2.7.6/tmp/yarn/1/local,/home/jony/apps/hadoop-2.7.6/tmp/yarn/2/local</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

yarn.nodemanager.log-dirs表示yarn日志存放地址(可配置多个目录)。yarn.nodemanager.local-dirs表示中间结果存放位置,这个参数通常会配置多个目录,以分摊磁盘IO负载。yarn.nodemanager.aux-services一般要配置为mapreduce_shuffle才能运行MapReduce程序。

  1. 配置hadoop-2.7.6/etc/hadoop/mapred-site.xml,添加默认文件路径,配置内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost:19888</value>
</property>
</configuration>
  1. 配置本地ssh免密登录,启动YARN时需要:
  • 创建rsa密钥:

    1
    ssh-keygen -t rsa
  • 加入authorized_keys:

    1
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  1. 启动resourcemanager和nodemanager:
1
2
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
  1. 在浏览器查看YARN,输入http://localhost:8088

  2. 运行计算Pi的MapReduce程序测试YARN:

1
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar pi 5 10
  1. 关闭resourcemanager和nodemanager:
1
2
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager

总结

到此Hadoop基本环境就配置完成了,主要是配置了HDFS和YARN,并运行了简单的MapReduce程序来测试YARN环境的搭建是否正确。

HDFS是分布式文件系统,是大数据基础的存储管理系统,用于管理分布式文件的存储,实现分布式文件的高可用、线性扩展。

YARN是资源调度管理系统,负责在任务运行时调度集群资源给任务使用。

Hadoop生态还有很多内容,这里先不展开,后续用到其他的工具时再单独记录。

2018.12.26 晴 温度零下