ubuntu20.04配置hadoop&&spark(直接配置,无需借助虚拟机)
hadoop作为一个开源的分布式计算和存储框架,在人工智能、大数据领域有非常广泛的应用。笔者在查阅资料发现网络博客介绍的配置方法大多需要借助虚拟机,或者需要重新创建ubuntu账户并设置密码为空以避免hadoop连接不上的问题,甚至是在ubuntu系统内再搭建一个虚拟机的ubuntu系统,太麻烦。本文介绍一种直接在ubuntu系统上配置hadoop的方法,亲测有效,希望能帮到读者。
hadoop作为一个开源的分布式计算和存储框架,在人工智能、大数据领域有非常广泛的应用。笔者在查阅资料发现网络博客介绍的配置方法大多需要借助虚拟机,或者需要重新创建ubuntu账户并设置密码为空以避免hadoop连接不上的问题,甚至是在ubuntu系统内再搭建一个虚拟机的ubuntu系统,太麻烦。
本文介绍一种直接在ubuntu系统上配置hadoop的方法,亲测有效,希望能帮到读者。
一、安装包下载
hadoop下载网址
spark下载网址
Apache Download MirrorsHome page of The Apache Software Foundationhttps://www.apache.org/dyn/closer.lua/spark/spark-3.2.4/spark-3.2.4-bin-without-hadoop.tgz笔者使用的hadoop版本号是hadoop-3.2.3,spark版本号是spark-3.2.4-bin-without-hadoop,注意如果读者自行安装时选择了hadoop的其他版本,请保证spark版本号和hadoop相匹配,是否匹配可查阅spark官网信息。
“2.Choose a package type”一行就显示了适配的hadoop版本。
如果下载缓慢,请科学上网,或者从清华大学开源软件镜像站中搜索下载,hadoop和spark均在apache文件夹中。
二、设置免密登陆
为了方便和增强集群节点之间的通信和协作,在安装Hadoop时要预先设置免密登录。
首先执行下方指令安装ssh,需要输入的地方输入y即可。
sudo apt install openssh-client openssh-server
执行下方指令生成密钥对,需要输入的地方点击回车即可。
ssh-keygen -t rsa
执行下方指令以拷贝公钥到主机,需要回答问题的地方输入yes。
ssh-copy-id -i ~/.ssh/id_rsa.pub localhost
执行下方指令,如果没有要求输入密码,则免密登陆设置成功。
ssh localhost
三、安装JDK
可以直接选择openjdk进行安装,比较简单,请直接移步下面的链接文章。
ubuntu20.04安装JDK11-CSDN博客https://blog.csdn.net/wyr1849089774/article/details/133823977
四、安装Hadoop
在主目录中创建一个opt文件夹用来放置待配置的文件
mkdir opt
通过图形界面将之前下载过的安装包解压到opt文件夹中
然后执行下方命令设置软链接
cd ~/opt
ln -s hadoop-3.2.3/ hadoop
执行下方命令打开bashrc文件,进行环境配置
sudo gedit ~/.bashrc
如果执行上述命令没有反应,则先Ctrl+C退出一下,再重新执行上述命令,可正常开启
在.bashrc文档末尾添加如下两行语句,注意第一行的XXX要改成自己的用户名。
export HADOOP_HOME=/home/XXX/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
执行下方指令打开hadoop-env.sh配置文件,进行环境变量的配置。
gedit ~/opt/hadoop/etc/hadoop/hadoop-env.sh
将文档中export JAVA_HOME=${JAVA_HOME}这句话改为下面这句话,然后保存。
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
输入以下命令使.bashrc文档的修改生效,可用hadoop命令验证配置是否成功
source ~/.bashrc
hadoop
如果输入hadoop后显示如上,则安装成功
五、配置Hadoop伪分布式
在伪分布式的配置中,需要配置的文件都在~/opt/hadoop/etc/hadoop目录下,因此要执行下面的指令,切换到这个目录下进行操作。
cd ~/opt/hadoop/etc/hadoop
之后涉及到的文件,可以通过可视化界面直接打开文件修改,也可以通过 sudo gedit 或者 sudo vim 的方式进行修改。
记得将XXX修改为自己的用户名!
1.core-site.xml
打开core-site.xml文件,在configuration标签中加入以下内容,保存。
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/XXX/opt/hadoop/tmp</value>
</property>
2.hdfs-site.xml
打开hdfs-site.xml文件,在configuration标签中加入以下内容,保存。
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/XXX/opt/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/XXX/opt/hadoop/tmp/dfs/data</value>
</property>
3.mapred-site.xml
如果没有这个配置文件,可以执行下方指令,根据样本文件mapred-site.xml.template复制一份,注意要在~/opt/hadoop/etc/hadoop目录下操作。
cd ~/opt/hadoop/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
如果本来就有,则打开mapred-site.xml文件,在configuration标签中加入以下内容,保存。
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
4.yarn-site.xml
打开yarn-site.xml文件,在configuration标签中加入以下内容,保存。
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
除此之外,还需要添加在此文件中添加hadoop的classpath
在命令行中输入
hadoop classpath
回车后会显示若干路径,将这些路径全部复制并添加到文件中,格式如下(用路径替换XXX的部分):
<property>
<name>yarn.application.classpath</name>
<value>XXXXXXXXX</value>
</property>
六、启动与测试
在第一次启动Hadoop时,需要执行下方的指令对HDFS进行格式化
还需要借助ssh完成免密登陆
hdfs namenode -format
在~/opt/hadoop下执行下面的指令启动Hadoop
cd ~/opt/hadoop
start-all.sh
执行下面的指令查看进程
jps
务必保证六个进程都在,如果缺少进程,那么说明在安装过程中出现了问题,建议删除hadoop文件并重新安装
七、web访问
在虚拟机中,使用浏览器打开如下两个网址,可以查看HDFS的NameNode和YARN的ResourceManager相关信息。
localhost:9870
localhost:8088
八、测试
在home主目录下创建一个文本文件test.txt,文本文件中输入若干字母或者单词,不同字母或者单词之间用空格分隔,然后执行下方命令行上传到HDFS文件系统。
笔者使用示例文件如下:
将该txt文件上传到hdfs根目录中
hdfs dfs -put test.txt /
运行mapreduce示例代码,进行词频统计,然后查看运行结果
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.3.jar wordcount /test.txt /out
hdfs dfs -ls /out
#查看输出内容
hdfs dfs -cat /out/part*
结果展示如下
如果正常显示,则hadoop安装成功且可以正常使用
如果想要关闭hadoop节点,则可以运行以下指令
cd hadoop
close-all.sh
如果想要从hdfs系统中删除已有的文件,则可以运行以下指令(/filename需要替换成想要删除的文件的路径)
hadoop删除操作
hadoop fs -rm -r -skipTrash /filename
九、安装Spark
将之前下载的spark安装包解压缩到opt文件夹中,并设置软链接
cd ~/opt
ln -s spark-3.2.4-bin-without-hadoop spark
执行下方指令打开bash配置文件,进行环境变量的配置
sudo gedit ~/.bashrc
在.bashrc文档末尾添加如下两行语句,注意第一行的XXX要改成自己的用户名
export SPARK_HOME=/home/XXX/opt/spark
export PATH=$SPARK_HOME/bin:$PATH
输入以下命令使修改生效
source ~/.bashrc
先执行下方的指令
cd ~/opt/spark/conf
cp spark-env.sh.template spark-env.sh
然后执行下方指令打开spark-env.sh文件
sudo gedit spark-env.sh
在文件末尾添加配置如下信息,配置SPARK_DIST_CLASSPATH 变量注意更换成自己的用户名。
export SPARK_DIST_CLASSPATH=$(/home/XXX/opt/hadoop/bin/hadoop classpath)
使用如下命令进入scala交互界面:
spark-shell
执行下方代码,如果可以输出结果,即为spark成功安装。
var r = sc.parallelize(Array(1,2,3,4))
r.map(_*10).collect()
如果想要退出scala,则运行指令(注意冒号需要使用英文输入法输入)
:quit
十、利用Spark的rdd完成词频统计
首先执行指令进入scala交互界面
spark-shell
Spark可以从Hadoop支持的任何存储源中加载数据去创建RDD,包括本地文件系统和HDFS等文件系统
上文中已经将test.txt传递到了hdfs中,故这里从hdfs创建RDD,并用RDD对这个文件进行词频分析
在scala下执行下方的代码,依托这个文件创建RDD。
//依托hdfs新建rdd
val test=sc.textFile("/test.txt")
//将test中的每一行按照空格进行切分
val word = test.flatMap(line=>line.split(" "));
//通过map方法将word中的每个单词转换为 (单词,1) 的元组形式
var wordmap=word.map(x=>(x,1));
//通过 reduceByKey 方法对 RDD wordmap 中的每个单词进行聚合,累加
var wordcount=wordmap.reduceByKey((a,b)=>a+b);
//输出结果
wordcount.foreach(println);
最终结果输出如下:
十一、利用Spark的rdd完成词频统计(程序处理)
这里我们使用scala语言创建RDD并进行词频分析
新建一个文件WordCount.scala放在home文件夹下用于词频分析,文件内容如下
val test=sc.textFile("/test.txt")
//依托hdfs新建rdd
//val test=sc.textFile("file:///home/test.txt")
//这种方法是依托虚拟机中的文件新建RDD
//file://后为本地路径
val word = test.flatMap(line=>line.split(" "));
//将test中的每一行按照空格进行切分
var wordmap=word.map(x=>(x,1));
//通过map方法将word中的每个单词转换为 (单词,1) 的元组形式
var wordcount=wordmap.reduceByKey((a,b)=>a+b);
//通过 reduceByKey 方法对 RDD wordmap 中的每个单词进行聚合,累加
wordcount.foreach(println);
//输出结果
执行如下命令进入scala交互界面:
spark-shell
进入scala交互界面后,执行下方指令运行WordCount.scala这一程序,并获取输出
:load WordCount.scala
其中,:load命令加载脚本文件,并执行其中的代码。输出结果如下:
至此,hadoop和spark安装和应用教程展示完毕~
更多推荐
所有评论(0)