虚拟机搭建hadoop集群

虚拟机安装

虚拟机安装ubuntu:两个节点 hadoop1,hadoop2。2G RAM,40G硬盘

网络模式选择桥接,然后打开混杂模式。就可以自动联网

安装java8

1
2
3
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

java path:ls /usr/lib/jvm/java-8-oracle/

1
2
3
4
5
6
#add by ziqian for jdk
#set java envrionment
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

网络设置

修改网络设置固定ip:

1
2
3
4
5
6
7
8
9
10
11
12
13
bash> vim /etc/network/interfaces
//添加后面几句
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
#add by hzq.
iface eth0 inet static
address 10.106.165.201
netmask 255.255.254.0
gateway 10.106.164.1
dns-nameserver 10.106.170.107
#add end

这里要注意桥接选择的是wifi,你的addr必须和wifi在同一个局域网,gateway等也必须和主机的wifi一样。
hadoop1: 10.106.165.201
hadoop2: 10.106.165.202

1
2
3
sudo vi /etc/NetworkManager/NetworkManager.conf
修改:managed参数为true
如果为fault,会提示说“有线网络设备未托管”。
1
2
3
sudo vim /etc/resolvconf/resolv.conf.d/base
//添加dns
nameserver 10.106.170.107

添加/etc/host:

1
2
10.106.165.201 master
10.106.165.202 slave

修改/etc/hostname

重启电脑

安装ssh
sudo apt-get install ssh

hadoop账户

adduser hadoop

将master的ssh key加入slave

master上

1
2
3
cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa* # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa # 一直按回车就可以

slave上

1
scp ~/.ssh/id_rsa.pub hadoop@slave:/home/hadoop/

编译安装hadoop

编译hadoop$ mvn package -Pdist,native -DskipTests -Dtar。我用的是从git拉下来的源代码的2.7.1.参考文献

将hadoop安装到/usr/local:

1
2
3
4
sudo tar -zxf ~/下载/hadoop-2.6.0.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop:hadoop ./hadoop # 修改文件权限

期间可能会遇到“hadoop is not in the sudoers file. This incident will be reported.”。这里有解决办法

将hadoop添加入path

1
2
3
#set hadoop path
export HADOOP_PATH=/usr/local/hadoop/bin:/usr/local/hadoop/sbin
export PATH=$HADOOP_PATH:$PATH

配置分布模式

首先将datanode的名字写入/usr/local/hadoop/etc/hadoop/slaves文件,每行一个。

配置core-site.xml

1
2
3
4
5
6
7
8
9
10
11
<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>Abase for other temporary directories.</description>
</property>
</configuration>

hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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>

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>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>

yarn-site.xml

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

配置好后执行:

1
2
3
4
5
6
7
8
9
10
11
12
#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 slave:/home/hadoop
#slave上执行
sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop:hadoop /usr/local/hadoop

之后启动hadoop

1
2
3
4
#master
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

用jps看:

master上有NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程,slave可以看到DataNode 和 NodeManager 进程

常见问题

slave节点DataNode 无法启动

  • 搭建了很多次,这个问题每次都出现,所以总结了一下:
  • 防火墙没 解决办法:你懂得
  • 所有节点 hosts 链表不统一,或有错误 解决办法:你懂得
  • 查看节点日志提示namenode.rpc-address is not configured.发现node1没复制过去core-site.xml文件
  • 因为多次 format namenode 造成 namenode 和 datanode 的 clusterID 不一致

解决方法:

方法一:更改 slave Cluster ID 与 master 相同
修改每一个 datanode 上面的 CID(位于 dfs/data/current/VERSION 文件夹中) 使两 者一致

方法二:删除所有节点/home/hadoop/hadoop-2.5.1/dfs/data/下 curren 目录 然后 重新 start-dfs.sh即可

参考文献


本文采用创作共用保留署名-非商业-禁止演绎4.0国际许可证,欢迎转载,但转载请注明来自http://thousandhu.github.io,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:http://thousandhu.github.io/2016/03/15/虚拟机搭建hadoop集群/