做业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3223html
本文是基于已经安装好的ubuntu环境上搭建伪分布式hadoop,在virtualbox安装ubuntu能够参考小编的java
”virtualbox安装ubuntu16.04 LTS及其配置“node
-默认状况下,Hadoop即处于该模式,用于开发和调式。linux
-不对配置文件进行修改。
-使用本地文件系统,而不是分布式文件系统。
-Hadoop不会启动NameNode、DataNode、JobTracker、TaskTracker等守护进程,Map()和Reduce()任务做为同一个进程的不一样部分来执行的。
-用于对MapReduce程序的逻辑进行调试,确保程序的正确。apache
-Hadoop的守护进程运行在本机机器,模拟一个小规模的集群 ubuntu
-在一台主机模拟多主机。
-Hadoop启动NameNode、DataNode、JobTracker、TaskTracker这些守护进程都在同一台机器上运行,是相互独立的Java进程。
-在这种模式下,Hadoop使用的是分布式文件系统,各个做业也是由JobTraker服务,来管理的独立进程。在单机模式之上增长了代码调试功能,容许检查内存使用状况,HDFS输入输出,vim
以及其余的守护进程交互。相似于彻底分布式模式,所以,这种模式经常使用来开发测试Hadoop程序的执行是否正确。
-修改3个配置文件:core-site.xml(Hadoop集群的特性,做用于所有进程及客户端)、hdfs-site.xml(配置HDFS集群的工做属性)、mapred-site.xml(配置MapReduce集群的属性)
-格式化文件系统服务器
-Hadoop的守护进程运行在一个集群上 网络
-Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的生产环境。
-在全部的主机上安装JDK和Hadoop,组成相互连通的网络。
-在主机间设置SSH免密码登陆,把各从节点生成的公钥添加到主节点的信任列表。
-修改3个配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml,指定NameNode和JobTraker的位置和端口,设置文件的副本等参数
-格式化文件系统oracle
在终端上输入ifconfig -a命令查看网卡名,个人主机有三个网络接口,分别是enp0s3(桥接网卡),enp0s8(NAT),lo(动态获取ip)
# ifconfig -a
对/etc/network/interfaces文件进行编辑,如下是在终端上执行的命令:
sudo vim /etc/network/interfaces
上图是ubuntu的/etc/network/interfaces文件默认的内容,默认动态获取方法的配置。
可是在业务上须要给ubuntu主机配置静态ip网络,在这里我只对enp0s3进行修改,如下是静态分配的配置方法(根据本身的需求改):
auto enp0s3 iface enp0s3 inet static address 192.168.87.138 netmask 255.255.255.0 gateway 192.168.87.254
接下来须要添加域名服务器,编辑/etc/resolv.conf文件,添加域名服务器,在这里我选择了全球通用的DNS域名服务器,国内用户推荐使用,速度较快!
sudo vim /etc/resolv.conf
nameserver 114.114.114.114
或者
nameserver 8.8.8.8
配置已经完成了,接下来须要重启网络,网络重启有多种方法,在这里只列出两种方法,二选一便可。
1. 重启网卡
/etc/init.d/networking restart
2. 这两条命令是重启某个网络接口,一个系统可能有多个网络接口
# ifdown enp0s3
# ifup enp0s3
检查网络配置参数是否正确:
# ifconfig
检查是否能ping通:
ping www.qq.com
已成功ping通,静态网络已配置好了。
查看主机名:
# hostname
修改/etc/hosts文件:
# vim /etc/hosts
/etc/hosts文件默认是上图所示,修改文件为如下内容,注释127.0.1.1,添加主机静态地址与主机名:
单机配置ssh免密登录的话,输入如下的命令便可:
提示输入信息,一直回车按默认便可。
# ssh-keygen -t rsa # cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # chmod 600 ~/.ssh/authorized_keys
完成以后,以 root 用户登陆,修改 ssh 配置文件:
vim /etc/ssh/sshd_config
把文件中的下面几条信息的注释去掉,如图所示:
RSAAuthentication yes # 启用RSA认证 PubkeyAuthentication yes # 启用公钥私钥配对认证方式 AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同)
而后重启服务:
# service sshd restart
输入ssh localhost验证出现以下界面,中间不须要输入密码,即配置完成。
# ssh localhost
2. 解压tar包,指定解压/usr/local/目录
# tar -zxvf jdk-8u211-linux-x64.tar.gz -C /usr/local/
3. 配置环境变量
# vim /etc/profile
而后添加如下配置在文件尾:
export JAVA_HOME=/usr/local/jdk1.8.0_211 export PATH=$PATH:$JAVA_HOME/bin export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
保存退出便可。
4. 测试jdk配置成功否
刷新环境变量:
# source /etc/profile
输入java -verion,如配置成功,有下图的java版本在终端上显示:
到此,hadoop须要的系统环境已经搭建完毕了,接下来开始搭建伪分布式hadoop集群~
从官网下载hadoop3.1.2,解压hadoop安装包到/usr/local/目录下:
# tar -zxvf hadoop-3.1.2.tar.gz -C /usr/local
在环境变量配置hadoop:
# vim /etc/profile
而后添加如下配置在文件尾:
export HADOOP_HOME=/usr/local/hadoop-3.1.2 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_HDFS_HOME=/usr/local/hadoop-3.1.2 export HADOOP_CONF_DIR=/usr/local/hadoop-3.1.2/etc/hadoop
使用source /etc/profile刷新环境变量后,用hadoop version命令测试是否安装成功:
# source /etc/profile # hadoop version
hadoop的配置文件统一放在$HADOOP_HOME/etc/hadoop目录下,在这里咱们只须要修改5个文件,分别是hadoop-env.sh,core-site.xml,mapred-site.xml,yarn-site.xml,yarn-site.xml。
1. hadoop-env.sh
在文件中修改以下:
export JAVA_HOME=/usr/local/jdk1.8.0_211 export HADOOP_HOME=/usr/local/hadoop-3.1.2
2. core-site.xml
<configuration>
<property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000/</value> </property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data/</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>file:///usr/local/hadoop/data/dfs/namesecondary</value>
</property>
</configuration>
3. hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.http.address</name> <value>luengmingbiao:50070</value> </property></configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/data/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/hadoop/data/dfs/data</value>
</property>
4. mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
5. yarn-site.xml
<configuraion>
<property> <name>yarn.resourcemanager.hostname</name> <value>luengmingbiao</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.application.classpath</name> <value>/usr/local/hadoop-3.1.2/etc/hadoop:/usr/local/hadoop-3.1.2/share/hadoop/common/lib/*:/usr/local/hadoop-3.1.2/share/hadoop/common/*:/usr/local/hadoop-3.1.2/share/hadoop/hdfs:/usr/local/hadoop-3.1.2/share/hadoop/hdfs/lib/*:/usr/local/hadoop-3.1.2/share/hadoop/hdfs/*:/usr/local/hadoop-3.1.2/share/hadoop/mapreduce/lib/*:/usr/local/hadoop-3.1.2/share/hadoop/mapreduce/*:/usr/local/hadoop-3.1.2/share/hadoop/yarn:/usr/local/hadoop-3.1.2/share/hadoop/yarn/lib/*:/usr/local/hadoop-3.1.2/share/hadoop/yarn/*</value> </property> </configuraion>
注: “yarn.application.classpath“能够经过在终端上输入以下命令获取:
# hadoop classpath
对hdfs(Hadoop Distributed File System)进行格式化,hdfs是用来存储数据的分布式文件系统。
# hdfs namenode -format
出现上述图所示,表明成功格式化。
Hadoop3.x以上版本在启动上有一个坑,不添加如下配置启动进程的时候会报如下的错并打印到终端上:
解决方案(能够只针对ERROR出现的变量进行定义,若是不行再配置所有):
# vim $HADOOP_HOME/sbin/start-dfs.sh
# vim $HADOOP_HOME/sbin/stop-dfs.sh
# vim $HADOOP_HOME/sbin/start-yarn.sh
# vim $HADOOP_HOME/sbin/stop-yarn.sh
1. 启动HDFS
# hdfs --daemon start namenode # hdfs --daemon start datanode
# hdfs --daemon start secondarynamenode
或
# start-dfs.sh
2. 启动YARN集群
# yarn --daemon start resourcemanager # yarn --daemon start nodemanager
或
# start-yarn.sh
3. jps命令查看是否启动成功
4. HDFS和YARN集群都有默认的Web可视化页面
HDFS: http://主机ip:50070
YARN:http://主机ip:8088
创建测试文件:
# vim test.txt
而后输入以下数据:
hello hadoop hello World Hello Java Hey man i am a programmer
将测试文件放到测试目录中:
# hdfs dfs -mkdir hdfs:///hadoop # hdfs dfs -mkdir hdfs:///hadoop/input # hdfs dfs -put ./test.txt hdfs:///hadoop/input
执行hadoop自带的wordcount程序:
# hadoop jar /usr/local/hadoop-3.1.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount hdfs:///hadoop/input hdfs:///output
而后在命令行输入 hdfs dfs -cat hdfs:///output/part-r-00000 查看词频统计结果:
# hdfs dfs -cat hdfs:///output/part-r-00000