一些说明和资源
虚拟机: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文件
$ sudo vim /etc/hosts
// 配置如下,后面的ipv6部分无需更改:
3.2 下载和配置Java
JDK下载:官方下载地址
本地下载:jdk-8u281-linux-x64.tar.gz
// 进入到jdk的存放位置 解压
$ tar -xvf jdk-8u281-linux-x64.tar.gz
// 将文件夹复制到/usr/java 目录下
$ sudo cp -r jdk1.8.0_281/ /usr/java
接着配置环境变量
$ 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文件立即生效:
$ 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
// 进入到目录下解压
$ tar -xvf hadoop-2.7.3.tar.gz
// 将文件夹复制到/usr/hadoop 目录下
$ sudo cp -r hadoop-2.7.3/ /usr/hadoop
配置环境变量
// 把上面刚刚Java的环境变量 hadoop部分注释去掉即可
$ sudo vim /etc/profile
// 同样使profile文件立即生效:
$ source /etc/profile
接下来需要更改几个文件的内容:
注:mapred-site.xml 没有此文件,将mapred-site.xml.template复制一份改即可
// 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>
故意写在后面:
懒人专属:当你懒到一定程度时,可以直接利用 hadoop-instead 里的文件替换掉 /usr/.../etc/hadoop 里的文件就好了
配置好之后,保存并关闭该主机 hadoop-master 。
复制另外两台主机,分别名为hadoop-slave1、hadoop-slave2
复制好之后,启动三台主机。
3.4 分别更改三台主机的网络配置
3.4.1 hadoop-master
$ ifconfig -a
应该能看到一个网卡是没有ip地址的,那就是需要配置的。(如:enp0s8)
$ sudo vim /etc/network/interfaces
在后面添加以下内容:
auto enp0s8
iface enp0s8 inet static
address 192.168.56.1
netmask 255.255.255.0
// /etc/network/interfaces:
开启网卡
$ sudo ifup enp0s8
开启后,再次查看状态,应该是有ip地址的,如192.168.56.1
3.4.2 hadoop-slave1、hadoop-slave2
更改一下设备名称,不然host不认…
其他操作与 3.4.1 同理。
配置好之后,三台主机之间,应该是可以成功ping通的。
3.5 配置SSH免密登录
// 若没有安装ssh的可以先下载更新一下(所有主机都要)
$ sudo apt-get install openssh-server openssh-client
回到我们的 hadoop-master 主机上
$ 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文件系统:
$ hdfs namenode -format
在master节点启动hadoop集群
$ start-all.sh
或
$ start-dfs.sh
$ start-yarn.sh
然后可以通过$ jps
查看信息,各主机的信息 应该与上文中 3.3 的整体的布局相一致
还可以通过以下命令查看hadoop集群系统的状态:
$ hdfs dfsadmin -report
或直接打开网页,查看更详细的信息:
http://192.168.56.1:50070
启动程序
先跑个demo,算个π
$ hadoop jar /usr/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 10 10
第一次执行,时间会较长,可能需要2-5分钟
// 试过一次好像启动的时候报错了,说要把这个关掉,先写在这吧:
$ hdfs dfsadmin -safemode leave
其他:(我在另一本书上看到的,大家也可以拿来试着跑一下)
-
日志分析:
github:https://github.com/bdintro/bdintro.git
编译源代码采用mvn package,测试数据为hadoop-user-datanode-dell119.log.zip
在测试前先把对应数据上传到HDFS集群中,把使用mvn package编译好的jar包// 上传日志到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包// 上传交通记录到hadoop $ hadoop fs -copyFromLocal Traffic_Violations.csv / // 启动 $ hadoop jar 打包好的jar包路径/bigdata-0.0.1.jar bigdata.bigdaba.TrafficTotal WARN 需分析的日志路径/Traffic_Violations.csv 结果输出的路径/output