linux(ubuntu16.04)上安装hadoop(3.2)以及spark(3.0)单机版/伪分布式
关于hadoop和spark的安装,网上有很多很多教程,但是按照教程一步一步安装下来之后发现并不能运行orzz,对新手极其不友好,因此,经过我一步步试错和总结,在这里将安装hadoop和spark的成功经验分享给大家,希望通过这篇文章,大家可以轻松愉快的在自己本地安装hadoop和spark~
一.前期准备
给linux创建hadoop新账户,并设置无密码登录
- 终端输入
sudo useradd -m hadoop -s /bin/bash
创建一个名为hadoop的新用户,使用/bin/bash 作为该用户的shell
- 终端输入
sudo passwd hadoop
设置hadoop密码,为了方便,将密码设置为1
- 为hadoop账号添加管理员权限
sudo adduser hadoop sudo
- 点击右上角的齿轮进入hadoop账号。
- 打开终端,更新apt等。
sudo apt-get install update
sudo apt-get install upgrade
- 安装ssh server
sudo apt-get install openssh-server
- 配置无密码登录
ssh localhost
exit
cd ~/.ssh/
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys
之后再次使用 ssh localhost
可直接登录不用密码。
安装java环境
Hadoop3.0之后的版本只支持Java8以后的版本。
安装default-jdk default-jre默认安装java8
sudo apt-get install default-jre default-jdk
配置.bashrc文件
vim ~/.bashrc
将java目录添加至文件最末尾
export JAVA_HOME=/usr/lib/jvm/default-java
export PATH=$JAVA_HOME/bin:$PATH
退出后查看java版本
java -version
二. 安装hadoop
本文使用的是hadoop3.2版本
-
解压压缩包
sudo tar -zxf hadoop-3.2.0.tar.gz -C /usr/local
-
重命名
cd /usr/loacl
sudo mv hadoop-3.2.0/ hadoop
-
修改文件权限
sudo chown -R hadoop:hadoop ./hadoop
-
将java环境写入hadoop-env.sh,不然hadoop依旧会找不到java环境。hadoop-env.sh 在/usr/local/hadoop/etc/hadoop目录下
export JAVA_HOME=/usr/lib/jvm/default-java
此处尽量使用java路径,如果写成${JAVA_HOME},hadoop有可能会报找不到JAVA_HOME的错误 -
查看hadoop是否安装成功
./bin/hadoop version
如果显示hadoop版本信息则表示安装成功
-
配置单机运行环境 文件在目录 /usr/local/hadoop/etc/hadoop/ 下
6.1 配置core-site.xml文件
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
6.2 配置hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>hadoop-cluster</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/nn</value>
</property>
<property>
<name>dfs.namenode.ch
eckpoint.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/dn</value>
</property>
</configuration>
6.3配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
6.4.配置yarn-site.xml
<configuration>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<!-- 指定reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:///data/hadoop/yarn/nm</value>
</property>
</configuration>
6.5 创建相关目录并改owner为hadoop
sudo mkdir -p /data/hadoop/hdfs/nn
sudo mkdir -p /data/hadoop/hdfs/dn
sudo mkdir -p /data/hadoop/hdfs/snn
sudo mkdir -p /data/hadoop/yarn/nm
sudo chown -R hadoop:hadoop /data
启动并验证安装成功 首先我们需要格式化文件系统bin/hdfs namenode -format 运行./sbin/start-all/sh之后浏览器输入localhost:8088/cluster 看到Hadoop界面代表安装成功!
三. 基于Hadoop3.2安装Spark3.0
spark安装需要先安装scala,若没安装运行一下sudo apt install scala
即可。
将spark压缩文件解压至/usr/local目录
sudo tar zxf spark-3.0.0-bin-hadoop3.2.tgz -C /usr/local
类似于安装hadoop的过程,我们将其重命名为spark,并将其权限设置为hadoop用户所有 sudo chown -R hadoop:hadoop spark
。
配置 spark-env.sh文件,该文件在/usr/local/spark/conf目录下,
export JAVA_HOME=/usr/lib/jvm/default-java
export SCALA_HOME=/usr/share/scala-2.11
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_MASTER_IP=Master
export SPARK_LOCAL_DIRS=/usr/local/spark
export SPARK_DRIVER_MEMORY=2g
其中 scala的目录到/usr/share目录下查看,确定scala的版本号是否为2.11。如果不是需要修改SCALA_HOME的目录。
上述配置是我本机的目录配置,需要适当修改更改为当前机器的目录。 配置好相关文件之后启动即可:sbin/start-all.sh,此时输入jps命令后可以发现多了一个Master进程。访问localhost:8080,看到spark的主页就证明安装成功了!
四. 正确性测试以及辅助脚本。
由于我们把Hadoop和spark安装在文件夹/usr/local下面,我们干脆在此文件夹下新建一个文件夹help_bash来存放我们的帮助脚本: start.sh:这个脚本用于一键启动:
/usr/local/hadoop/sbin/start-all.sh
/usr/local/spark/sbin/start-all.sh
stop.sh:这个脚本用于一键启动:其实同样也是两行命令:
/usr/local/hadoop/sbin/stop-all.sh
/usr/local/spark/sbin/stop-all.sh
run_env.sh:这个脚本用于设置相关的环境变量,便于我们更方便的执行:
export HADOOP_HOME=/usr/local/hadoop
export SCALA_HOME=/usr/share/scala-2.11
export SPARK_HOME=/usr/local/spark
export PATH="${HADOOP_HOME}/bin:${SCALA_HOME}/bin:${SPARK_HOME}/bin:$PATH"
同样的上述脚本的目录结构都是我本机的目录结构,如果目录不一致,需要做相应的更改!
测试运行
启动hadoop和spark,并引入相关环境变量
sh start.sh
source run_env.sh
下面我们做一个Word count进行测试: 首先我们需要准备一个测试文件
ceshi.txt
a,b,c,d,a,c,d,s,c,d,s,d,f
在Hadoop文件系统中新建一个test目录
hadoop fs -mkdir /test
使用 hadoop fs -ls /
可查看刚才创建的test目录
将ceshi.txt文件hadoop中的test目录下
hadoop fs -put ceshi.txt /test
放入之后我们查看相关的目录结构:hadoop fs -ls -R /
,发现ceshi.txt在目录中。
然后我们运行spark-shell
spark-shell //进入spark命令行模式
val file=sc.textFile("hdfs:/test/ceshi.txt")
val count=file.flatMap(line=>line.split(",")).map(word=>(word,1)).reduceByKey(_+_)
count.collect
最后看到spark将统计结果输出,安装成功~