Ubuntu 18.04 安装大数据入门教程(hadoop3.2、scala2.11.12、spark2.4、sbt1.2.8)
环境依赖说明
参考教程 : https://blog.youkuaiyun.com/weixin_42001089/article/details/81865101
Hadoop - 依赖: SSH server、JDK 。
Spark ---- 依赖: hadoop、JDK、scala、sbt
版本不要弄错了,不然会有问题
安装 SSH service
集群,单节点模式都需要用到SSH登录(类似于远程登录,你可以登录某台Linux主机,并且在上面运行命令),Ubuntu默认已安装了SSH client,此外还需要安装SSH server:
sudo apt install openssh-server
安装后,可以使用命令登录本机:
ssh localhost
此时会有如下提示(SSH首次登陆提示),输入yes。然后按提示输入本机密码,这样就可以登录到本机。
但这样登录是需要每次输入密码的,我们需要配置成SSH无密码登录比较方便。
首先推出刚才的ssh,就回到了原先的终端窗口,然后利用ssh-keygen生成密钥,并将密钥加入到授权中:
exit
exit 退出刚才的ssh localhost
cd ~/.ssh/
若没有该目录,请执行一次
ssh localhost
ssh-keygen -t rsa
会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys
加入授权,此时再用
ssh localhost
命令,无需输入密码就可以直接登录了.
安装JDK8
-
官网下载JDK
地址: http://www.oracle.com/technetwork/articles/javase/index-jsp-138363.html 选择相应的 .gz包下载 -
解压缩,放到指定目录(以jdk-7u60-linux-x64.gz为例)
创建目录:
sudo mkdir /usr/lib/jvm
解压缩到该目录:
sudo tar -zxvf jdk-7u60-linux-x64.gz -C /usr/lib/jvm
- 修改环境变量:
sudo vim ~/.bashrc
文件的末尾追加下面内容:
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_60 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
- 使环境变量马上生效
source ~/.bashrc
- 测试
java -version
成功示例:
安装hadoop3.2
Hadoop 可以通过 http://mirrors.cnnic.cn/apache/hadoop/common/ 下载,一般选择下载最新的稳定版本,即下载”stable”下的hadoop-3.2.0.tar.gz这个格式的文件,这是编译好的,另一个包含src的则是Hadoop源代码,需要进行编译才可使用。
下载完hadoop文件后一般可以直接使用。
我们选择将Hadoop安装至/usr/local/中:
sudo tar -zxf ~/Downloads/hadoop-2.7.3.tar.gz -C /usr/local #解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.3/ ./hadoop #将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop #修改文件权限
Hadoop解压后即可使用。输入如下命令来检查Hadoop是否可用,成功则会显示Hadoop版本信息:
cd /usr/local/hadoop
./bin/hadoop version
Hadoop单机配置
Hadoop默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单java进程,方便进行调试。
现在可以执行例子来感受下Hadoop的运行。
Hadoop附带了丰富的例子(运行./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar 可以看到所有的例子),包括wordcount、terasort、join、grep等。
在此我们选择运行grep例子,将input文件夹中的所有文件作为输入,筛选当中符合正则表达式dfs[a-z.]+的单词并统计出现的次数,最后输出结果到output文件夹中。
cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input #将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar grep ./input/ ./output 'dfs[a-z.]+'
cat ./output/*
执行成功后如下所示,输出了作业的相关信息,输出的结果是符合正则的单词dfsadmin出现了1次
1 dfsadmin
rm -r ./output
Hadoop伪分布式配置
Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的java进程来运行,节点既作为NameNode也作为DataNode,同时,读取的是HDFS中的文件。
Hadoop的配置文件位于hadoop目录下的etc/hadoop/目录中,伪分布式需要修改2个配置文件core-site.xml和hdfs-site.xml。Hadoop的配置文件是xml格式,每个配置以声明property的name和value的方式来实现。
修改配置文件core-site.xml(使用 vim ./etc/hadoop/core-site.xml),修改下面的
cd ./etc/hadoop/
#如果没有vim vi 也可以 或者 安装 sudo apt install vim
vim core-site.xml
# vim 编辑器简单说明
1.摁 "i" 开始编辑
2.摁 “ESC” 输入 “:wq” 保存 注意 别忘记 ":" 号
修改:
<configuration>
</configuration>
修改为:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
#你的hadoop安装目录下的tmp
<value>/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
同样的,修改配置文件hdfs-site.xml
vim hdfs-site.xml
修改:
<configuration>
</configuration>
修改为:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
#修改成你的hadoop安装目录
<value>/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
#修改成你的hadoop安装目录
<value>/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
切换回hadoop主目录。如:cd /usr/local/hadoop
NameNode的格式化:如果没有问题此命里只执行一次便可,不要多次执行
./bin/hdfs namenode -format
出现如下即成功:
18/08/20 11:07:16 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
18/08/20 11:07:16 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ykt-virtual-machine/127.0.1.1
************************************************************/
开启NameNode和DataNode守护进程
./sbin/start-dfs.sh
注意:如果报错没有没有JAVA_HOME
则手动添加即可:(当前目录是usr/local/hadoop)
在文件最下面添加你的 JAVA_HOME 地址
如果不知道可以用
echo $JAVA_HOME
查询JAVA_HOME地址 然后复制添加到文件最下变
cd etc/hadoop/
vim hadoop-env.sh
# JAVA_HOME地址
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
开启NameNode和DataNode守护进程
./sbin/start-dfs.sh
验证:
jps
如果出现以包含下4个线程即为成功:
3648 DataNode
3941 Jps
2678 NameNode
3095 SecondaryNameNode
运行:
上面的单击模式,grep例子读取的是本地数据,伪分布式读取则是HDFS上的数据。
伪分布式和单机的mapreduce基本上都是一样的,最主要的区别就是该模式下要使用HDFS的文件系统。
所以首先需要在HDFS中创建用户目录:
./bin/hdfs dfs -mkdir -p /user/hadoop
然后创建输入文件夹:
./bin/hdfs dfs -mkdir /user/hadoop/input
类似单机模式,将etc/hadoop下所有的xml文件复制到输入
./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input
然后查看:
./bin/hdfs dfs -ls /user/hadoop/input
可以看到:
-rw-r–r-- 1 ykt supergroup 7861 2018-08-20 13:15 /user/hadoop/input/capacity-scheduler.xml
-rw-r–r-- 1 ykt supergroup 1028 2018-08-20 13:15 /user/hadoop/input/core-site.xml
-rw-r–r-- 1 ykt supergroup 10206 2018-08-20 13:15 /user/hadoop/input/hadoop-policy.xml
-rw-r–r-- 1 ykt supergroup 1069 2018-08-20 13:15 /user/hadoop/input/hdfs-site.xml
-rw-r–r-- 1 ykt supergroup 620 2018-08-20 13:15 /user/hadoop/input/httpfs-site.xml
-rw-r–r-- 1 ykt supergroup 3518 2018-08-20 13:15 /user/hadoop/input/kms-acls.xml
-rw-r–r-- 1 ykt supergroup 5939 2018-08-20 13:15 /user/hadoop/input/kms-site.xml
-rw-r–r-- 1 ykt supergroup 690 2018-08-20 13:15 /user/hadoop/input/yarn-site.xml
运行grep(该流程的mapreduce就和单机一样了,不一样的就是从hdfs文件系统取输入)
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar grep /user/hadoop/input output 'dfs[a-z]+'
查看结果:
./bin/hdfs dfs -cat output/*
可以看到和单机模式一样的结果
1 dfsadmin
利用HDFS Web界面,不过只能查看文件系统数据
注意 新版的hadoop不再是 (http://localhost:50070) 而是 http://localhost:9870
#关闭Hadoop
./sbin/stop-dfs.sh
开启Hadoop:
./sbin/start-dfs.sh
./sbin/start-yarn.sh
说明:
ResourceManager和NodeManager是yarn资源调度器启动的
DataNode、 NameNode和SecondaryNameNode是hdfs文件系统启动的
所以如果有哪项没有启动成功,就说明对应(yarn或hdfs)的配置文件没有配置成功,需要去看日志手动解决
二者都有相应的web即:
yarn:
http://localhost:8088/cluster
安装 Scala2.11.12
下载地址:https://www.scala-lang.org/download/2.11.12.html
下载好后解压到:/usr/local/
sudo tar zxvf scala-2.11.12.tgz -C /usr/local/
进入到减压目录并重命名:
cd /usr/local/
sudo mv scala-2.11.12 scala
配置环境变量:
sudo vim ~/.bashrc
在最后添加:
#scala 环境变量
export SCALA_HOME=/home/xiyeming/SoftwareSpace/scala
# 如果 PATH 存在 就不用在添加了 直接在后面PATH追加就可以了 以 “:” 分隔
export PATH=$PATH:$SCALA_HOME/bin
生效:
source ~/.bashrc
测试:
scala -version
Spark安装:
下载地址:http://spark.apache.org/downloads.html
下载好后解压到:/usr/local/
sudo tar zxvf spark-2.4.0-bin-hadoop2.7.tgz -C /usr/local/
进入到减压目录并重命名:
cd /usr/local/
sudo mv spark-2.4.0-bin-hadoop2.7 spark
配置环境:
sudo vim ~/.bashrc
export SPARK_HOME=/home/xiyeming/SoftwareSpace/spark
export PATH=$PATH:$SPARK_HOME/bin
生效:
source ~/.bashrc
配置配置’spark -env.sh’
进入到spark/conf/
cp spark-env.sh.template spark-env.sh
vim spark-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_181 #你的JAVA_HOME
export HADOOP_HOME=/usr/local/hadoop #你的HADOOP_HOME
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop #你的HADOOP_HOME
export SCALA_HOME=/usr/local/scala #你的scala_HOME
export SPARK_HOME=/usr/local/spark #你的spark_HOME
export SPARK_MASTER_IP=127.0.0.1
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8099
export SPARK_WORKER_CORES=3
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=5G
export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_EXECUTOR_CORES=1
export SPARK_EXECUTOR_MEMORY=1G
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HADOOP_HOME/lib/native
配置Slave
cp slaves.template slaves
vim slaves
默认就是localhost 所以不用修改
如果有节点自己添加就可以了。
启动(前提是hadoop伪分布已经启动,就是上面的jps后出现那几个):
启动sbin目录下的start-master.sh以及start-slaves.sh
Spark的web界面:http://127.0.0.1:8099/
安装 sbt
https://www.scala-sbt.org/download.html
这里我们使用 sbt 1.2.8 (.tag)
建立目录,并将下载的文件解压到所建目录
mkdir /opt/scala
sudo tar -vzvf sbt-1.2.8.tgz -C /opt/scala
$ vim ~/.bashrc
/*在文件尾部添加如下代码后,保存退出*/
export PATH=/opt/scala/sbt/:$PATH
/*使配置文件立刻生效*/
$ source ~/.bashrc
创建运行脚本
cd /opt/scala/sbt
sudo vim sbt
在sbt文件中添加如下内容
#/opt/scala/sbt/bin/sbt-launch.jar 换成你的目录
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M" java $SBT_OPTS -jar /opt/scala/sbt/bin/sbt-launch.jar "$@"
4.修改sbt文件的权限
chmod u+x sbt
测试:
sbt sbtVersion
/*第一次执行时,会下载一些文件包,然后才能正常使用,要确保联网了,安装成功后显示如下*/
# 注意:以前版本的 命令是 sbt sbt-version 现在版本是 sbt version 或 sbt sbtVersion
[info] Set current project to sbt (in build file:/opt/scala/sbt/)
[info] 1.2.8
~ END ~