虚拟机+Ubuntu,搭建hadoop集群
一些说明和资源
虚拟机: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 | // 进入到jdk的存放位置 解压 | 
接着配置环境变量
| 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 | // 进入到目录下解压 | 
配置环境变量
| 1 | // 把上面刚刚Java的环境变量 hadoop部分注释去掉即可 | 
接下来需要更改几个文件的内容:
注:mapred-site.xml 没有此文件,将mapred-site.xml.template复制一份改即可
| 1 | // hadoop-env.sh 将java的目录改为绝对路径,以免启动hadoop时找不到Java目录而报错 | 
| 1 | 故意写在后面: | 
配置好之后,保存并关闭该主机 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 | auto enp0s8 | 
// /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 | // 若没有安装ssh的可以先下载更新一下(所有主机都要) | 
回到我们的 hadoop-master 主机上
| 1 | $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa | 
注:链接时提示输入密码,是需要链接的主机的密码,不是本机的密码。
连接后,若想要退出链接,可以执行 $exit
启动hadoop
三台主机都开启后,在 master主机 上执行指令,格式化HDFS文件系统:
| 1 | $ hdfs namenode -format | 
在master节点启动hadoop集群
| 1 | $ start-all.sh | 
然后可以通过$ jps 查看信息,各主机的信息 应该与上文中 3.3 的整体的布局相一致
| 1 | 还可以通过以下命令查看hadoop集群系统的状态: | 
启动程序
先跑个demo,算个π
| 1 | $ hadoop jar /usr/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 10 10 | 
第一次执行,时间会较长,可能需要2-5分钟
| 1 | // 试过一次好像启动的时候报错了,说要把这个关掉,先写在这吧: | 
其他:(我在另一本书上看到的,大家也可以拿来试着跑一下)
- 日志分析: 
 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















