Hadoop集群安装配置教程
Hadoop 集群的安装配置大致为如下流程:
1. 选定一台机器作为 Master
2. 在 Master 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
3. 在 Master 节点上安装 Hadoop,并完成配置
4. 在其他 Slave 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
5. 将 Master 节点上的/usr/local/hadoop 目录复制到其他 Slave 节点上
6. 在 Master 节点上开启 Hadoop
配置 hadoop 用户、安装 SSH server、安装 Java 环境、安装 Hadoop 等过程已经在Hadoop安装教程_单机/伪分布式配置或 CentOS安装Hadoop_单机/伪分布式配置中有详细介绍,请前往查看,不再重复叙述。
具体实施步骤:
1) 创建一个hadoop用户,命令为useradd -mhadoop -s /bin/bash#创建新的用户。修改密码passwd hadoop,增加管理员权限,方便部署。执行sudo visudo,找到第98行左右,在root ALL(ALL) ALL这行下面添加hadoop ALL=(ALL)ALL当中的间隔为tab,如下图所示:
2) 如果是用 CentOS 6.x 系统,则是修改 /etc/sysconfig/network文件,命令为sudo vim /etc/sysconfig/network,改为HOSTNAME=Master。如下图所示:
3) 然后执行如下命令修改自己所用节点的IP映射,命令为sudovim /etc/hosts,本教程所使用的三个节点的名称和对应的IP关系如下:
10.154.4.25Master
10.154.4.26Slave1
10.154.4.27Slave2
我们在/etc/hosts中将该映射关系写上去即可,如下图所示。
4) 修改完成后需要重启一下,重启后在终端中才会看到机器名的变化。接下来的教程中请注意区分 Master 节点与 Slave 节点的操作。如上面讲的是 Master 节点的配置,而在其他的 Slave 节点上,也要对 /etc/hostname(修改为 Slave1、Slave2 等) 和/etc/hosts(跟 Master 的配置一样)这两个文件进行修改!
5) 配置好以后需要在各个节点上执行如下命令,测试是否互相ping得通,如果ping不通,后面就无法顺利配置成功,命令为:ping Master -c 3 ping Slave 1 -c 3,结果下图所示
6) SSH无密码登陆节点,这个操作是将Master节点可以无密码SSH登陆到各个Slave节点上。
首先要生成Master节点的公匙,在Master节点的终端中执行(因改过主机名,所以还需要删掉原有的再重新生成一次)
命令为:cd ~/.ssh
rm./id_rsa*
ssh-keygen -t rsa
让Master节点能够无密码登陆SSH本机,在Master节点上执行
cat./id_rsa.pub>>./authorized_keys
完成后可执行ssh Master验证一下,可能需要输入yes,接着在Master节点上将公匙传输到Slave1节点,命令为:scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
scp是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 Slave1 上hadoop 用户的密码(hadoop)。
7) 安装java环境
Java环境可选择 Oracle 的 JDK,或是OpenJDK,现在一般 Linux 系统默认安装的基本是 OpenJDK,如 CentOS 6.4 就默认安装了 OpenJDK 1.7。按 http://wiki.apache.org/hadoop/HadoopJavaVersions 中说的,Hadoop 在 OpenJDK 1.7 下运行是没问题的。需要注意的是,CentOS 6.4 中默认安装的只是 Java JRE,而不是 JDK,为了开发方便,我们还是需要通过 yum 进行安装 JDK,安装过程中会让输入 [y/N],输入 y 即可:
sudoyum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
8) 配置JAVA_HOME环境变量,为了方便,在~/.bashrc中进行设置
vim~/.bashrc
在文件最后一行添加指向JDK的安装位置,并保存
exportJAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.181.x86_64
使环境变量生效source ~/.bashrc
9) 检验是否设置正确
echo$JAVA_HOME #检验变量值
java-version
$JAVA_HOME/bin/java/-version #与直接执行java-version一样
10) hadoop单机配置
首先在网站上下载hadoop,命令为wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz,下载保存目录为根目录。
下载成功界面
11) 解压安装文件到/usr/loacl
sudo tar -zxf ~/hadoop-2.6.5.tar.gz -C /usr/local
12) 文件夹名改为hadoop
mv hadoop-2.6.5 hadoop
13) 修改文件权限
sudo chown -R hadoop:hadoop ./hadoop
14) Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
cd/usr/local/hadoop
./bin/hadoopversion
15) 出现Error: JAVA_HOME is not set and could not be found。
原以为是java环境变量有问题,经反复检查发现环境变量并没有问题,最后经大量查阅发现其实是hadoop里面hadoop-env.sh文件里面的java路径设置不对,在hadoop/etc/hadoop目录下,打开hadoop-env.sh脚本
修改export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.181.x86_64
hadoop/sbin目录下执行./start-all.sh重启,问题解决
16) 配置集群/分布式环境
集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项:slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
17) 文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用。
18) 本教程让 Master 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加一行内容:Slave1、Slave2
19) 文件 core-site.xml 改为下面的配置
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abasefor other temporary directories.</description>
</property>
</configuration>
20) 文件 hdfs-site.xml,dfs.replication一般设为 3,但我们有两个 Slave 节点,所以 dfs.replication 的值还是设为 1:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<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>
21) 文件 mapred-site.xml (可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
22) 文件 yarn-site.xml:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
23) 配置好后,将 Master 上的/usr/local/Hadoop 文件夹复制到各个节点上。因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 Master 节点上执行:
cd /usr/local
sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
sudo rm -r./hadoop/logs/* # 删除日志文件
tar -zcf~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
cd ~
scp./hadoop.master.tar.gz Slave1:/home/hadoop
scp./hadoop.master.tar.gz Slave2:/home/hadoop
24) 在节点Slave1上执行
sudorm -r /usr/local/hadoop # 删掉旧的(如果存在)
sudotar -zxf /home/hadoop/hadoop.master.tar.gz -C /usr/local
sudochown -R hadoop /usr/local/hadoop
同理
在节点Slave2上执行
25) 首次启动需要先在 Master 节点执行 NameNode 的格式化:
hdfs namenode -format
26) CentOS系统需要关闭防火墙
CentOS系统默认开启了防火墙,在开启 Hadoop 集群之前,需要关闭集群中每个节点的防火墙。有防火墙会导致 ping 得通但 telnet 端口不通,从而导致 DataNode 启动了,但 Live datanodes 为 0 的情况。
在 CentOS 6.x 中,可以通过如下命令关闭防火墙
27) sudo service iptables stop # 关闭防火墙服务
sudochkconfig iptables off # 禁止防火墙开机自启,就不用手动关闭了
28) 接着可以启动 hadoop 了,启动需要在 Master 节点上进行:
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.shstart historyserver
29) 通过命令 jps 可以查看各个节点所启动的进程。正确的话,在Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程,如下图所示:
30) 在Slave1节点上可以看见DataNode 和 NodeManager 进程,如下图所示:
31) 缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。例如我这边一共有2 个 Datanodes:
32) 通过web也能查看hadoop的工作状态,地址为
33) 执行分布式实例,首先创建hdfs上的目录
hdfsdfs -mkdir -p /user/hadoop
34) 将 /usr/local/hadoop/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中:
hdfs dfs -mkdir -pinput
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
35) 查看执行完毕以后的输出结果
./bin/hdfsdfs -cat output/*
结果如下:
36) 关闭 Hadoop 集群也是在 Master 节点上执行的:
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver
实验结果如下:
到这里集群安装基本完成。
参考资料:
1、http://www.powerxing.com/install-hadoop-cluster/
2、http://www.powerxing.com/install-hadoop-in-centos/
3、hadoop&spark大数据开发实战