ubuntu18.04下hadoop3.0.2+spark2.4.3分布式集群配置及测试

ubuntu18.04下hadoop3.0.2+spark2.4.3分布式集群配置及测试

背景:

这学期课设要用sparkmlib的聚类和分类算法做一个文本分类模型,前期环境上做了很多工作,现在做一下总结,本来网上的资料足够多了,但是水平参此不齐,很容易掉进坑里,加上自己也有很多发现,所以还是写一篇吧。
对了,有一点就是大家在查资料还是用谷歌吧,尽量去看一下比较官方的资料,比如官方文档,大学实验室,机构等的那种,记得货比三家,抱着质疑的态度,理解了再采用,少走一些弯路,我在学习的过程中经常看厦门大学实验室的这个网站,感觉还不错。
不足之处,请多多指正!

1.集群基本环境

1.1.版本

 ubuntu18.04  jdk1.8.0_211   hadoop-3.0.2  spark-2.4.3-bin-hadoop2.7  scala-2.11.8

1.2.用户

注意分布式的集群每个机器要有一个统一的用户
此次我的主机名为aiden,即管理节点;同学的为wang1234,即数据节点:
hadoop@adien(master)
hadoop@wang1234(slaves)
本文就以这两台主机为例
/etc/hosts为

127.0.0.1	localhost
#127.0.1.1	aiden
192.168.43.200 aiden
192.168.43.155 wang1234

1.3.软件安装目录和环境变量

软件安装目录和环境变量也要一样(不知道叫软件合适不合适…),如果你是一个人作分布式,配好一个分发给节点,这个问题是不存在的。我们小组8个人刚开始是先自己搞自己的,结果最后在测试的时候会有类似于JAVA_HOME */ */ * / NOT EXISTS 等之类的情况,我们把上述目录统一以后,环境变量统一以后就ok了,不过不知道还有其他的解决办法没有,因为后续还有东西做,就先不管了。

1.3.1.安装目录

我们的结构:软件统一放在/opt/bigdata下面:
在这里插入图片描述
在这里插入图片描述

1.3.2. 环境变量

hadoop用户下 ~/.bashrc添加

#java
export JRE_HOME=${JAVA_HOME}/jre

export JAVA_HOME=/opt/bigdata/jdk1.8.0_211
export CLASSPATH=.:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH CLASSPATH

#hadoop
export HADOOP_HOME=/opt/bigdata/hadoop-3.0.2
export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$HADOOP_HOME/bin

export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin


#scala
export SCALA_HOME=/opt/bigdata/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin

#spark

export SPARK_HOME=/opt/bigdata/spark-2.4.3-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin

2.添加集群用户及免密登录

2.1.添加hadoop用户赋予权限

2.1.1添加用户
sudo adduser hadoop
2.1.2赋予权限

注意很多人因为新生成的用户权限低,直接就把它提成root级的了,在sudoers里面添加进去,这是非常危险的!!!
以我的文件目录结构为例,应该只给它使用sudo命令的权限,以及/opt/bigdata下的所有文件操作权限,就足够了。

切换到root用户

su

给hadoop用户使用sudo的权限

usermod hadoop -a -G  sudo

切换到hadoop用户

su hadoop

给hadoop用户/opt/bigdata下的所有文件操作权限

sudo chmod -R  700 /opt/bigdata

2.2.hadoop免密登录

过程原理(图片来自网友的文章):

2.2.1.自身免密登录

hadoop用户在adein(master)主机下

 ssh-keygen -t rsa
 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

权限设置(权限过高可能会报错的,也很危险)

chmod 600 ~/.ssh/authorized_keys

同理hadooop用户在wang1234(slaves)主机下操作

2.2.2.互相免密登录(这点我们做的不好,用QQ相互发送的,很笨,大家可以找更好的办法)

如果要实现hadoop用户在master免密登录slaves,那么这样操作:

2.2.2.1 在adein(master)主机hadoop用户下,复制显示的内容
 cat ~/.ssh/id_rsa.pub
2.2.2.2 在wang1234(slaves)主机hadooop用户下,打开密钥库,将复制内容拷贝到slaves的密钥库中
sudo gedit ~/.ssh/authorized_keys

3.hadoop集群配置

3.1.hadoop配置

进入/opt/bigdata/hadoop-3.0.2/etc/hadoop给配置文件追加配置

3.1.1 hadoop-env.sh
export JAVA_HOME=/opt/bigdata/jdk1.8.0_211
export HADOOP_HOME=/opt/bigdata/hadoop-3.0.2
3.1.2 hdfs-site.xml
<configuration>
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>/opt/bigdata/hadoop-3.0.2/dfs/name</value>
		<final>true</final>
	</property>


<property>
	<name>dfs.datanode.data.dir</name>
	<value>/opt/bigdata/hadoop-3.0.2/dfs/data</value>

	<final>true</final>
</property>



<property>
	<name>dfs.replication</name>
	<value>1</value>



</property>
<property>
	<name>dfs.permissions</name>
	<value>false</value>
</property>
</configuration>
3.1.3 core-site.xml
<configuration>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://aiden:9000</value>
  </property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/bigdata/hadoop-3.0.2/tmp</value>
    <description>Abase for other temporary directories.</description>
</property>
</configuration>
3.1.4 mapred-site.xml
<configuration>

 <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
<property>
        <name>mapreduce.application.classpath</name>
        <value>
            ${HADOOP_HOME}/etc/hadoop,
            ${HADOOP_HOME}/share/hadoop/common/*,
            ${HADOOP_HOME}/share/hadoop/common/lib/*,
            ${HADOOP_HOME}/share/hadoop/hdfs/*,
            ${HADOOP_HOME}/share/hadoop/hdfs/lib/*,
            ${HADOOP_HOME}/share/hadoop/mapreduce/*,
            ${HADOOP_HOME}/share/hadoop/mapreduce/lib/*,
            ${HADOOP_HOME}/share/hadoop/yarn/*,
            ${HADOOP_HOME}/share/hadoop/yarn/lib/*
        </value>
    </property>

</configuration>
3.1.5 yarn-site.xml
 <configuration>

<!-- Site specific YARN configuration properties -->

<!-- Site specific YARN configuration properties -->

     <property>
	     <name>yarn.nodemanager.aux-services</name>
	     <value>mapreduce_shuffle</value>
     </property>
     <property>
	     <name>yarn.resourcemanager.hostname</name> 
	     <value>aiden</value>
     </property>
     <property>
	     <name>yarn.resourcemanager.webapp.address</name>
	     <value>aiden:8088</value>
     </property>

</configuration>
3.1.6 workers

workers相当于老版本的slaves,里面写入数据节点的主机名,一行一个,我这里的是同学的wang1234

wang1234

4.hadoop集群测试

4.1.启动haoop集群

namenode初始化

hdfs namenode -format

在adien(master)主机/opt/bigdata/hadoop-3.0.2/sbin下

./start-all.sh

启动之后在各个主机用jps命令查看启动的模块是否正常

jps

4.2.hdfs文件系统操作

创建目录

hadoop fs -mkdir /input

本地创建一个文件,随便写点东西

vim a.txt

上传文件

hadoop fs -put a.txt /input

查看文件

hadoop fs -cat  /input/a.txt

4.3.webui查看

上述配置中是缺省端口配置的,所以是默认的端口
namenode节点查看,浏览器地址栏aiden:9870
datanode节点查看,浏览器地址栏wang1234:9864
资源管理查看,浏览器地址栏aiden:8088

4.4.单词统计测试

进入/opt/bigdata/hadoop-3.0.2/share/hadoop/mapreduce

hadoop jar hadoop-mapreduce-examples-3.0.2.jar wordcount /input /output

查看结果(不详细写了)

hadoop fs -cat  /output/p*

5.spark集群配置

5.1.spark配置

/opt/bigdata/spark-2.4.3-bin-hadoop2.7/conf
spark-env.sh

export SCALA_HOME=${SCALA_HOME}

export JAVA_HOME=${JAVA_HOME}

export SPARK_MASTER_IP=aiden

export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

slaves

wang1234

6.spark集群测试

6.1.启动spark

/opt/bigdata/spark-2.4.3-bin-hadoop2.7/sbin

 ./start-all.sh

6.2.spark-shell下单词统计

进入spark-shell

spark-shell

单词统计

val textFile = sc.textFile("hdfs://aiden:9000/input/a.txt")
val wordCounts = textFile.flatMap(line=>line.split(" ")).map(word=>(word,1)).reduceByKey((a,b)=>a+b)
wordCounts.collect();
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值