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

构建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-keygen -t rsa -P ""
这里写图片描述
在/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继续
这里写图片描述
使用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
可能会显示多个路径(如果不是自己安装的情况下)

这里写图片描述
ls -l /usr/bin/java 看看这是否是个软连接,找出这个软连接指向的路径即可
这里写图片描述
发现输出的信息,显示还是个软连接,继续找出, ls -l /etc/alternatives/java
这里写图片描述
发现输出的信息,显示还是个软连接,继续找出,ls /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
这里写图片描述
这个就是最后的java路径了。
(3)修改完之后,保存退出,编译
source hadoop-env.sh
(4)验证hadoop版本信息,使用hadoop version 命令即可
这里写图片描述
(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
这里写图片描述
这里写图片描述
(2)启动HDFS
./sbin/start-dfs.sh
问题一.此处出现了报错:
这里写图片描述
解决方案是:在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的启动信息,如下图所示:
这里写图片描述
解决方案:有网友说可能是端口冲突(core-site.xml配置文件中设置的内容),可以通过netstat -anp|grep 9000命令查看是否有应用占用该端口,这里不是这个问题
第二种方法,

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

问题解决:
这里写图片描述
(3)启动yarn
./sbin/start-yarn.sh
这里写图片描述
jps命令查看进程
这里写图片描述
可以再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

猜你喜欢

转载自blog.csdn.net/aidanmo/article/details/82193884