2.CentOS环境搭建Hadoop集群

.

:本文在已经使用VMware虚拟机安装了CentOS6.5_64位镜像基础下进行操作(如还未安装,可参考该链接);以下所有关于命令行操作均以root用户操作,其设计相关的文件名称目录名称不一定全部相同,请按照实际情况修改。

1. 基础配置

基础软件安装

1
yum install vim -y

共享目录配置

  • 在VMware顶栏点击虚拟机->安装VMWare Tools
  • 此时虚拟机弹出一个光盘镜像,以下命令行操作
1
2
3
tar -zxvf /media/VMware\ Tools/VMwareTools-10.1.6-5214329.tar.gz -C /home/jmlin/
cd /home/jmlin/vmware-tools-distrib
sudo ./vmware-install.pl
  • 之后一直按回车,默认设置
  • 在VMware顶栏点击虚拟机->设置->选项->共享文件夹->总是启用
  • 在右边框选择添加->下一步->选择自己要共享的文件夹的路径->一路确定
  • 命令行reboot重启虚拟机

设置静态IP

a. 图形界面操作

b. 命令行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vi /etc/sysconfig/network-scripts/ifcfg-eth
------
DEVICE=eth0 # 网卡设备名
BOOTPROTO=static # 获取静态IP
# BOOTPROTO=dhcp # 通过DHCP协议获取IP
# BOOTPROTO=bootp # 通过BOOTP协议获取IP
ONBOOT=yes # 自动联网
NM_CONTROLLED=yes
IPADDR=192.168.0.110
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1 # 设置为路由器IP
------
service network restart

DNS解析、修改主机名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vi /etc/hosts
------
192.168.0.110 master
192.168.0.111 slave1
192.168.0.112 slave2
· (设置从机名)
·
·
------
source /etc/hosts
vi /etc/sysconfig/network
将`HOSTNAME=localhost.localdomain`改为
------
HOSTNAME=master
------
hostname master # 令修改立即生效

关闭防火墙

1
2
3
service iptables stop
chkconfig iptables off
service iptables status

系统自动登录

1
2
3
4
5
6
vi /etc/gdm/custom.conf
------
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=jmlin
------

设置root弱密码

1
2
3
4
vi /etc/pam.d/system-auth
------
password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=5
------
  • 由于是本地操作,所以就设置一个短的密码,一般生产环境不建议设置太短

配置SSH免密登录

1
2
3
4
5
6
yum install openssh-server -y
ssh-keygen -t rsa
三次回车
cd ~/.ssh/
cp id_rsa.pub authorized_keys
chkconfig sshd on # 配置sshd自启动

创建hadoop用户

1
2
3
mkdir /home/hadoop
useradd -d /home/hadoop -m hadoop
passwd hadoop

2. JDK

1
2
3
4
5
6
7
8
9
10
rpm -ivh jdk-8u51-linux-x64.rpm
mv /usr/java/jdk1.8.0_51 /usr/local/jdk
vi ~/.bashrc
------
# 在文件最后添加
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
------
source ~/.bashrc
java -version

3. Hadoop

伪分布式安装

1
2
3
4
5
6
7
8
9
10
tar zxvf hadoop-2.6.2.tar.gz -C /usr/local/
cd !$
mv hadoop-2.6.2 hadoop
vi ~/.bashrc
------
alias cdha='cd /usr/local/hadoop'
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
------
source !$

文件配置

hadoop-env.sh

1
2
3
4
5
6
7
cdha
cd etc/hadoop
vi hadoop-env.sh
将`export JAVA_HOME=${JAVA_HOME}`替换为
------
export JAVA_HOME=/usr/local/jdk
------

yarn-env.sh

1
2
3
4
5
vi yarn-env.sh
将`23行`替换为
------
export JAVA_HOME=/usr/local/jdk
------

core-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vi core-site.xml
------
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
<property>
<name>hadoop.native.lib</name>
<value>false</value>
<description>Should native hadoop libraries, if present, be used.</description>
</property>
</configuration>
------

hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vi hdfs-site.xml
------
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hdfs/data</value>
</property>
</configuration>
------

yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
vi yarn-site.xml
------
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
</configuration>
------

mapred-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cp mapred-site.xml.template mapred-site.xml
vi !$
------
<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>
------

At Last

1
2
3
hdfs namenode –format # 格式化文件系统
start-all.sh
jps # 查看Java进程状态

出现警告

1
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

解决

1
2
3
4
5
vi /usr/local/hadoop/etc/hadoop/log4j.properties
添加一行,用于消除因hadoop希望glibc版本为2.14以上的警告信息
------
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
------

MapReduce使用

1
2
3
4
5
6
7
8
9
10
11
12
cd /usr/local/hadoop/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-example-2.6.2.jar # 查看包中的功能
# 统计文件中单词重复的次数
hadoop jar hadoop-mapreduce-example-2.6.2.jar wordcount # 查看wordcount用法
cd
touch ReadMe.txt
echo 'Hello World' > ReadMe.txt
hadoop fs -put ./ReadMe.txt /
cd -
hadoop jar hadoop-mapreduce-example-2.6.2.jar wordcount /ReadMe.txt /wordcount_output
hadoop fs -text /wordcount_output/part-r-00000

4. 分布式安装

以下操作,想要使用多少台从机就设置多少次

导出虚拟机

  • 先把要复制的虚拟机关机
  • VMware状态栏->文件->导出为OVF

设置静态IP

设置静态IP

DNS解析、修改主机名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@slave1 hadoop]# vi /etc/hosts
------
192.168.0.110 master
192.168.0.111 slave1
192.168.0.112 slave2
· (设置从机名)
·
·
------
[root@slave1 hadoop]# vi /etc/sysconfig/network
将`HOSTNAME=master`改为
------
HOSTNAME=slave1
------
[root@slave1 hadoop]# hostname slave1 # 令修改立即生效

5. 集群间SSH免密登录

1
2
3
4
5
# 主节点
[root@master hadoop]# ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
# 从节点
[root@slave1 hadoop]# ssh-copy-id -i ~/.ssh/id_rsa.pub master

6. 格式化文件系统

1
2
3
4
5
6
7
8
9
10
11
# 从节点
[root@slave1 hadoop]# rm -rf /home/hadoop/tmp/*
[root@slave1 hadoop]# rm -rf /home/hadoop/hdfs/name/*
[root@slave1 hadoop]# rm -rf /home/hadoop/hdfs/data/*
# 主节点
[root@master hadoop]# rm -rf /home/hadoop/tmp/*
[root@master hadoop]# rm -rf /home/hadoop/hdfs/name/*
[root@master hadoop]# rm -rf /home/hadoop/hdfs/data/*
[root@master hadoop]# hdfs namenode -format

7. 启动集群

1
2
3
4
5
6
7
# 主机
[root@master hadoop]# start-all.sh
[root@master hadoop]# jps
[root@master hadoop]# hdfs dfsadmin -report # 查看结点状态报告
# 从机
[root@slave1 hadoop]# jps

Web UI 查看集群是否启动成功

  • 浏览器打开
  • http://master:50070

  • http://master:18088


参考链接

:本文内容部分来自互联网整理,部分来自个人经验总结;本文将持续收集更新,欢迎留言补充!

要是觉得不错,就鼓励一下吧!