0%

在ubunut16.04上搭建hadoop环境

首先我们需要安装几个常用的软件

这里的shell我选的是zsh,因为这个语法兼容bash

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
31
32
33
34
35
# 建立一个hadoop用户
useradd -d /home/zhuyichen -m -s /bin/zsh hadoop
<!--more-->
# 安装git
apt install git -y
# 安装wget
apt install wget -y
# 安装htop
apt install htop -y
# 安装openjdk8
apt install openjdk-8-jdk -y


# 切换为hadoop用户
su
# 下载hadoop-2.9.1
wget http://www-us.apache.org/dist/hadoop/common/hadoop-2.9.1/hadoop-2.9.1.tar.gz
# 解压文件
tar -xvf hadoop-2.9.1.tar.gz


# 配置一下PATH环境变量,打开.zshrc后添加
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:~hadoop/hadoop-2.9.1/bin
export PATH=$PATH:~hadoop/hadoop-2.9.1/sbin
export HADOOP_HOME=~hadoop/hadoop-2.9.1

# hadoop-env.sh配置中还要单独配置一下JAVA_HOME
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~hadoop/hadoop-2.9.1/etc/hadoop/hadoop-env.sh

# 配置ssh
ssh_keygen

# 把自己的key加到authorized_keys文件中
cat .ssh/id_rsa.pub >> .ssh/authorized_keys

下面开始分布式环境的配置
因为分布式需要多态机器
可以把上面这个克隆一下,这样就避免了很多的重复配置

我现在有两台虚拟机
ip分别为[ip:1][ip:2]
([ip:1][ip:2]替换为真实ip,如192.168.168.3)

[ip:1]作为master[ip:2]作为slave1

首先修改/etc/hostname文件
[ip:1]的机器改为master, [ip:2]的机器改为slave1

再在/etc/hosts中添加ip映射

1
2
[ip:1] master
[ip:2] slave1

然后master的机器需要可以sshslave机器,所以还需要把master.ssh/id_rsa.pub的内容加进slave1.ssh/authorized_keys中。

下面进行配置文件的修改

hadoopetc的文件夹下配置一下文件

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!-- core-site.xml -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>

<!-- hdfs-site.xml -->
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/data/datanode</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.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

同时还需要建立/usr/local/hadoop目录

如果机器是master的话,还需要手动指定slaves
$HADOOP_HOME/etc/hadoop/slaves文件中加上slave1

下面就可以启动了

1
2
3
hdfs namenode -format
start-dfs.sh
start-yarn.sh

如果成功的话,jps命令在master上应该除了jps本身外还显示3个进程
分别为

1
2
3
NameNode
SecondaryNameNode
ResourceManager

在slave上应该还额外显示2两进程

1
2
DataNode
NodeManager

下面如果我们需要自己写一些java文件进行练手的话
我推荐的模式是利用idea的远程文件的功能在本地编辑,然后上传到服务器
运行一个脚本
这样的话我们就可以利用强大的idea写程序同时又可以在服务器很方便的跑了

1
2
3
4
#!/bin/bash
javac -classpath /home/hadoop/hadoop-2.9.1/etc/hadoop:/home/hadoop/hadoop-2.9.1/share/hadoop/common/lib/*:/home/hadoop/hadoop-2.9.1/share/hadoop/common/*:/home/hadoop/hadoop-2.9.1/share/hadoop/hdfs:/home/hadoop/hadoop-2.9.1/share/hadoop/hdfs/lib/*:/home/hadoop/hadoop-2.9.1/share/hadoop/hdfs/*:/home/hadoop/hadoop-2.9.1/share/hadoop/yarn:/home/hadoop/hadoop-2.9.1/share/hadoop/yarn/lib/*:/home/hadoop/hadoop-2.9.1/share/hadoop/yarn/*:/home/hadoop/hadoop-2.9.1/share/hadoop/mapreduce/lib/*:/home/hadoop/hadoop-2.9.1/share/hadoop/mapreduce/*:/home/hadoop/hadoop-2.9.1/contrib/capacity-scheduler/*.jar Main.java
jar cvf main.jar Main.class
hadoop jar main.jar Main $*

这样我们在idea本地编辑好Main.java文件,然后上传到服务器,在服务器执行./start.sh就可以执行了。