赞
踩
这学期课设要用sparkmlib的聚类和分类算法做一个文本分类模型,前期环境上做了很多工作,现在做一下总结,本来网上的资料足够多了,但是水平参此不齐,很容易掉进坑里,加上自己也有很多发现,所以还是写一篇吧。
对了,有一点就是大家在查资料还是用谷歌吧,尽量去看一下比较官方的资料,比如官方文档,大学实验室,机构等的那种,记得货比三家,抱着质疑的态度,理解了再采用,少走一些弯路,我在学习的过程中经常看厦门大学实验室的这个网站,感觉还不错。
不足之处,请多多指正!
ubuntu18.04 jdk1.8.0_211 hadoop-3.0.2 spark-2.4.3-bin-hadoop2.7 scala-2.11.8
注意分布式的集群每个机器要有一个统一的用户。
此次我的主机名为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
软件安装目录和环境变量也要一样(不知道叫软件合适不合适…),如果你是一个人作分布式,配好一个分发给节点,这个问题是不存在的。我们小组8个人刚开始是先自己搞自己的,结果最后在测试的时候会有类似于JAVA_HOME */ */ * / NOT EXISTS 等之类的情况,我们把上述目录统一以后,环境变量统一以后就ok了,不过不知道还有其他的解决办法没有,因为后续还有东西做,就先不管了。
我们的结构:软件统一放在/opt/bigdata下面:
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
sudo adduser hadoop
注意很多人因为新生成的用户权限低,直接就把它提成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
过程原理(图片来自网友的文章):
hadoop用户在adein(master)主机下
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
权限设置(权限过高可能会报错的,也很危险)
chmod 600 ~/.ssh/authorized_keys
同理hadooop用户在wang1234(slaves)主机下操作
如果要实现hadoop用户在master免密登录slaves,那么这样操作:
cat ~/.ssh/id_rsa.pub
sudo gedit ~/.ssh/authorized_keys
进入/opt/bigdata/hadoop-3.0.2/etc/hadoop给配置文件追加配置
export JAVA_HOME=/opt/bigdata/jdk1.8.0_211
export HADOOP_HOME=/opt/bigdata/hadoop-3.0.2
<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>
<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>
<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>
<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>
workers相当于老版本的slaves,里面写入数据节点的主机名,一行一个,我这里的是同学的wang1234
wang1234
namenode初始化
hdfs namenode -format
在adien(master)主机/opt/bigdata/hadoop-3.0.2/sbin下
./start-all.sh
启动之后在各个主机用jps命令查看启动的模块是否正常
jps
创建目录
hadoop fs -mkdir /input
本地创建一个文件,随便写点东西
vim a.txt
上传文件
hadoop fs -put a.txt /input
查看文件
hadoop fs -cat /input/a.txt
上述配置中是缺省端口配置的,所以是默认的端口
namenode节点查看,浏览器地址栏aiden:9870
datanode节点查看,浏览器地址栏wang1234:9864
资源管理查看,浏览器地址栏aiden:8088
进入/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*
/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
/opt/bigdata/spark-2.4.3-bin-hadoop2.7/sbin
./start-all.sh
进入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();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。