欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

搭建Spark集群详细步骤(1)

程序员文章站 2022-05-07 15:50:31
...

构建Spark集群(1)

构建spark集群经典4部曲:

1.搭建hadoop单机和伪分布式环境
2.构造分布式hadoop集群
3.构造分布式spark集群
4.测试spark集群

第一步 搭建hadoop单机和伪分布式环境

开发hadoop需要的基本软件
安装每个软件
配置hadoop单机模式,并运行Wordcount示例
配置hadoop伪分布式模式,并运行wordcount示例

1.1开发hadoop需要的基本软件

虚拟机
ubuntu 16.04版本
jdk-8

1.2安装每个软件

一般需要2到3个虚拟机
安装虚拟机之后,为了简化权限问题,下面以root用户的身份登录和使用ubuntu系统,默认情况下,ubuntu系统并没有开启root用户,需要我们做如下设置:

1.sudo -s 进入root用户权限模式
2.vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf修改配置文件
3.在里面添加如下内容:

[SeatDefaults] 
greeter-session=unity-greeter 
user-session=ubuntu 
greeter-show-manual-login=true #手工输入登陆系统的用户名和密码 
allow-guest=false #不允许 guest 登录

4.启动root账号 sudo passwd root
5.重新启动系统

:如果现在用root登录有错误,读取/root/.profile时发生错误:mesg:tty n,还需要进行如下修改。

sudo vim /root/.profile
将mesg n替换成 tty -s && mesg n

1.3配置hadoop单机模式并运行wordcount示例

1安装ssh

(1)使用命令:
apt-get install ssh
(2)安装ssh后启动服务
etc/init.d/ssh start
(3)以下命令验证服务是否正常启动:
ps -e |grep ssh
(4)设置免密码启动,生成私钥和公钥
ssh-****** -t rsa -P ""
搭建Spark集群详细步骤(1)
在/root/.ssh 中生成两个文件:id_rsa 和 id_rsa.pub,id_rsa 为私钥,id_rsa.pub 为 公钥,我们将公钥 id_rsa.pub 追加到 authorized_keys 中,因为 authorized_keys 用于保 存所有允许以当前用户身份登录到 ssh 客户端用户的公钥内容:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
(5)检查能否免密码登录ssh:
ssh localhost
输入yes继续
搭建Spark集群详细步骤(1)
使用exit可以退出localhost。
再次登录localhost就不需要密码了

2.安装rsync

apt-get install rsync
这个已经默认安装了

3.安装hadoop

这里选用2.7.4版本
(1)创建/usr/local/hadoop文件,并将下载的hadoop解压到该目录下。

mkdir /usr/local/hadoop
在下载位置解压hadoop
tar xzf hadoop-2.7.4-bin.tar.gz
mv hadoop-2.7.4 /usr/local/hadoop

(2)在hadoop-env.sh配置java信息
cd /usr/local/hadoop/hadoop-2.7.4/etc/hadoop
vim hadoop-env.sh
设置JAVA_HOME和PATH
export JAVA_HOME=java的路径
export PATH=$PATH:/usr/local/hadoop/hadoop-2.7.4/bin
查看jdk路径的方式

whereis java
可能会显示多个路径(如果不是自己安装的情况下)

搭建Spark集群详细步骤(1)
ls -l /usr/bin/java 看看这是否是个软连接,找出这个软连接指向的路径即可
搭建Spark集群详细步骤(1)
发现输出的信息,显示还是个软连接,继续找出, ls -l /etc/alternatives/java
搭建Spark集群详细步骤(1)
发现输出的信息,显示还是个软连接,继续找出,ls /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
搭建Spark集群详细步骤(1)
这个就是最后的java路径了。
(3)修改完之后,保存退出,编译
source hadoop-env.sh
(4)验证hadoop版本信息,使用hadoop version 命令即可
搭建Spark集群详细步骤(1)
(5)为了方便我们在开机启动后也能够方便的使用hadoop/bin下的命令,可以把bin文件配置到~/.bashrc文件中,这样就可以在任何目录中使用hadoop命令了.
打开~/.bashrc文件

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASS_PATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:/usr/local/hadoop/hadoop-2.7.6/bin:$PATH  

保存退出之后,编译
source ~/.bashrc
(6)运行hadoop自带的wordcount示例
首先在 hadoop 的目录下创建一个 input 目录并把etc/hadoop下的所有文件 copy 到该目录 下,需要如下命令即可:
mkdir input
cd etc/hadoop
cp * ../../input
然后使用hadoop自带的wordcount示例进行测试,示例程序在/share/hadoop/mapreduce/目录下。程序为:
hadoop-mapreduce-examples-2.7.6.jar
命令为:
hadoop jar hadoop-mapreduce-examples-2.7.6.jar wordcount input output
结果输出到output文件中。
(7)查看运行结果
cat output/*

1.4配置hadoop伪分布模式并运行wordcount示例

1.配置yarn-env.sh文件

文件路径为/usr/local/hadoop/hadoop-2.7.4/etc/hadoop/yarn-env.sh
进入文件vim yarn-env.sh
加入JAVA_HOMEexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
编译source yarn-env.sh

2.配置hadoop核心文件core-site.xml,主要配置HDFS的地址和端口号

在core-site.xml中加入

<configuration>
        <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/usr/local/hadoop/hadoop-2.7.6/tmp</value>
             <description>Abase for other temporary directories.</description>
        </property>
        <property>
             <name>fs.defaultFS</name>
             <value>hdfs://localhost:9000</value>
        </property>
</configuration>

3.配置hdfs-site.xml

在文件中加入:

<configuration>
        <property>
             <name>dfs.replication</name>
             <value>1</value>
        </property>
        <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:/usr/local/hadoop/hadoop-2.7.6/tmp/dfs/name</value>
        </property>
        <property>
             <name>dfs.datanode.data.dir</name>
             <value>file:/usr/local/hadoop/hadoop-2.7.6/tmp/dfs/data</value>
        </property>
</configuration>

4.配置mapred-site.xml

在文件中加入:

<configuration>
         <property>
              <name>mapreduce.framework.name</name>
              <value>yarn</value>
         </property>
</configuration>

5.配置yarn-site.xml

<configuration>
         <property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
             </property>
</configuration>

6.启动Hadoop

(1)首先需要对namenode进行格式化
./bin/hdfs namenode -format
搭建Spark集群详细步骤(1)
搭建Spark集群详细步骤(1)
(2)启动HDFS
./sbin/start-dfs.sh
问题一.此处出现了报错:
搭建Spark集群详细步骤(1)
解决方案是:在hadoop-env.sh中添加

export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.6
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native" 

然后用source hadoop-env.sh编译
之后在/etc/profile文件中加入如下代码:

export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.6
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin:$HADOOP_HOME/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

重启ubuntu系统,使配置内容生效。

问题二.之后重新运行hdfs,./sbin/start-dfs.sh
使用jps查看进程,发现没有namenode的启动信息,如下图所示:
搭建Spark集群详细步骤(1)
解决方案:有网友说可能是端口冲突(core-site.xml配置文件中设置的内容),可以通过netstat -anp|grep 9000命令查看是否有应用占用该端口,这里不是这个问题
第二种方法,

stop-dfs.sh -> 停止
删除之前配置时创建的tmp目录
完了再新建tmp目录
hdfs namenode -format -> 重新格式化
start-dfs.sh -> 再次启动

问题解决:
搭建Spark集群详细步骤(1)
(3)启动yarn
./sbin/start-yarn.sh
搭建Spark集群详细步骤(1)
jps命令查看进程
搭建Spark集群详细步骤(1)
可以再web中查看集群运行情况
http://localhost:50070

7.测试wordcount程序

使用命令在dfs下创建input文件夹
hdfs dfs -mkdir /input
运行程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input/ /output

如果需要反复运行程序,需要在运行之前删除output文件夹,命令为:
hdfs dfs -rm -r /output
如果在运行的过程中报错“无法分配内存”
这是因为hdfs的默认内存为1000MB,需要重新设置hadoop-env.sh文件

# The maximum amount of heap to use, in MB. Default is 1000.
export HADOOP_HEAPSIZE=2000