一些说明和资源

虚拟机:VirtualBox-6.1.18
Ubuntu:16.04桌面版
JDK:jdk-8u281-linux-x64.tar.gz
hadoop:hadoop2.7.3
可能用到的资源:hadoop-instead


安装虚拟机和Ubuntu16.04

传送门:下载及安装教程

稍有不同的地方:
在这里插入图片描述


安装hadoop


1. 配置虚拟机网卡

     1. 打开VirtualBox
     2. 点击右上角 管理 --> 主机网络管理器 --> 创建网卡
    

在这里插入图片描述


2. 配置主机网卡

在这里插入图片描述


3.进入到Ubuntu

以下操作在 hadoop-master 下完成

3.1 配置hosts文件
1
$ sudo vim /etc/hosts

// 配置如下,后面的ipv6部分无需更改:

在这里插入图片描述


3.2 下载和配置Java

JDK下载:官方下载地址
本地下载:jdk-8u281-linux-x64.tar.gz

1
2
3
4
5
// 进入到jdk的存放位置 解压
$ tar -xvf jdk-8u281-linux-x64.tar.gz

// 将文件夹复制到/usr/java 目录下
$ sudo cp -r jdk1.8.0_281/ /usr/java

接着配置环境变量

1
$ sudo vim /etc/profile

在 profile 中添加以下内容:

export JAVA_HOME=/usr/java
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre

# 下面是 后面hadoop的环境变量
# export HADOOP_HOME=/usr/hadoop
# export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
# export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
# export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

然后是保存 并使profile文件立即生效:

1
$ source /etc/profile

接着可以输入以下命令查看是否安装成功:

$ java -version

若能成功打印版本信息则为成功。


3.3 下载和配置Hadoop

官方地址:传送门
一步到位:hadoop-2.7.3.tar.gz

整体的布局:
NameNode:hadoop-master
DataNode:hadoop-master、hadoop-slave1、hadoop-slave2
ResourceManager:hadoop-master
NodeManager:hadoop-master
1
2
3
4
5
// 进入到目录下解压
$ tar -xvf hadoop-2.7.3.tar.gz

// 将文件夹复制到/usr/hadoop 目录下
$ sudo cp -r hadoop-2.7.3/ /usr/hadoop

配置环境变量

1
2
3
4
5
// 把上面刚刚Java的环境变量 hadoop部分注释去掉即可
$ sudo vim /etc/profile

// 同样使profile文件立即生效:
$ source /etc/profile

接下来需要更改几个文件的内容:

在这里插入图片描述
注:mapred-site.xml 没有此文件,将mapred-site.xml.template复制一份改即可

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// hadoop-env.sh 	将java的目录改为绝对路径,以免启动hadoop时找不到Java目录而报错
# The java implementation to use.
export JAVA_HOME=/usr/java

// slaves 修改为以下内容,三台主机的名称:
hadoop-master
hadoop-slave1
hadoop-slave2


// core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
</configuration>


// hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-master:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/tmp/dfs/data</value>
</property>
</configuration>


// mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop-master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop-master:19888</value>
</property>
</configuration>


// yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>${yarn.log.dir}/userlogs</value>
</property>
</configuration>

1
2
故意写在后面:
懒人专属:当你懒到一定程度时,可以直接利用 hadoop-instead 里的文件替换掉 /usr/.../etc/hadoop 里的文件就好了

配置好之后,保存并关闭该主机 hadoop-master 。
复制另外两台主机,分别名为hadoop-slave1、hadoop-slave2

复制好之后,启动三台主机。


3.4 分别更改三台主机的网络配置

3.4.1 hadoop-master
1
$ ifconfig -a

应该能看到一个网卡是没有ip地址的,那就是需要配置的。(如:enp0s8)

1
$ sudo vim /etc/network/interfaces

在后面添加以下内容:

1
2
3
4
auto enp0s8
iface enp0s8 inet static
address 192.168.56.1
netmask 255.255.255.0

// /etc/network/interfaces:

在这里插入图片描述

开启网卡

1
$ sudo ifup enp0s8

开启后,再次查看状态,应该是有ip地址的,如192.168.56.1


3.4.2 hadoop-slave1、hadoop-slave2

更改一下设备名称,不然host不认…

在这里插入图片描述
在这里插入图片描述
其他操作与 3.4.1 同理。
配置好之后,三台主机之间,应该是可以成功ping通的。


3.5 配置SSH免密登录
1
2
// 若没有安装ssh的可以先下载更新一下(所有主机都要)
$ sudo apt-get install openssh-server openssh-client

回到我们的 hadoop-master 主机上

1
2
3
4
5
6
7
8
9
10
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

// 分发到不同主机上
$ ssh-copy-id username@hadoop-slave1
$ ssh-copy-id username@hadoop-slave2

// 本机免密登录
$ cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys

注:链接时提示输入密码,是需要链接的主机的密码,不是本机的密码。
连接后,若想要退出链接,可以执行 $exit


启动hadoop

三台主机都开启后,在 master主机 上执行指令,格式化HDFS文件系统:

1
$ hdfs namenode -format

在master节点启动hadoop集群

1
2
3
4
$ start-all.sh

$ start-dfs.sh
$ start-yarn.sh

然后可以通过$ jps 查看信息,各主机的信息 应该与上文中 3.3 的整体的布局相一致

1
2
3
4
5
还可以通过以下命令查看hadoop集群系统的状态:
$ hdfs dfsadmin -report

或直接打开网页,查看更详细的信息:
http://192.168.56.1:50070

启动程序

先跑个demo,算个π

1
$ hadoop jar /usr/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 10 10

第一次执行,时间会较长,可能需要2-5分钟

1
2
// 试过一次好像启动的时候报错了,说要把这个关掉,先写在这吧:
$ hdfs dfsadmin -safemode leave

其他:(我在另一本书上看到的,大家也可以拿来试着跑一下)

  • 日志分析:
    github:https://github.com/bdintro/bdintro.git
    编译源代码采用mvn package,测试数据为hadoop-user-datanode-dell119.log.zip
    在测试前先把对应数据上传到HDFS集群中,把使用mvn package编译好的jar包
    1
    2
    3
    4
    5
    // 上传日志到hadoop
    $ hadoop fs -copyFromLocal hadoop-yangyaru-datanode-dell119.log /

    // 启动
    $ hadoop jar 打包好的jar包路径/bigdata-0.0.1.jar bigdata.bigdaba.Grep WARN 需分析的日志路径/hadoop-user-datanode-dell119.log 结果输出的路径/output
  • 交通流量分析:
    github:https://github.com/bdintro/bdintro.git
    详细的交通流量数据格式描述如网站所述:https://www.kaggle.com/jana36/us-traffic-violations-montgomery-county-poliet
    编译源代码采用mvn package,测试数据为Traffic_Violations.csv.zip
    在测试前先把对应数据上传到HDFS集群中,把使用mvn package编译好的jar包
    1
    2
    3
    4
    5
    // 上传交通记录到hadoop
    $ hadoop fs -copyFromLocal Traffic_Violations.csv /

    // 启动
    $ hadoop jar 打包好的jar包路径/bigdata-0.0.1.jar bigdata.bigdaba.TrafficTotal WARN 需分析的日志路径/Traffic_Violations.csv 结果输出的路径/output